[SUNINATAS 2번] 문제풀이
WEB Level 2
로그인창 달랑 하나 있고 아무것도 없습니다.
SQL Injection에 관한 문제인가 싶어 여러가지 값들을 입력해 보았지만 아무런 반응이 없고,
아무값도 입력하지 않았을 때에는 위와 같은 메시지가 뜹니다.
혹시나 싶어 페이지 소스를 보았더니, 정말 '헉' 이었습니다.
로그인 폼의 동작을 결정하는 함수의 일부분이 JavaScript로 작성되어 있었을 뿐만 아니라,
로그인 성공의 결정적인 조건이 주석으로 힌트처리가 되어 있었습니다.
또한, 아무 값도 입력하지 않았을 때에 나타났던 메시지의 정체도 밝힐 수 있었습니다.
자바스크립트는 'Client Side' 동작을 수행하는 언어로서 보안적인 부분에 있어서 매우 취약하기 때문에, 웹을 구성할때 보안이 필요한 부분에는 잘 사용하지 않는 언어입니다. (이 부분에 대해서는 나중에 추가적으로 포스팅 하겠습니다.)
또한, 주석을 통한 중요정보 노출은 생각보다 실제로 많이 발생하는 취약점 중 하나입니다.
개발과정에서 편의를 위해 남겨 놓은 정보가 제대로 제거되지 않고 있다가, 그대로 서버에 올라가는 경우입니다.
(개발과정에서 이러한 실수가 발생하지 않도록 주의하도록 합시다.)
프록시 툴을 활용하여, 힌트에서 제공한 id=pw 부분을 처리하는 분기점에 경고문 대신 "Good Job!"을 출력하는 스크립트와, 입력정보를 지우지 않고 서버로 넘기는 구문을 작성하였습니다.
스크립트를 수정한 페이지에서 id와 pw에 똑같은 값을 넘기자, Auth Key가 출력되었습니다.
반응형