2 분 소요

[CTF-d] 저희는 디스크 이미지를 찾았습니다. 풀이

Environments

Name Config
CPU Intel Core i7 7700
Architecture Intel64
OS Microsoft Windows 11
Tools - Mh-Nexus HxD Edito

Problem

URL: ctf-d.com/challenges#저희는%20디스크%20이미지를%20찾았습니다.

목표: disk.img 로부터 Flag 찾기
접근 방법: 이미지 HEX 값 Reading 으로부터 유추 가능한 파일 찾기

Theory Summary

잠시 JFIF 파일 구조에 대해 간략하게 짚고 넘어가겠다.

Hex Value Description
FF D8 SOI. Start Of Image. JFIF 파일의 시작을 알림
FF E0 ... 4A 46 49 46 ... JFIF APP0 영역. JFIF 라는 값을 포함. 썸네일도 포함 가능
FF DA SOS. Start Of Scan. 스캔 데이터 영역
... 압축된 이미지 데이터 영역
FF D9 EOI. End Of Image. JFIF 파일의 끝을 알림

여기서 Fake Signature header가 아닌 것은 APP0 Segment 를 보면 알 수 있다.

Name Size Description
Maker 2 APP0의 시작을 알림
Length 2 APP0 Maker 를 제외한 Segment 영역의 크기
Idenitfier 5 JFIF의 아스키 코드를 포함.
00 으로 끝남
Version 2 JFIF의 버전을 뜻함. 첫번째 바이트가 앞, 두번째 바이트가 뒷 버전.
01 01의 경우 1.01
Units 1 픽셀 밀도의 단위.
00: 유닛이 없으며 픽셀 값 그 자체.
01: 인치당 픽셀
02: cm당 픽셀
Xdensity 2 X 축 픽셀 밀도. 절대 0이 될 수 없음
Ydensity 2 Y 축 픽셀 밀도. 절대 0이 될 수 없음
Xthumbnail 1 RGB 썸네일의 X축 픽셀 크기. 절대 0이 될 수 없음
Ythumbnail 1 RGB 썸네일의 Y축 픽셀 크기. 절대 0이 될 수 없음
Thum Data 3n 압축되지 않은 24bit RGB 썸네일. R G B 각각 하나씩 한 픽셀 데이터를 뜻하므로 3n

Solution

몇일 째 HackCTF가 Down 되어있다. 따라서 풀던 문제를 중단하고 CTF-D와 Dreamhack의 War Games를 포스팅 해보려 한다.

우선 아예 문제에서 대놓고 Hint로 “우리가 가는 곳에는 파일시스템이 필요 없습니다” 라고 File System 구조적 접근을 하지마라고 알려주는 것 같다.

HxD Editor를 통해 열어보는 경우 File System 에 대한 정보를 찾기 어렵긴하다. 문제를 풀고 난 뒤 덧붙이자면 아마 유추로는 EXTended file system Series System 인 것 같다는 유추만 간단히 하고 지나간다.

따라서 살아 남아 존재하는 파일 내용들을 읽어보기로 한다. 남아있는 Data는 모두 이미지 가장 끝단 쪽에 존재하였다. 따라서 아래에서 위로 따라 가기로 한다.

가장 먼저 눈에 띈 것은 읽을 수 있는 구간 이었던 EXIF에 대한 Data 였다. 하지만 정상적인 Header 가 없으며 우리가 일반적으로 아는 구조로 이루어져 있지 않다.

그렇게 더 거슬러 올라가면 찾을 수 있는 JFIF File Signature Header가 있다. 0xFF 0xD8. 우선 정상적으로 Data 가 존재하는 파일임을 확인 하기 위해 End of Image 값인 0xFF 0xD9 값을 찾으면 역시 존재 한다. APP0 Segment 의 식별자인 4A 46 49 00도 존재하는 것을 미루어 보아 정상적인 JFIF File 인 것으로 추정.

SOI ~ EOI 까지의 Data 를 별도 저장시 Flag 를 흭득 가능 하다.