워게임/CTFlearn

[CTFlearn] Corrupted File - 포렌식 / HxD / Base64

SecurityMan 2022. 12. 30. 11:00

 

CTFlearn의 쉰번째 문제

 

이번엔 Hard 난이도의 포렌식 문제이다.

 

하지만 역시나 그렇게 어렵진 않다.

 

반응형

 

문제 설명에서 힌트를 주고 있다.

 

파일 헤더에 문제가 있어 파일을 열지 못하는것 같다고 한다.

 

 

문제에서 주어지는 파일은 unopenable.gif 파일이다.

 

확장자가 .gif 인걸 보니 원래는 GIF 파일이었나 보다.

 

 

파일을 열어보면

 

문제에서 언급한것 처럼 파일이 깨진듯

 

이 파일 형식은 지원되지 않는 것 같습니다. 라고 나온다.

 

 

주어진 unopenable.gif 파일을

 

HxD 라는 도구를 실행시켜, 드래그 앤 드랍한다.

(HxD 다운링크 : https://mh-nexus.de/en/downloads.php?product=HxD20)

 

그러면 위처럼 16진수로 되어있는 값들이 보인다.

 

이 16진수 값들은 gif 파일의 raw data 이다.

 

파일 맨 앞이 39 61 F4 01 로 시작하는것을 볼 수 있다.

 

 

구글에 GIF file signature 라고 검색해보면

 

위키피디아 문서에서 GIF 파일의 시그니처를 확인할 수 있는데

 

GIF파일은 47 49 46 38 37 61 또는 47 49 46 38 39 61 로 시작한다.

 

파일을 HxD로 열었을때, 맨 앞에 있는 값은 저 두개 중 하나여야 한다.

 

 

HxD에서 unopenable.gif 파일의 맨 앞을 47 49 46 38 39 61 로 채워준 뒤

 

저장해준다.

 

 

저장한 뒤 폴더로 가보면 

 

파일이 복구된 듯 썸네일이 보이는것을 볼 수 있다.

 

 

gif 파일을 눌러보면 이런 화면이 순식간에 지나간다.

 

프레임이 너무 빠르게 지나가서 맨 앞에 있는 the flag is 말고는 육안으로 확인할 수가 없다.

 

 

ezgif(https://ezgif.com/split/) 라는 사이트에서 gif 파일을 프레임 단위로 분리할 수 있다.

 

파일을 업로드하고 Split to frames! 버튼을 눌러주면 된다.

 

 

그럼 이렇게 5개의 프레임으로 분리된다.

 

 

첫번째 프레임은 아까 봤던 the flag is 이다.

 

 

두번째 부터는 알 수 없는 문자열들이 나오기 시작한다.

 

 

세번째 프레임도 마찬가지고

 

 

네번째 프레임도 마찬가지이다.

 

데이터의 맨 끝을 보면 == 로 끝나는 것을 볼 수 있는데

= 은 Base64에서 사용하는 패딩으로

저렇게 알수없는 알파벳+숫자들이 있는 데이터의 맨 끝이 = 또는 == 이라면

Base64 로 인코딩 되었다고 생각하면 거의 맞다.

 

 

마지막 프레임은 DECODE IT 이다.

 

2,3,4 번째 프레임에 있던 데이터를 모아서 Base64 디코딩 해주면 되는듯 하다.

 

 

CyberChef(https://gchq.github.io/CyberChef) 에서 Base64 디코딩을 해주면

 

플래그를 찾을 수 있다.

반응형