재미있었던 포렌식 문제
이번 문제 역시도 아무런 설명 없이 파일만 주어진다.
문제에서 주어진 signal.wav 파일을 열어보면
뭔가 외계인이랑 통신하는것 같은 삐리비릭~~~ 하는 소리가 들린다.
예전에도 관련된 문제를 다룬적이 있는데 이럴경우 SSTV 와 관련될 확률이 높다.
(https://hackingstudypad.tistory.com/8)
SSTV는 저속 주사 텔레비전의 약자로 아마추어 무선 운영가가 주로 사용하는 영상 전송 방법이다.
구글 플레이스토어에 SSTV 라고 검색해보면 관련된 어플이 하나 나온다.
Robot36 - SSTV Image Decode 라는 어플을 설치해서 이용하면 된다.
어플을 실행시킨 상태로 휴대폰에 singnal.wav 파일의 소리를 들려주면
이렇게 그림파일이 하나 생성된다.
스테고사우루스 등에 password : HangulDay 라고 적혀있는 모습인데
왜 하필 스테고사우루스일까... 혹시 스테가노그래피와 관련된 힌트가 아닐까 라고 생각했다.
비밀번호를 언급했다는점에서 steghide 라는 도구를 사용해야겠다고 생각했다.
steghide 도구에서
--extract -sf <파일명> 이라고 옵션을 주게되면
파일 안에 숨어있는 데이터를 추출할 수 있다.
추출하기전 보이는것과 같이 passphrase 를 물어보는데
이 passphrase 가 바로 아까봤던 HangulDay 이다.
HangulDay 이라고 입력하고 엔터를 치면
위와 같이 steghide.zip 파일이 추출된다.
steghide.zip 파일의 압축을 풀어보면
이렇게 flag.7z, password.txt 두 개의 파일이 들어있는것을 볼 수 있다.
당연하게도 flag.7z 파일은 암호가 걸려있고,
그 암호에 대한 힌트가 password.txt 파일에 적혀있다.
7z 비밀번호
비밀번호 : 가,나,다,라,마,바,사,아,자,차,카,타,파,하 로 구성된 길이 1이상 5미만의 문자열
7z password
Password : A string of at least 1 or less than 5 characters long, consisting of Korean Characters 가(Ga), 나(Na), 다(Da), 라(Ra), 마(Ma), 바(Ba), 사(Sa), 아(A), 자(Ja), 차(Cha), 카(Ka), 타(Ta), 파(Pa), 하(Ha)
password.txt 파일의 내용은 위와 같다.
flag.7z 파일의 비밀번호는
가 ~ 하로 구성된 1~4 글자의 비밀번호 라는 것이다.
경우의 수가 그렇게 많지 않으니 Brute Force 를 해서 비밀번호를 맞춰본다.
hangul = ['가','나','다','라','마','바','아','자','차','카','타','파','하']
a = ''
b = ''
c = ''
d = ''
f = open('password_list.txt', 'w')
def one():
for i in range(len(hangul)):
a = hangul[i]
f.write(a +'\n')
print(a)
def two():
for i in range(len(hangul)):
a = hangul[i]
for j in range(len(hangul)):
b = hangul[j]
f.write(a+b +'\n')
print(a+b)
def three():
for i in range(len(hangul)):
a = hangul[i]
for j in range(len(hangul)):
b = hangul[j]
for k in range(len(hangul)):
c = hangul[k]
f.write(a+b+c +'\n')
print(a+b+c)
def four():
for i in range(len(hangul)):
a = hangul[i]
for j in range(len(hangul)):
b = hangul[j]
for k in range(len(hangul)):
c = hangul[k]
for l in range(len(hangul)):
d = hangul[l]
f.write(a+b+c+d +'\n')
print(a+b+c+d)
one()
two()
three()
four()
먼저 무차별 대입을 하기 위한 데이터를 먼저 생성해줬다.
파이썬을 이용해 위와 같이
가, 나, 다 ... 부터 하하하하 까지 순서대로 출력시켜 password_list.txt 파일로 저장해줬다.
저장된 파일은 이런 느낌이다.
모든 경우의 수를 다 표현하고 있다.
# -*- coding: utf-8 -*-
import os, sys
f = open('password_list.txt', 'r')
lines = f.read().splitlines()
for line in lines:
x = os.system('7z e ./flag.7z -p{0}'.format(line))
if x == 0:
print('password : ', line)
exit(1)
그다음 위와 같이 코드를 짰다.
리눅스 환경에서 운영체제 명령어인 7z e <파일명> -p<비밀번호> 를 이용해
password_list.txt 파일에서 한줄씩 가져온 비밀번호를 전부 대입하고
비밀번호가 맞았을 경우 해당 비밀번호를 출력해주는 명령어이다.
코드를 실행시키고 잠시 기다리면
비밀번호가 나온다. 비밀번호는 '아자가자' 이다.
찾아낸 비밀번호를 이용해 flag.7z 파일의 압축을 풀면
플래그를 획득할 수 있다.
'CTF > 포렌식' 카테고리의 다른 글
[Affinity CTF] wholeisbetter - 포렌식 / Base64 (72) | 2023.01.07 |
---|---|
[TeamH4C CTF] simple_forensic - 포렌식 / John the Ripper / Unicode / HxD (63) | 2022.12.15 |
[TeamH4C CTF] GNP - 포렌식 / HxD / Stegsolve (62) | 2022.12.09 |
[TeamH4C CTF] Find the flag - 포렌식 / HxD / Binwalk (67) | 2022.12.07 |
[b0lers CTF] Matryoshka(2/2) - 포렌식 / PIL / HxD (50) | 2022.12.03 |