본문 바로가기

[+] Hacking/[-] Challenge Report

Codegate 2012 Forensic 200 풀이

이번에는 200점 문제를 풀어보도록 하겠습니다.

이번 문제도 7z 압축 포맷으로 되어 있어 압축을 풀면 100점 문제와 동일하게 Users 폴더가 나옵니다.

일단 문제를 살펴보도록 하죠.

When IU who lives in Seoul tried to do SQL Injection attack a certain WEB site, suddenly the browser was closed abnormally. What is the SQL Injection value she tried to enter and when the browser was closed? The time is based on Korea Standard Time(UTC +09:00)
Time Format is YYYY-MM-DDThh:mm:ssTZD (TZD : +hh:mm or hh:mm) 

Answer : injection_value|time 
('|' is just a character)
Convert ' ' to '_' for injection value. 

 
문제를 간단하게 요약하여 보면 서울에 사는 아이유가 SQL Injection 공격을 시도하는데 시도 할 때 마다 자꾸 웹 브라우저가 비 정상적으로 종료된다고 합니다. 웹 브라우저가 비 정상적으로 종료 될 때 주입한 SQL Injection 값은 무엇이며, 시간은 또 언제인가를 물어보는 문제 입니다.

시간 값은 문제에서 제시한 형태로 바꾸어 주라네요.

저는 처음에 비 정상적으로 종료된 브라우저에 초점을 맞추어 구글 크롬을 분석하였습니다. 일단 공격을 하기 위해서는 브라우저 히스토리에 접속 기록이 있을테니 말이죠 :)

예전에 제가 구글 크롬을 포렌식적 의미로 접근하여 분석 한 글이 있습니다(http://maj3sty.tistory.com/861)

구글 크롬의 히스토리 파일을 열어 보면 아래와 같은데 대부분은 아이유가 포렌식 책을 구입하거나 문서 검색을 한 흔적들 입니다.

이때 제 눈에 들어오는 URL이 하나 있었습니다.

[그림 1 - 아이유가 접근한 URL 목록 중 브라우저 세션에 관한 포렌식 문서]

아무래도 문제를 출제하신 출제자 분께서 힌트로 제공하는 듯한 느낌을 받았습니다.

문서를 읽어보니 파이어폭스, 오페라 브라우저의 비 정상적인 세션에 대해서 다루는 포렌식 문서였습니다.

문서를 모두 읽고 보니 해당 문제의 Users 폴더는 구글 크롬과 파이어폭스가 설치되어 있는 것을 확인 할 수 있었습니다.

일단 문서에 있는 파이어폭스 세션 분석을 따라해 보기로 하였습니다.

 * 참고 : 지금부터 하는 분석과정은 모두 문서에 있는 과정 입니다.

일단 파이어폭스의 세션 정보를 담고 있는 sessionstore.js 파일을 찾아야 합니다. 그 파일은 아래 경로에 있습니다.

 - Users\proneer\AppData\Roaming\Mozilla\Firefox\Profiles\075lfxbt.default

이 js 파일은 그냥 볼 경우 정리가 되어 있지 않아 보기 힘듭니다. 문서에서는 이 파일을 분석하기 위한 도구로 JSON Editor라는 온라인 분석 도구를 소개 하였습니다.

 - http://braincast.nl/samples/jsoneditor/ 
 
이 웹 페이지에로 접속하여 js 소스를 아래와 같이 넣어주고 bulid tree 버튼을 그 아래에 있는 이미지처럼 정렬이 됩니다.

 [그림 2 - 소스 복사/붙여넣기 후 bulid tree 누르기 전]

[그림 3 - build tree 버튼 누른 후]

정렬이 되면 이제 그 값을 읽어보면 끝 입니다.

문제에서 원하는 값은 인젝션 값입니다. 일단 인젝션 값을 찾아봅니다.

 [그림 4 - 인젝션 값]

여러가지 필드를 보다보면 forensic-proof.com 호스트 formdata에 1_UNI/**/ON_SELECT 라는 값이 존재 합니다.

이 값만 봐도 이게 인젝션이라는 값은 알 수 있을 것 입니다.

이제 시간 값만 찾으면 됩니다. 시간 값은 아래와 같은 필드에 존재 합니다.

[그림 5 - 시간 값]

시작 시간 값과 마지막 업데이트 시간값이 있는데 문제에서는 비 정상적으로 종료되었다고 했으니 마지막 업데이트 시간 값이 문제에서 요구하는 시간 값일 것 입니다.

그럼 이제 문제에서 요구하는 형태(injection_value|time)로 답을 만들면 됩니다.

[그림 6 - 시간 값 변환]

최종적으로 아래와 같이 답이 만들어 집니다.

 - 1_UNI/**/ON_SELECT|2012-02-1210:23:17+09:00
또는
 - 1_UNI/**/ON_SELECT|2012-02-1210:23:1709:00