CTF | wargame

sCTF16 - Failed Compress (파일추출, JPEG, PNG)

nopdata 2016. 4. 14. 08:58

 

파일 하나가 주어진다.

압축을 하려 했는데 실패했다고 하는 것 같다.




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