ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ctf-d] 이 파일에서 플래그를 찾아라!
    2022/Write-Ups 2022. 8. 23. 23:53

    4팀 김기연

    파일 크기가 너무 커서 원본이 여기에 업로드 되지 않는다 ..

     

     

    sunrise.png

     

     

    binwalk로 분석해본 결과, png랑 zlib이 있었는데 경험상 zlib에는 뭐가 없던 경우가 많았지만 그래도 한 번 살펴본 결과 역시 뭐가 없었다. 찾아보니 png를 마지막에 압축할 때 zlib이 사용된다고 한다.

     

     

    HxD로 살펴봐도 딱히 눈에 띄는 부분은 없었다.

     

     

    스테가노그래피 툴도 사용해봤지만 뭐가 없었다. 애초에 용량이 커서 .. 확인도 어려웠다.

     

     

    그럼 png 구조적으로 문제가 있는 걸까 싶어 알아보았다.

    png 파일은 시그니처와 여러 청크들로 구성된다.

     

    헤더 시그니처 (8B)

    : 89 50 4E 47 0D 0A

     

    이후에 바로 IHDR 청크가 온다.

    Image Header라는 의미로, 이미지에 대한 기본 정보가 존재하며 상세값은 아래와 같다.

     

    IHDR 청크

    00 00 00 0D: 청크 데이터 길이 (4B)

    49 48 44 52: 청크 종류. 지금 보는 게 IHDR 청크 ~.~ (4B)

    00 00 0B D0: 가로 크기. 여기부터 인터레이스까지가 청크 데이터니까 13B가 맞다. (4B)

    00 00 0F C0: 세로 크기 (4B)

    08: bit depth (1B)

    06: color type (1B)

    00: 압축 여부 (1B)

    00: filter (1B)

    00: interlace (1B)

    A0 1B 1A 42: CRC. 순환 중복 검사로, 데이터의 오류를 확인 (4B)

     

     

    이를 바탕으로

    세로 크기를 00 00 10 C0으로 키우면, 

     

     

    이렇게 아래 부분에 숨겨져 있던 플래그를 확인할 수 있다.

     

     

    추가로, 가로를 조정하거나 세로를 줄이면 위처럼 아예 깨지고,

     

     

    세로를 너무 키우면 또 요렇게 된다. 자세한 원리는 잘 모르겠다 ..

     

     

    해결!

     

     

    참고

    https://whitesnake1004.tistory.com/249