파일 하나가 주어진다.
압축을 하려 했는데 실패했다고 하는 것 같다.
flag가 어딘가에 있다는 것을 알고 있다고 하는데 이게 처음에 무슨 소리인지 알지 못했는데 풀면서 알게되었다.(화남)
compress.zip파일은 확장자는 zip파일이긴 하지만 헤더를 보면 JFIF, 즉 JPEG파일이다.
하지만 제일 앞 시그니쳐 부분이 바뀌어 있다 이 부분은 FF D9 FF E0 00 ... 이런식인데 이걸 바꾸어 준다.
jpeg는 파일의 끝부분을 나타내는 footer부분이 있다.
jpeg의 footer는 FF D9 이므로 이 값까지 찾아서 다시 만들어 보면
....? 처음에 저게 답인줄 알고 인증했다.
그런데 compress.zip을 계속 보면
또 있다. 심지어 파일의 시그니쳐 부분이 앞에서 한 것과는 다르다. 그래도 다행히 E0 00 부터는 같으므로 다시 footer까지 만들어 이미지로 만들어 보면
..? 역시 알 수 없다.
확인을 해 보니 사진이 엄청 많이 있다. 압축은 커녕 그냥 이어붙이기를 하고 시그니쳐부분은 싹 다 날려버린것이다.
문제는 파일헤더 형식이 JPEG뿐만 아니라 PNG도 있었다.
PNG또한 시그니쳐 부분을 변조해 파일 카빙도 제대로 되지 않는 상황.
문제를 풀기 위해 만든 소스
원래 더 간단히 한번에 할 수 있었지만.. JPEG를 다 추출하고 나서 PNG가 있음을 알아차렸기 때문에 소스는 분할되어있다.
JPEG는 JPEG형식의 footer를 기준으로 처음부터 footer까지 jpg파일로 만든다.
PNG는 PNG형식의 헤더에 IHDR이라는 문구가 시그니쳐 뒤에 박히는데 이 값을 기준으로 시작점을 잡고
PNG의 footer인 IEND를 찾아 마지막점을 찾아준다.
그렇게 얻어낸 jpg, png파일이 총 945개.. 힌트의 의미가 여기있었다.. 어딘가에는 flag가 있겠지...
flag를 알아낼 방법이 없어 별 수 없이 일일이 보던 중 답을 얻을 수 있었다.
sctf{1_am_50_50rry_4_d01ng_thi5_2_u}
'CTF | wargame' 카테고리의 다른 글
sCTF16 - Banana Boy (파일카빙) (0) | 2016.04.14 |
---|---|
sCTF16 - Lengthy Lingo (문자열 길이 -> 아스키) (0) | 2016.04.14 |
sCTF16 - When in Rome (시저암호) (0) | 2016.04.14 |
Wechall / WWW-Robots (0) | 2016.04.10 |
Wechall / URL (0) | 2016.04.10 |