ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3팀_김기연 write-ups (HackCTF_Secret Document)
    2021/Write-Ups 2021. 11. 23. 00:14

    Flag.zip 을 다운받아서 압축을 풀려고 했는데

     

     

     

    암호가 걸려 있다.

     

     

     

    flag.txt 뒤에 * 표시는 암호가 걸려있음을 나타냄

     

    brute-force attack

    무차별 대입 공격. 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 것을 의미함.

     

    암호가 존재하지 않는 건가 ..?

     

    일단, HxD로 Flag.zip 을 열어보자.

     

     

     

    문제를 다 풀고 보니, 다른 Flags 필드는 모두 00 00 이었다는 것을 알았다.

    각 시그니처마다 다른 의미가 있을 듯하다.

    zip 파일의 구조를 살펴보자.

     

     

     

    zip 파일의 일반적인 구조 (크게 3개의 파일 구조로 되어 있음)

     

    1. Local File Header

    - 압축 파일에 대한 기본 정보들이 포함됨 ex) 압축 전후 파일 크기, 파일 수정 시간 등

     

    필드

    - Signature (4B) : 50 4B 03 04 (리틀 엔디안)

    - Version (2B)

    - Flags (2B) : 바이트 식별자

    ...

     

    2. Central Directory

    - Local File Header 의 확장된 데이터 뷰를 제공함

    - Local File Header 에 포함된 데이터에 더하여 파일 속성, 구조에 대한 로컬 기준을 가짐

     

    필드

    - Signature (4B) : 50 4B 01 02 (리틀 엔디안)

    - Version (2B)

    - Vers.needed (2B)

    - Flags (2B) :  바이트 식별자

    ...

     

    3. End of central directory record

    - 모든 아카이브의 싱글 템플릿으로 제공하며 아카이브의 종료를 작성함

    - Central Directory 블록의 시작과 로컬 참조의 시작, 아카이브 레코드들의 숫자가 중요한 데이터임.

     

    필드

    - Signature (4B) :50 4B 05 06 (리틀 엔디안)

    - Disk Number (2B)

    ...

     

     

     

    위 내용을 바탕으로, Flags 필드에 파일의 암호화 여부를 체크해주는 부분이 있음을 알게 되었다.

    우선, flag.txt 의 Central Directory 부분을 보자.

     

     

     

    이 부분에서 Flags 필드를 보면,

    09 08 로 설정되어 있는 것을 알 수 있다.

     

    이를 리틀 엔디안 형식으로 보면 08 09 가 되고, 08 09 를 비트로 나타내면 0000 1000 0000 1001 과 같다.

     

    아까 Flags 필드의 Bit 00 은 암호화된 파일을 나타낸다고 했는데, 0000 1000 0000 1001 에서 Bit 00 에 해당하는 부분이 1로 활성화 되어 있기 때문에, flag.txt 파일이 암호화 된 것이다.

     

    따라서, Flags 필드의 값을 0으로 바꿔주면 암호화 문제를 해결할 수 있을 것 같다.

     

     

     

    해결!

     

     

     

    참고

    https://m.blog.naver.com/PostView.nhn?blogId=koromoon&logNo=220612641115&proxyReferer=https:%2F%2Fwww.google.com%2F 

    https://omoknooni.tistory.com/7