보안을 그리다, 훈이

[Forensics] 써니나타스(SuNiNaTaS) 28번 문제 풀이 본문

Security/Wargame

[Forensics] 써니나타스(SuNiNaTaS) 28번 문제 풀이

HooNeee 2021. 12. 27. 20:39

 

써니나타스(SuNiNaTaS) Forensics 분야 28번 문제를 풀어보았습니다.

 

 

Game 28

않을까 걱정하다가 시름시름 앓고 있다는 전설이 있다.

suninatas.com

 

[SuNiNaTaS] Challenge 28

 

매우 쉬운 문제라고 어필하고 있으며, '암호가 있기나 한건가!'라는 의미심장한 문구가 있는 것을 보아 Zip File FormatFlags 필드 관련 문제라는 것을 유추할 수 있네요.

 


 

이전에 풀었던 HackCTF의 Secret Document 문제와 유사합니다.

 

[Forensics] HackCTF Secret Document(150p) Write Up

 

[Forensics] HackCTF Secret Document(150p) Write Up

HackCTF Forensics 분야 Secret Document(150p) 문제 풀이입니다. 'Flag.zip' 파일을 다운로드하고 압축을 해제해봅시다. 'flag.txt', 'hint1.txt', 'hint2.txt' 총 3개의 텍스트 파일이 추출되는군요. 'flag.t..

hooneee.tistory.com

 


 

먼저, 주어진 첨부파일 'So_Simple.zip'을 다운로드해 봅니다.

 

So_Simple.zip

 

역시나 잠겨있네요.

 

binwalk So_Simple.zip

 

압축파일 내부를 보니 'Am_I_key.zip', 'Am_I_key2.txt', 'Am_I_key3.txt' 파일이 존재하며 모두 잠겨있다고 나오네요.

 

Hex Editor로 내부 구조를 살펴봅시다.

 

Hex - So_Simple.zip

 

노란색으로 표시된 4byte는 각 파일의 헤더 시그니처이며, 다음 2byte는 Version, 그 다음 빨간색으로 표시된 2byte가 바로 Local File Header의 Flags 필드입니다.

 


 

[Forensics] ZIP File Format

 

[Forensics] ZIP File Format

ZIP File Format ZIP File Format에 대해 알아봅시다. 압축 파일은 일반적으로 크게 Local File Header, Central Directory, End of central directory record 총 3개의 파일 구조로 이루어져 있습니다. Lo..

hooneee.tistory.com

 

자세한 설명은 위 링크를 참고해 주세요.

 


 

세 파일 모두 Bit Flags가 '09 08'이므로, 리틀엔디안 방식을 따라 '08 09'로 계산해봅시다.

 

Hex 0 8 0 9
0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1
Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00

 

Bit 00, Bit 03, Bit 11에 값이 존재하는 것을 확인할 수 있습니다.

 

필드
크기
설명
Flags
2 바이트
바이트 식별자
 
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 : 예약

 

여기서 Bit 00은 암호화된 파일을 의미하므로 값을 0으로 설정해주면, '08 08'이 되겠네요.

 

따라서, 모든 파일의 Local File Header - Flags 필드를 '08 08'로 수정하고 저장하면 정상적으로 압축이 풀립니다!

 

'Am_I_key.zip' 파일의 압축을 해제하면 'There_is_key.txt'의 내용을 볼 수 있습니다.

 

There_is_key.txt

 

주어진 값을 Base64로 Decode 해봅시다.

 

Get the Flag!

 

Solve!

 

Comments