워게임/CTFlearn

[CTFlearn] Brute Force is Fun! - 포렌식 / HxD / Python

SecurityMan 2023. 4. 23. 11:00

 

CTFlearn의 여든아홉번째 문제

 

계속해서 이어지는 Hard 난이도 문제이다..

 

이상하게 배점이 높은데 사실 그렇게 어렵진 않다.

 

반응형

 

 

문제에서 주어지는 것은 legotroopers.jpg 파일이다.

 

 

해당 파일을 HxD에서 열어

 

중간쯤으로 내려가봤다.

 

JPG 파일은 항상 FF D9 라는 값으로 끝난다.

파일에서 FF D9 값이 나오면, 그 뒤에는 아무런 값이 없어야 정상이다.

 

그런데 이 파일은 FF D9 다음에

 

50 4B 03 04 로 시작하는 데이터가 오고있는것을 볼 수 있다.

 

이렇게 50 4B 03 04 로 시작하는 파일은 ZIP 확장자를 가지는 파일이다.

 

이런것을 파일 시그니처 라고 한다.

 

 

50 4B 03 04 부터 파일의 끝까지 추출해서

 

test.zip 으로 저장했다.

 

 

압축을 풀려고 봤더니 비밀번호가 걸려있었다.

 

John the Ripper 로 해보려 했는데

 

잘안돼서 뭔가 다른 힌트를 찾아보기로 했다.

 

 

해당 압축파일 내에는

 

flag.zip 외에도 암호가 걸리지 않은 folders 폴더도 같이 압축되어 있다.

 

 

folders 폴더 안에는 이렇게 미로처럼

 

많은 파일이 들어있는데

 

여기에 힌트가 숨어있을것 같았다.

 

 

binwalk 명령어를 이용해 확인해봤다.

 

 

확인해보니

 

folders/73/47/ 경로와 folders/73/43/ 경로에

 

p 라는 파일이 들어있는걸 확인했다.

 

 

p 파일엔 이런 내용이 적혀있다.

 

비밀번호 형식은 ctflag***** 이고 * 에는 숫자가 들어간다고 한다.

 

그러니까 비밀번호는 ctflag00000 ~ ctflag99999 사이의 값인 것이다.

 

import zipfile
import hashlib
import base64

zip_file = zipfile.ZipFile('test.zip')

base = 'ctflag'

for i in range(100000):
	number = str(i).zfill(5)
	password = base + number
	
	try:
	    zip_file.extractall(pwd=bytes(password,'utf-8')) 
	    print("true : ", password)
	except:
	    pass

 

파이썬으로 압축푸는 코드를 이렇게 짤 수있다.

 

00000 ~ 99999 숫자를 생성해서

 

ctflag 뒤에 붙혀

 

zip 파일 비밀번호로 집어넣고 압축을 푸는것이다.

 

 

코드를 실행시키면 이렇게 비밀번호가 나온다.

 

 

압축을 풀면 flag.zip 파일이 나오고

 

 

flag.zip 파일의 압축을 풀면

 

flag.txt 파일이 나온다.

 

안에는 base64 인코딩된 값이 들어있는데

 

 

CyberChef(https://gchq.github.io/CyberChef)에서 base64 디코딩을 해주면 플래그가 나온다.

반응형