* 본 게시판은 DMA 팀원이 기존에 풀었던 CTF 문제나, 개인이 작성해 낸 문제를 정리한 내용입니다. 문제에 대한 공유 및 관련 내용은 댓글에 문의해 주시거나 필자의 E-Mail로 문의 주시면 내부 회의 후 답변 드리도록 하겠습니다. 추가적으로 포스팅의 제목과 실제 CTF 문제와의 관련은 없으며 풀이 과정을 토대로 어떤 내용인지에 대한 간략한 설명을 제목에 작성하였습니다.

 - 필자 E-Mail : wotmd9408@naver.com

 - 가상머신 : 미사용(본래 분석간에는 가상머신 활용 권고)

 - OS : Windows 10 EnterPrise 64bit

 - RAM : 32GB

 - 필요 Tool : HxD 또는 WinHex


이 문제를 처음 받았을 때의 정확한 날짜는 기억이 나질 않는다. 단순히 밥을 먹던 저녁 시간때 인 것만 기억날 뿐.. 대략 19시 정도..? 지난 Quest_1에 해당하는 문제를 줬던 팀원이 다시한번 문제를 발송했다. 주어진 시간은 2시간 정도? 그리 길게 시간이 주어지지 않은 것으로 보아 문제 난이도가 그리 높지는 않아보였다. 


[그림 1. 출제 문제]

우리에게 주어진 것은 png 확장자로 된 파일 하나, 그리고 그 파일에는 [그림 1]과 같이 hackover18이라고 쓰여있었다. 사실 처음에는 저게 문제가 아니라 저 사이트를 찾아 들어가는 줄 알았는데 그게 아니라 저 파일 자체가 문제였다.(기존 문제처럼 첨부가 아니라 단순 사진으로 올라와서 햇갈렸기 때문이다.

이 글을 보는 독자라면 Quest_1도 보고 왔으리라 생각하지만, 그래도 혹시모르니까 다시 한번 이야기를 하도록 하자. 아마 이번이 마지막으로 설명하는 내용이 아닐까 싶다. 

파일은 각자를 표현하는 고유한 값이 존재한다. 이 값을 File Signature 라고 하며 그것을 볼 수 있는 사이트[1]를 공유하니 참고하기 바란다. 물론 모든 File Signature가 다 다른건 아니다. 보통 앞의 4개가 Signature로 구분되기는 하나, 파일이 너무 많고 비슷한 구조가 있어 뒤에 4자리 까지 더해 8자리로 구분하거나 중간에 값을 통해 구분하기도 하니 무조건 맹목적으로 앞의 4자리만 보는 일은 없도록 하자.(Ex MS Office)


[그림 2. PNG 확장자 File Signature]

[그림 3. hackover18.png 파일의 File Signature와 Trailer]

[그림 2]에서 보는바와 같이 png 파일의 File Singature는 89 50 4E 47 0D 0A 1A 0A 이며 Trailer 값은 49 45 4E 44 AE 42 60 82 이다.(물론 이렇게 외우는 것 보다 %PNG / IEND 로 외우는게 더 편하다) 이를 토대로 볼때, 이 파일은 확장자 변조가 되지 않은 정상적인 PNG 파일임을 알 수 있다. 

그럼 여기서 문제가 하나 생긴다. 하나의 통으로 정상적으로 된 PNG 파일이란 소린데, 그림에는 아무 힌트도 없다. 그렇다면 설마 [그림 3]에 보이는 저 알 수 없는 값들을 해석해야 한단 소리인가? 아무리 분석이 노가다라지만 저 노가다는 사실 하고 싶지는 않다. 어떤 분들은 이 포스팅의 제목에서 눈치를 챘을 수도 있을 것이고, 아니면 PNG 파일을 열어 봤을 때 눈치를 챘을 수도 잇을 것이다. 필자는 문제를 받아 PNG 파일음을 봤을 때 어느정도 감이 오기는 했다.


[그림 3]의 Trailer는 분명 정상적인 PNG 파일의 끝을 나타내 주는 문구가 맞다. 다만 그것은 어디까지나 이 파일이 하나의 PNG Structure를 가지고 있을 때의 이야기다. 이제 어느정도 감이 오는가? 결론부터 말해주자면 이 파일은 하나의 PNG 파일이 아니다.

우선 [그림 3]을 보기 위해 열었던 HxD로 돌아가 보도록 하자. 그리고 커서를 가장 앞쪽에 위치하도록 해주자. 그리고 [Ctrl + F] 눌러 찾기로 들어가서 아까 알려준 File Signature 사이트로 접근하여 PNG 파일에 해당하는 Trailer의 hex 값을 복사하도록 하자.(띄어쓰기도 동일하게 적용해야 한다.) 그리고 확인을 눌러 [그림 3]에서 봤던 가장 마지막 부분으로 가는지 확인하자.

[그림 4. Trailer값 복사하기]

[그림 5. Trailer 결과 확인]


이상하다. [그림 5]에서 보면 중간에 PNG 파일의 끝부분이 나온 뒤 다시 PNG 파일의 Signature가 시작된다. 분명 내가 보는 것은 하나의 파일인데 두개의 파일이 들어있는 것 처럼 보인다. [그림 5] 부분에서 다시 검색을 하면 그제서야 이제 마지막 부분의 Trailer가 보이게 된다. 이제 새 File Signature부터 마지막까지 선택한 뒤 복사하여 새 PNG 파일로 저장해 보도록 하자.

[그림 6. 새 PNG 파일의 결과]

Quest_1에서 봤던 것처럼 이번에도 그림에 우리가 찼던 Flag 값이 보이는 것을 알 수 있다. 해당 문제는 실제 외국에서 있었던 CTF 문제로 지난번 Quest_1에 비해서는 어찌보면 조금 더 직관적으로 쉽게 풀수 있는 문제가 아니었나 싶다. 해당 문제는 찾기가 그리 어렵지 않을 듯 하기에 한번쯤은 풀어볼 것을 추천한다.


 * 참 조

 [1] https://www.garykessler.net/library/file_sigs.html

Posted by Latte_
,