일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python
- 사칙연산
- 백준
- 써니나타스
- xcz.kr
- 수학
- Forensics
- 문자열
- MySQL
- N0Named
- 구현
- HackCTF
- Database
- Web Hacking
- Incognito
- cryptography
- Digital Forensics
- CTF
- 정렬
- 그리디 알고리즘
- wargame
- writeup
- SuNiNaTas
- Web
- 인코그니토
- misc
- Text
- php
- C
- Network
- Today
- Total
보안을 그리다, 훈이
[Forensics] HackCTF Secret Document(150p) Write Up 본문
HackCTF Forensics 분야 Secret Document(150p) 문제 풀이입니다.
'Flag.zip' 파일을 다운로드하고 압축을 해제해봅시다.
'flag.txt', 'hint1.txt', 'hint2.txt' 총 3개의 텍스트 파일이 추출되는군요.
'flag.txt'를 보니 플래그처럼 생긴 문자열이 있네요.
바로 제출해보니 풀렸습니다???
Solve! (풀긴 풀었으니,,ㅎ)
무슨 상황인가 했는데 'hint1.txt'에서 Brute-Force 즉, 무차별 대입 공격을 하지말라는 문구가 있는 것을 보니 원래 flag.txt 파일에 잠금이 걸려 있는 것 같네요.
그러나 'hint2.txt'에서 '암호가 존재한다고 생각하냐'는 문구를 보면 잠금처리는 되어 있지만 암호는 걸려있지 않아 보입니다.
이게 무슨 말이냐?
먼저, ZIP File Format에 대한 개념이 필요합니다.
아래 링크로 이동하여 한 번에 상세히 학습하는 것을 추천드립니다!
[Digital Forensics] ZIP File Format
간단히 살펴보면, 압축 파일은 크게 Local File Header, Central Directory, End of central directory record 총 3개의 파일 구조로 이루어져 있습니다.
여기서 Central Directory를 눈여겨 봐야하는데, 이 부분은 Local File Header의 확장된 데이터 뷰를 제공하며, Local File Header에 포함된 데이터를 더하여 파일 속성, 구조에 대한 local 기준을 가집니다.
Central Directory의 구조를 봅시다.
위 그림과 같이 9~10 byte 부분에 Flags 필드가 존재하네요.
Flags 필드는 2byte의 크기를 가지며, Bit 00부터 Bit 15까지의 식별자가 존재합니다.
필드
|
크기
|
설명
|
Flags
|
2 바이트
|
바이트 식별자
Bit 00 : 암호화된 파일
Bit 01 : 압축 옵션
Bit 02 : 압축 옵션
Bit 03 : 데이터 기술자(data descriptor)
Bit 04 : 강화된 디플레이션(deflation)
Bit 05 : 압축된 패치 데이터
Bit 06 : 강력한 암호화
Bit 07-10 : 사용하지 않음
Bit 11 : 언어 인코딩
Bit 12 : 예약
Bit 13 : 헤더값을 마스크
Bit 14-15 : 예약
|
그럼 이 개념을 'Flag.zip' 파일에 적용해 봅시다.
위 hex에서 블록친 부분이 바로 잠금이 걸려있다는 'flag.txt' 파일에 대한 Central Directory입니다.
따라서 초록색 박스로 포장된 4byte 공간은 당연히 Signature 필드가 되겠죠.
'50 4B 01 02'는 Central Directory의 Signature입니다.
다음, 빨간색 박스 부분이 바로 제가 건드려야할 Flags 필드입니다.
Flags 값이 '09 08'이라고 하네요.
리틀엔디안 방식으로 보면 '08 09'가 되겠네요.
Flags 필드의 바이트 식별자와 비교하여 분석하기 위해 '08 09'를 bit별로 쪼개봅시다.
Hex | 0 | 8 | 0 | 9 | ||||||||||||
값 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 |
바이트 식별자에 따라 Bit 00 부분은 암호화된 파일을 의미하는데 값으로 1이 주어져 있네요.
하지만 'flag.txt'는 암호화되지 않은 파일이므로 1을 빼주게 되면 Flags 값은 '08 08'이 되네요.
Hex 값을 수정하고 파일을 열어보면 문제의 의도에 맞게 정상적으로 열리게 됩니다!
끝.
'Security > Wargame' 카테고리의 다른 글
[Forensics] HackCTF 나는 해귀다(150p) Write Up (0) | 2021.12.13 |
---|---|
[Forensics] HackCTF 세상에서 잊혀진 날 찾아줘!(150p) Write Up (0) | 2021.12.13 |
[Forensics] HackCTF So easy?(100p) Write Up (0) | 2021.12.10 |
[Forensics] HackCTF Question?(100p) Write Up (0) | 2021.12.10 |
[Forensics] HackCTF Welcome_Forensics(50p) Write Up (0) | 2021.12.10 |