문제를 다운로드 해주니 flag.png파일이 하나 있음

가짜 flag를 피해 진짜 flag를 찾으라고 하니까, 이 사진은 필히 가짜 flag
문제 제목이 steg-pack이니까, 스테가노그래피로 사진이 쌓여있다는 것일까? 싶어서
Stegsolve를 사용해봄

그치만 딱히 다른 것이 숨겨져 있는 건 아닌 것 같음
모를때는 hxd로 파일을 확인해보겠음

png파일 시그니처가 잘 보이고, png 푸터를 확인해보기 위해서 IEND를 검색해줌

IEND이후에 PK(압축파일), pass: 99999(비밀번호인가?) 뭐가 또 있는 것 같아서 확인해주기로 함
먼저 png 푸터 시그니처가 이렇게 8byte로 이루어져 있음
49 45 4E 44 AE 42 60 82(8 Byte)
pass 전 쉼표까지가 png파일이기 때문에 나머지 뒷 부분은 따로 잘라줌
해당 부분을 삭제한 후 png파일을 열어봤는데, 처음처럼 그대로 fake_flag가 나옴
이제 뒷부분을 확인해주면 될 것 같음

뭘까....

PK가 눈에 밟혀서 헤더 시그니처를 찾아주니까 9개나 나옴
근데 푸터 시그니처는 맨 마지막에 하나밖에 없음
(zip파일이니까 이럴수도 있다고 함)
범위를 잘못 지정해서 잘랐나 싶어서 다시 해봄
-> zip파일 시작 시그니처: 50 4B 03 04(4608 시작)
-> zip파일 푸터 시그니처: 마지막까지

오 zip파일이 잘 열렸음



알아야 할 것!
ZIP 파일의 진짜 끝은 어디?
zip파일 푸터 시그니처: 50 4B 05 06
이것은 정확히 말하면 EOCD(End of Central Directory Record)의 시작을 알리는 표식이라고 한다.
즉, zip파일 구조상 EOCD 섹션 안에 주석의 길이와 내용이 들어가게 된다.
만약 딱 시그니처까지만 복사하고 그 뒤의 가변 데이터를 잘라버리면, 압축 프로그램은 "주석이 있다고 했는데 왜 데이터가 없지?"라며 파일이 손상되었다고 판단해 열어주지 않는 것입니다. zip파일을 열어주지 않는 것임!!
분석 시 주의할 점>
카빙(Carving)이나 파일 복구 작업을 할 때, ZIP 파일은 단순히 푸터 시그니처를 찾는 것으로 끝내면 안된다!
- 50 4B 05 06을 찾기
- 해당 지점으로부터 20~22바이트 뒤에 있는 'Comment Length' 값을 확인
- 그 길이만큼 데이터를 더 포함시켜야 완벽한 ZIP 파일이 됨
그래서 실무에서는 이렇게 다 계산하기 어렵기 때문에 그냥 시그니처 이후 null data나 아예 끝나는 지점까지 넉넉하게 추출하는 방식을 쓰곤 한다.
'SWUFORCE > 워게임' 카테고리의 다른 글
| XSS 공격과 우회방법 (0) | 2026.05.19 |
|---|---|
| 워게임 - xss-1 (0) | 2026.05.15 |
| Python - Flask 프레임워크/ @app.route() (1) | 2026.05.12 |
| 드림핵 워게임 - session-basic (0) | 2026.05.11 |
| Window Search + edb파일 (0) | 2026.05.05 |