Square_CTF_CHALLENGE(1)
Name
reading-between-the-lines - Find the secret in the archive
Points
100 points
Type
Forensics
Description
Evil Robot Corp accidently made their S3 bucket public and we were able to grab this backup archive before we were kicked out. We think there might be a secret in here, but we can't find it. Can you help us?
문제 zip 파일을 다운받아서 010 editor로 열어주면 위 그림과 같이 record가 4개 dirEntry가 3개 존재하는데 zip 파일에서는 해당 갯수가 같아야하므로 8월 12일에 생성된 마지막 압축파일이 누락된 것을 확인할 수 있다.
만약 zip 파일안에 2개의 압축파일이 존재하면 아래와 같은 형태를 띄고 있다.
=====================
| Local file header | <= 첫번째 압축파일
| File data |
| Data descriptor |
| Local file header | <= 두번째 압축파일
| File data |
| Data descriptor |
| Central directory file header | <= 첫번째 압축파일
| Central directory file header | <= 두번째 압축파일
| End of central directory record |
=====================
Central Directory file header 구조
0 1 2 3 4 5 6 7 8 9 a b c d e f
0x00 | File signature | Version | Version | Flag | Compression | Modification | Modification|
| | | needed | | | time | date |
============================================================================
0x10 | CRC - 32 | Comprssed size | Uncompressed size | File name | Extra field |
| | | | length | length |
============================================================================
0x20 |File comment|Disk number| Internal | External | Offset of | |
| length | file start | attribute | attribute | local file header | |
===================================================================
0x30 | File name |
============================================================================
| Extra field |
============================================================================
| File comment | ============================================================================
010 editor를 다시보면 record 0, 1, 2, 3은 아래 좌측 구조를 의미하고 dirEntry 0, 1, 2는 아래 우측 구조를 의미합니다.
===================== =====================
| Local file header | | Central directory file header |
| File data | =====================
| Data descriptor |
=====================
위와 같이 dirEntry[2]를 바로 아래에 복사를 하고 템플릿에서 Arcvive의 ZIP anv 를 실행하면 위와 같이 dirEnrey가 추가됩니다.
아래 창에서 dirEntry[3]를 펼치면 구성 값들을 자세하게 알아볼 수 있습니다. 앞으로 하나씩 수정해 나가도록 하겠습니다.
1. 파일 시그니처(매직 넘버) -> 수정 불필요
2. 버전 -> 유닉스 2.1 -> 수정 불필요
3. 요구되는 최소 버전 -> 2.0 -> 수정 불필요
4. 플래그 -> DescripterUsedMAsk -> 의미 : 앞에 Data descriptor 영역을(CRC, 파일크기) 사용한다는 의미 -> Local file header에 있는 플래그와 같아야하므로 수정 불가능
5. 압축방식 -> COMP_DEFLATE -> 보편적인 압축방식 -> 수정 불필요 로컬에도 COMP_DEFLATE로 되어있음
6. 마지막 수정 시간 -> 로컬 파일 헤더에서 복사 후 붙여넣기로 수정
7. 수정된 날짜 -> 위와 같이 수정해야하지만 이미 같은 날짜이미로 수정 불필요
8. CRC-32 -> 원래는 로컬 파일 헤더(Local file header)에 있어야 하지만 위에서 설정한 플래그 특성으로 Data descriptor에서 값을 가져온다. 위치는 위 그림과 같이 record[3]의 ZIPDATADESCR dataDesxr에 위치한다.
9. 압축시 사이즈, 압축 해제시 사이즈 -> 위와 같이 로컬 파일 헤더에 있어야하지만 Data descriptor에 같이 위치하므로 8바이트를 한꺼번에 가져와서 수정
10. 파일 이름 길이 -> 로컬 파일 헤더에 존재 -> 같으므로 수정 불필요
11. Extra 필드 길이 -> 로컬 파일 헤더에 존재하지만 복사하면 안된다. 그 이유로는 로컬이 아닌 현재 수정하고 있는 Central directory file header 내에 Extra field 길이를 입력해야한다. 다른 dirEntry를 살펴보면 모두 12이므로 수정 불필요
12. 파일 코멘트 길이 -> 파일 코멘트는 없으므로 수정 불필요
13. 디스크 넘버 파일 시작 -> 플로피 디스크 사용할 때 쓰던 값 -> 수정 불필요
14. 내부 속성, 외부 속성 -> 파일 유형, 암호화 여부 같은 다양한 파일의 속성 저장
15. 로컬파일헤더의 오프셋 -> record[3]의 시작주소를 리틀엔티안 방식으로 입력
16. 파일 이름 -> 로컬 파일 헤더에서 가져와서 수정
17. Extra field -> ZIP 종류같은 추가 데이터 저장하는 곳 -> 수정 불필요
지금까지 Central directory file header 모든 필드를 살펴봤습니다. 마지막으로 End of central directory record 필드만 수정하면 끝입니다. 해당 영역에서는 한 가지 필드만 수정하면 됩니다.
위 파란 창이 있는 부분에 3을 4로 수정해야합니다. 의미는 디렉토리에 담겨있는 엔트리 수를 나타내고 우리가 디렉토리에 압축해제할 파일은 4개이기 때문에 4로 수정합니다.
수정된 zip파일을 열면 파일이 4개가 들어있습니다.
8월 12일 파일을 열면 플래그를 찾을 수 있습니다.
'Forensic' 카테고리의 다른 글
[HackCTF] Secret Document (0) | 2021.09.12 |
---|---|
[HackCTF] So easy? (0) | 2021.09.12 |
[Square CTF] Needle in the haystack (0) | 2021.09.03 |
[Square CTF] Sniffed Off the Wire (0) | 2021.08.15 |
[Square CTF] The Robot's Grandmother (0) | 2021.08.12 |
댓글