White Security
wargame.kr 사이트의 16번째 문제입니다. "간단한 SQL 인젝션 문제입니다. 트래픽을 줄이기 위해서는 어떻게 해야 할까요? 개발자의 관점에서 생각해 주세요." 링크를 따라 들어가니 아이디 입력란이 있군요. posix라고 입력하고 join을 눌러보겠습니다. 로그인을 하니 채팅 프로그램이 존재합니다. 이것저것 입력해보니 대부분 정상적으로 들어가네요. 다만 #을 입력하면 #을 포함한 이후 문자들이 모두 사라집니다. 크롬 개발자 도구를 열어 로그를 살펴보니 1초 간격으로 XHR을 통해 지속적으로 데이터를 받아오고 있네요. 중간의 chatlog.php?data=posix.tistory.com 부분은 제가 데이터를 입력한 전송한 부분입니다. 페이지 소스를 열어보겠습니다. 페이지 로드가 끝난 후에 init ..
wargame.kr 사이트의 14번째 문제입니다. "32비트 응용프로그램의 정수 타입에 대해 알고있니?" 링크에 접속하니 D1, D2 이름으로두개의 값을 입력할 수 있도록 되어 있습니다. 먼저 소스를 살펴 보겠습니다. d1과 d2를 모두 int타입으로 캐스팅하여 $input1, $input2에 저장하였습니다.그리고 p7.c라는 c언어 소스를 기반으로 컴파일 하였습니다.$input1을 인자로 컴파일 된 프로그램을 실행했군요.결과값은 1이 되어서는 안됩니다.그 값이 $input2와 비교하여 같으면 Flag를 출력하도록 되어 있습니다. http://wargame.kr:8080/php_c/p7.c처음에 헤매었던 부분인데 /tmp/p7.c에 있어야 할 프로그램 소스가웹 서버에도 존재하고 있습니다. 소스를 살펴보니..
wargame.kr 사이트의 13번째 문제입니다. "PNG 파일을 복구하세요! 하지만 이게 정말 PNG 파일일까요?(스테가노그래피 문제가 아닌 포렌식 문제입니다.)" 링크에 접속하면 위와 같은 단일 폼이 존재하며code를 찾아 입력하라고 합니다. 페이지 소스를 확인해보니 너무나 깔끔하군요.이미지 파일에만 집중하면 될 것 같습니다. 배경의 pattern.png 파일을 받아 확인해보니마지막의 Japng r119 라는 부분이 눈에 띄어서 찾아 보았습니다. Japng 는 APNG 파일을 생성하는 Java 라이브러리 라는 것 같습니다.Java 5 이상 버전을 필요로 한다는데, 우리에게 필요한 내용은 아니네요. APNG에 대해서 알아 보겠습니다.기존의 움직이는 파일 포멧이었던 gif 와 비슷한 종류인 것 같군요. ..
wargame.kr 사이트의 12번째 문제 입니다. "간단한 비교 문제입니다. 힌트요? 문제 제목을 보세요 :D" 링크에 접속하면 입력값을 넣는 폼과 소스 확인용 링크가 나옵니다. 소스를 확인해보니 입력된 텍스트를 submit_check 함수를 통해 json 형식으로 전송하고 있네요.submit_check함수는 ./util.js 내에 포함되어 있지만, 중요하지 않으니 생략했습니다. json형식으로 받은 데이터를 json_decode 함수를 통해 풀어내어mixed 타입 변수로 바꾸었군요.그리고 $key와 == 연산자로 느슨한 비교를 수행하여같으면 Flag를 출력하도록 하고 있습니다. 예시로 posix 를 입력하고 제출하면json 파라미터에 URI 인코딩 된 형태로 전송됩니다. burp 프록시를 사용해 "p..
wargame.kr 사이트의 11번째 문제입니다. admin 아이디로 로그인하세요!아래 유저 테이블의 컬럼 정보가 주어진 것으로SQL injection 문제라는 것을 유추할 수 있습니다. 링크로 진입하면 로그인, 가입의 두가지 기능 페이지가 존재합니다. 먼저 로그인 버튼을 누르면 페이지 좌측 상단에위와 같이 자그마한 로그인 폼이 떠오르고적당히 입력해 보면 login failed 알림을 볼 수 있습니다. 다음으로 가입 페이지로 살펴보겠습니다.아이디와 페스워드, 두가지 정도를 입력 할 수 있네요. admin으로 가입을 시도해 보았지만,정보 메시지만 보일 뿐, 가입이 되지 않습니다. 가입 페이지 소스를 살펴 보겠습니다.자바스크립트로 아이디와 패스워드의 길이를 점검하며각 4자, 7자가 넘지 않으면 제출이 불가하..
wargame.kr 사이트의 10번째 문제입니다. 그저 비교하세요. 서로 다른 값을 :D 링크에 접속하니 두개의 입력칸이 있습니다.그리고 하단의 view-source 링크를 통해 php 소스를 확인할 수 있습니다. 먼저 소스를 확인해보겠습니다. 브루트포스 방지를 위해 sleep(3) 구문를 끼워넣었군요.첫번째 값은 알파벳으로, 두번째 값은 숫자로 이루어져야 하며md5 해싱을 한 후에 == 비교를 하여 값이 같다고 여겨져야 합니다. php에는 두개의 비교 연산자가 존재합니다.느슨한 비교인 ==, 엄격한 비교인 === 가 그것인데요. 자료형까지 고려하여 완벽하게 같지 않으면 탈락시키는 ===와는 다르게==는 의도와 다르게 통과시키는 경우가 더러 있습니다. 이번 문제의 경우에도 적용되는 부분이 있는데요. 바로..
wargame.kr 사이트의 아홉번째 문제입니다. 본 문제는 간단하기 때문에 본문을 보기보다는php strcmp 취약점에 대해 탐색해보고 직접 푸는 편이 유익할 것이라 생각됩니다. 만약 strcmp 함수를 우회하면 플래그를 얻을 수 있어요 링크에 접속하니 위와 같은 단일 입력 폼과php 소스링크를 확인 할 수 있었습니다. 먼저, 하단의 링크를 통해 소스를 확인해 보겠습니다. 브루트포스를 방지하기 위해 sleep함수를 끼워넣었고 password 변수와 사용자 입력 변수를 인자로문제에서 언급했던 strcmp 함수를 수행하여0을 반환한 경우 플래그를 출력하도록 했군요. strcmp에서 0을 반환시키려면 두 인자의 값이 같아야만 합니다.그런데 password 변수값은 알 방법이 없지요. 사실 strcmp는, 한..
wargame.kr 사이트의 여덟번째 문제입니다. 이 DB는 어떤 종류일까요? 유저 이름과 DB간의 상관관계를 찾아봅시다. 링크에 접속하니 위와 같은 로그인 폼을 확인할 수 있었습니다.user에 posix라고 입력하고 로그인 해 보겠습니다. 위와 같은 방명록 형식으로 텍스트 저장을 할 수 있습니다.posix.tistory.com 이라고 입력하여 저장해본 결과, 별 문제없이 올라가네요. 각종 특수문자들을 입력해 보았습니다..어떤 이유에서 인지는 모르겠지만, 홀수개의 작은 따옴표는 입력이 되지 않습니다.다시 로그인 화면으로 돌아와서admin계정으로 로그인을 해 보겠습니다. 이런, 당연하게도 막혀있군요! 페이지 소스를 확인해 본 결과, 자바스크립트를 통해 블록하고 있었습니다. burpsuite 프록시를 통해 ..