SWUFORCE/워게임

워게임 - Steg-Pack

hmyang444 2026. 5. 12. 20:01
문제 설명: 가짜 flag를 피해서 진짜 flag를 찾아라!@

 

문제를 다운로드 해주니 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 파일은 단순히 푸터 시그니처를 찾는 것으로 끝내면 안된다!

  1. 50 4B 05 06을 찾기
  2. 해당 지점으로부터 20~22바이트 뒤에 있는 'Comment Length' 값을 확인 
  3. 그 길이만큼 데이터를 더 포함시켜야 완벽한 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