ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2팀_최민주_Write_Ups (HackCTF_Magic PNG)
    2021/Write-Ups 2022. 2. 7. 21:19

    Magic PNG를 풀어보았다!

     

    압축 파일을 다운 받고 압축 해제를 시켜보니 PNG 이미지 파일이 나왔다. 

    파일을 열어보려고 시도하니

    열리지 않았다. 이미지 파일 형식을 바꿔봐도 열리지 않았다. 

    다른 프로그램에 연결하여 파일을 열어보려 시도해도 열리지 않았고 뜻밖의 힌트를 팝업창을 통해 얻을 수 있었다. (그냥 내가 몰랐던 거다)

    '올바른 비트맵 파일이 아니거나 현재 지원되지 않는 포맷입니다.' 이 문구대로 비트 또는 포맷이 잘못되었나 보고 HxD 헥스 편집기로 이미지 파일을 열어보았다.

    파일을 카빙하기 전에 PNG format을 좀 더 알아보았다.

     

    가장 기본적인 방식으로, 파일의 헤더(header)와 푸터(footer)를 기반으로 카빙을 하는 기법이다.

    파일의 헤더는 쉽게 말해, '나는 이제 무슨 무슨 파일을 시작할거야' 라는 신호이고,

    파일의 푸터는 쉽게 말해 '무슨 무슨 파일은 이제 이 신호를 끝으로 마지막이야' 라는 신호이다.

    [출처] 디스크 포렌식 : 파일 카빙(File Carving)|

     

    PNG에는 크게 세 청크가있다.

     

    <IHDR (49 48 44 52) = 헤더 즉 PNG의 여러 메타 데이터가 저장된다.>

    <IDAT (49 44 41 54) = 실제로 이미지에 대한 데이터가 저장된다.>

    <IEND (49 45 4E 44) = 파일의 끝을 알려주는 청크>

     

    헤더와 푸터를 모두 가지고 있는 확장자는 JPEG(JPG), GIF, PNG, PDF, HTML 등이 있으며 우리가 살펴보고 있는 이미지 파일 PNG도 여기에 해당된다.

     

    PNG의 헤더 시그니쳐 89 50 4E 47 0D 0A 1A 0A 이고 문제 파일의 헤더 시그니쳐는 89 50 4E 47 2E 0A 2E 0A 로 차이가 발생한다.

     

    다른 부분을 삭제하고 PNG 헤더 시그니쳐와 일치하도록 수정한 후 저장해준다. (*수정시 바이트를 삭제하고 작성하게 되면 삽입이 아닌 들여쓰기가 되므로 꼭 바이트 삽입을 통해서 작성하도록 한다. 이 부분에서 뒷부분이 지워진지도 모르고 저장했다가 파일이 열리지 않아서 원인을 찾느라 시간을 많이 소비했다.)

    저장한 후 다시 파일을 열어보았다.

     

    여전히 파일에 문제가 있는지 아래가 잘린 것을 확인할 수 있다.

     

    청크중 하나인 IDAT (49 44 41 54)를 살펴보았다.

    대소문자가 구별이 되어있는 상태로, 소문자로 표시가 되어있어서 IDAT 49 44 41 54 가 아닌 69 64 61 74로 저장되어있다. 이를 올바르게 바꿔주고 저장해준다.

     

     

    이미지 파일을 다시 열어주면 플래그를 획득할 수 있다!!!!!

    성공!