[ISITDTU 2018] Drill Write-up

2018. 7. 30. 16:11


이런 파일이 주어진다. 헥스값을 텍스트로 그대로 옮긴것같다. 다시 헥스값으로해서 넣어주자


1
2
3
4
5
6
7
8
9
= open("drill","r")
drill = f.read()
f.close()
 
print(drill)
 
= open("drill_hex","w")
f.write(drill.decode("hex"))
f.close()
cs


이렇게하면 된다. 조금 더 간단하게 하는 방법으로 $ xxd -r -p drill > drill_hex 를 커맨드로 실행해도 된다.



file로 보면 뭔가 나올 줄 알았는데... 그냥 data라고 합니다.

binwalk로 탐색해보니, zip파일의 끝이 발견되었습니다.



살펴보니 Zip파일의 헤더부분이 빠져있어, 추가해주었습니다. ("\x50\x4B\x03\x04")



압축을 풀려하니 패스워드를 대라길래; John The Ripper을 이용해서 풀어줫습니다.

첫번째 암호는 "brandon1"입니다.


그랬더니 499.zip이 나왔습니다...

예상으로는 499~0까지 zip이 있을거같아, 파이썬으로 자동화시켜 John The Ripper로 풀었더니



237.zip부터는 오류가 뜨면서 풀리지않습니다.

그래서 지금까지 나온 패스워드를 구글에 검색하여 Passwordlist를 얻을 수 잇었고, 이를 이용해서 풀었습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os
import string
from subprocess import Popen, PIPE
 
path = "/home/sherlock/workstation/crytoTool/JohnTheRipper/run/"
 
password_list=""
def john(zip):
    global password_list
    cmd = "/home/sherlock/workstation/crytoTool/JohnTheRipper/run/zip2john "
    cmd += zip
    cmd += " > zip.hash"
    os.system(cmd)
    
    cmd = "/home/sherlock/workstation/crytoTool/JohnTheRipper/run/john -w:passwordlist_ph4.txt zip.hash"
    
    popen = Popen(cmd, shell=True, stdout=PIPE)
    output, error = popen.communicate()
    
    password = (output.split("\n")[1]).split("(")[0].strip()
    password_list += ", "+password
    cmd = "rm /home/sherlock/workstation/crytoTool/JohnTheRipper/run/john.pot"
    os.system(cmd)
    return password
    
cmd = "unzip -P "
password = "brandon1"
 
for i in range(237,0,-1):
    zip = str(i)+".zip"
    password = john(zip)
    os.system(cmd+password+" "+zip)
    #exit(1)
print(password_list)
 
cs


찾아보니 rockyou wordlist라고 패스워드 리스트가 따로 있더군여...

파일용량이 무려 130MB나 합니다.... 다운


아무튼 그렇게해서 마지막 0.zip의 압축을 풀면 아래와 같은 것들을 얻을 수 잇습니다.



key.png는 스테가노그래피로 key가 숨겨져있을 거 같습니다.




확실히! Stegsolve 를 이용해서 Red비트만 추출해보니 모스부호와 비슷한 것이 나왔습니다.


모스부호를 해독하면 "keyisonlyforluckyhunters"가 나오고, 이를 통해 zip압축을 풀고 flag를 얻을 수 잇습니다.



참고:

zsteg를 사용하면 더 간단합니다.


이건 다른 예시~




+ Recent posts