상세 컨텐츠

본문 제목

[HackCTF-Forensic#4] Secret Document - 150 points

Forensics/HackCTF

by bing_su 2022. 1. 14. 23:27

본문

반응형
SMALL

HackCTF Forensic 4번째 문제는 "Secret Document"다.

작년 학기 초에 풀었던 문제 같은데, 아마 그때 당시 상당히 바빠서 미뤄뒀던 것도 있어서 라업을 작성하지 않았나 보다. 덕분에 해당 게시글을 쓰면서 문제를 다시 풀어봤다. (올해 유독 게으르면서 부지런했다.(?))

Flag.zip 첨부 파일의 압축을 해제하려고 시도.

첨부파일로는 Flag.zip 압축 파일이 있다. 하지만 암호가 걸려 있는 것 같다. 암호를 어떻게 알아낼까 싶어서 일단 HxD로 압축파일을 살펴보기로 했다. 그리고 flag.txt 파일에만 암호화가 되어 있고, 나머지 hint1.txt, hint2.txt 파일은 암호화가 되어 있지 않아서 hint 텍스트 파일 두 개를 먼저 봤다.

hint1.txt 내용

hint1.txt 파일 내용이다. Brute Force 문제가 아니라고 한다. 실제로 반디집 프로페셔널에는 압축 파일 암호 복구 기능이 있는데 이를 활용해보면 30분이 넘도록 암호 복구를 하지 못하고 계속 Brute Force를 한다.

hint2.txt 내용

hint2.txt 파일 내용이다. password가 있다고 생각하냐고 물어보고 있다. 이를 토대로 살펴보면, zip 파일 구조에서 파일 암호화에 대한 내용이 있을 것 같다는 생각이 들었다. 따라서 HxD를 사용해서 해당 문제의 첨부파일인 Flag.zip 파일을 살펴보기로 했다. (zip 파일 구조에 대해 분석하는 문제로 이 문제도 있었다. 같이 참고하면 좋을 듯!)

출처: https://m.blog.naver.com/PostView.naver?blogId=koromoon&logNo=220612641115&referrerCode=0&searchKeyword=zip

zip 파일의 일반적인 구조는 3개의 파일 구조(Local File Header, Central Directory, End of central directory record)로 되어 있다. 이때, zip 파일 내부의 파일 하나 당 하나의 Local File Header, Central Directory를 반드시 가져야 한다.

주어진 Flag.zip 파일 내부 모습

해당 문제에서 제공된 압축 파일 내부의 파일은 3개다. 따라서 3개의 Local File Header, 3개의 Central Directory, 1개의 End of central directory record를 거쳐야 정상적인 파일 구조라고 할 수 있다. 

Local File Header Signature 50 4B 03 04 (4bytes)
Central Directory Signature 50 4B 01 02 (4bytes)
End of central directory record Signature 50 4B 05 06 (4bytes)

위의 signature 정보를 토대로 HxD의 검색 기능을 활용해 파일 구조를 보다 쉽게 확인할 수 있다.

출처: https://m.blog.naver.com/PostView.naver?blogId=koromoon&logNo=220612641115&referrerCode=0&searchKeyword=zip

압축 파일 구조에서 파일 암호화와 관련된 정보가 있을까 싶어서 살펴보던 중, Central Directory에서 파일의 암호화 정보를 저장하는 비트를 가지는 Flags 부분이 있다는 것을 알게 되었다.

Flags 부분은 2 bytes로 구성되며, 각 비트 별 식별자는 아래 리스트와 같다.

  • Bit 00    : 암호화된 파일
  • Bit 01    : 압축 옵션
  • Bit 02    : 압축 옵션
  • Bit 03    : 데이터 기술자(data descriptor)
  • Bit 04    : 강화된 디플레이션(deflation)
  • Bit 05    : 압축된 패치 데이터
  • Bit 06    : 강력한 암호화
  • Bit 07-10  : 사용하지 않음
  • Bit 11    : 언어 인코딩
  • Bit 12    : 예약
  • Bit 13    : 헤더 값을 마스크
  • Bit 14-15  : 예약

앞서 Flag.zip 압축 파일에서 내부 파일 중 flag.txt 파일에만 암호화가 걸려 있는 것을 확인할 수 있었다. 따라서 flag.txt 파일에 해당하는 Central Directory 부분을 살펴보면 될 것 같다.

flag.txt의 Central Directory 부분

- Signature: 50 4B 01 12

- Version: 14 00

- Vers. needed: 14 00

- Flags: 09 08

대충 필요한 부분까지 분석하면 Flags field 값은 09 08임을 확인할 수 있다.

리틀 엔디안 방식으로 읽으면 '08 09'가 되고, 이를 비트로 풀어보면 아래와 같다.

flags field 값을 비트로 나타낸 것

Bit 00 부분이 1로 설정되어 있으면 암호화된 zip 파일이라는 것이다.

따라서 이 부분 값을 0으로 바꿔주면 00001000 00001000이 되고, 08 08이 된다.

Flags field 값을 08 08로 변경

Flags field 값을 08 08로 변경하고 압축을 해제하면 암호화 기법을 무력화시켰기 때문에 "암호를 입력하세요." 문구가 뜨는 창을 우회할 수 있다. 이제 flag.txt 파일에 있는 플래그를 인증하면 문제가 풀린다.

반응형
LIST

관련글 더보기

댓글 영역