WarGame
2013 1st Whitehat Contest (제 1 회 화이트햇 콘테스트 팀 예선) - [Suspect Block]
Jack2
2013. 9. 24. 12:30
2013 1st Whitehat Contest (제 1 회 화이트햇 콘테스트 팀 예선) - [Suspect Block]
write-up by KimC & Jack2
Prob)
다음으로 SQLite file format 의 헤더이다.
다음으로 두 번째 삭제된 데이터의 index 를 찾아보도록 하자.
결론적으로 찾아낸 2개의 페이지 인덱스는 10 과 28 이 된다.
본 문제 답 형식에 맞게 md5(1028) 에 해당하는 값을 인증하여 점수를 획득했다.
용의자 Anncc의 PC를 분석하던 도중 공범과 주고 받은 메일에 첨부된 특이한 파일을 발견하였다.
이 파일을 통해 Anncc는 공범과 범행을 위한 신호를 데이터 삭제를 통해 주고 받았다고 하는데...
해당 파일에서 삭제된 데이터가 속한 페이지 인덱스 2개를 찾아 Anncc가 전달하고자 하는 날짜를 알아맞춰 보자.
답 형식 : md5(MMDD) 소문자
MM = First Deleted Page Index
DD = Second Deleted Page Index
- 인증키 입력창에 브루트 포싱 공격으로 인증할 경우 무효 처리 -
이 파일을 통해 Anncc는 공범과 범행을 위한 신호를 데이터 삭제를 통해 주고 받았다고 하는데...
해당 파일에서 삭제된 데이터가 속한 페이지 인덱스 2개를 찾아 Anncc가 전달하고자 하는 날짜를 알아맞춰 보자.
답 형식 : md5(MMDD) 소문자
MM = First Deleted Page Index
DD = Second Deleted Page Index
- 인증키 입력창에 브루트 포싱 공격으로 인증할 경우 무효 처리 -
Sol)
문제 파일을 다운로드 받은 뒤 압축 해제 한 결과 Suspect_Block.db 라는 하나의 파일이 담겨져 있다.
이 파일을 file 명령어를 통해 확인한 결과 SQLite database 파일 이라는 것을 알 수 있었다.
그래서 일단 SQLite Browser 를 이용해서 이 파일을 살펴보았다.
Data 를 살펴보던 중 urls 테이블에서 의심가는 부분이 발견 되었다.
index 번호가 정상적으로 진행되다가 120 다음 121이 아닌 122 가 나오는 것을 확인 할 수 있다.
즉, 문제 지문에서
이 파일을 통해 Anncc는 공범과 범행을 위한 신호를 데이터 삭제를 통해 주고 받았다고 하는데...
데이터 삭제를 통해 주고 받은 부분이 바로 121 에 해당하는 것을 유추할 수 있다.
다음으로 SQLite Browser 에서는 보이지 않았지만 어딘가에 흔적이 있을 수 있다는 생각에 Hex editor 를 통해 database 를 살펴보았다.
살펴 본 결과
앞에서 확인한 index 120 과 122 에 해당하는 정보 (빨간색 네모 영역) 사이에 SQLite Browser 에서 보이지 않던
index 121 로 예상되는 (파란색 네모 영역) 정보가 담긴 것을 확인 할 수 있었다.
index 121 로 예상되는 (파란색 네모 영역) 정보가 담긴 것을 확인 할 수 있었다.
해당 정보를 이용해서 Anncc 가 공범과 주고 받았다고 예상 할 수 있다.
문제 제목에서 약간의 힌트를 얻어 Suspect Block. 즉 의심되는 Block 이 이 부분 이라고 생각된다.
그런데 해당 database 를 살펴보던 중 keyword_search_terms 테이블에서 의심가는 부분이 발견되었다.
검색한 결과가 해당 테이블에 기록이 되어야 하는데 위에서 확인했던 'startuday night 소율' 이라는 검색어를 입력했기 때문에
'미쓰에이' 처럼 keyword_search_terms 에 기록이 되어야 하는데 존재하지 않는 것을 발견했다.
이 정보를 이용하여 SQLite Browser 에서 'startuday night 소율' 에 해당하는
HEX 값(73 61 74 75 72 64 61 79 20 6E 69 67 68 74 20 EC 86 8C EC 9C A8)을 확인한 결과
SQLite Browser 상에서는 볼 수 없지만 hex 값은 존재하는 의심가는 Block 이 하나 더 있을 것을 확인 할 수 있었다.
1단계로 의심가는 블록 두 개를 찾은 것이다.
다음 나오는 문제 지문을 보면
해당 파일에서 삭제된 데이터가 속한 페이지 인덱스 2개를 찾아 Anncc가 전달하고자 하는 날짜를 알아맞춰 보자.
이라고 한다.
SQLite 에서 정의하고 있는 페이지 / 인덱스에 대해 살펴보았다.
페이지)
위 그림에서 보듯이 SQLite database file format 은
동일한 크기의 여러 페이지로 나누어져 있고 각각의 페이지 크기는 2의 n 제곱크기 라는 사실을 알 수 있다.
다음으로 SQLite file format 의 헤더이다.
16번째 오프셋의 2byte 가 의미 하는 부분이 나타나 있다. 페이지의 크기를 나타내 준다고 한다.
위에서 SQLite file format은 여러개의 페이지를 가지고 있고 각각의 페이지는 동일한 크기를 가진다고 했다.
database 를 살펴 보면 16번째 오프셋(0x10) 에는 0x1000 이라는 값이 나타나있다.
즉, 각각의 페이지 크기는 0x1000 으로 일정하다는 뜻이다.
의심가는 부분은 앞에서 미리 찾아 놓았기 때문에 해당 부분으로 이동해서
첫 번째 삭제된 데이터가 바로 0xA000 바로 전에 존재한다는 것을 알 수 있다.
페이지 구조는
0x0 ~ 0xFFF (1Page)
0x1000 ~ 0x1FFF (2Page)
.
.
.
0x9000 ~ 0x9FFF (10Page)
다음과 같고 첫 번째 삭제된 데이터 페이지 인덱스는 “10” 에 해당 한다.
페이지 구조는
0x0 ~ 0xFFF (1Page)
0x1000 ~ 0x1FFF (2Page)
.
.
.
0x9000 ~ 0x9FFF (10Page)
다음과 같고 첫 번째 삭제된 데이터 페이지 인덱스는 “10” 에 해당 한다.
다음으로 두 번째 삭제된 데이터의 index 를 찾아보도록 하자.
두 번째 삭제된 데이터를 찾았더니 해당 오프셋 0x1BC?? 이라는 것을 알 수 있다.
0x1B000 ~ 0x1BFFF 블록은 28 페이지에 해당한다.
0x1B000 ~ 0x1BFFF 블록은 28 페이지에 해당한다.
결론적으로 찾아낸 2개의 페이지 인덱스는 10 과 28 이 된다.
마지막으로
답 형식 : md5(MMDD) 소문자
MM = First Deleted Page Index
DD = Second Deleted Page Index
MM = First Deleted Page Index
DD = Second Deleted Page Index
본 문제 답 형식에 맞게 md5(1028) 에 해당하는 값을 인증하여 점수를 획득했다.