报错sql注入

场景
    一个存在sql注入的页面,但是页面不显示从数据库查询的信息,
    此时可以通过错误的sql语句查看页面是否有报错信息,如果存在报错信息则可以使用报错信息进行数据获取

分析

0x0  查看表信息

0x1  分组查看

这里可以看出分组时,如果有多个相同字段会选用第一个显示

0x2  统计表信息

统计信息正常

0x3  添加concat(0)字段

0x4 对concat(0)分组

SELECT *,CONCAT(0) FROM test GROUP BY CONCAT(0)

此时猜测先执行SELECT *,CONCAT(0) FROM tes 后进行GROUP BY CONCAT(0)

通过0x1得知分组是根据CONCAT(0)这一列进行分组

0x5  修改concat内容,进行进一步验证

此时分组后也是显示全部信息,因为z列没有重复

此时验证了我的猜测,分组根据concat()列

0x8 count()报错

此时进行count则进行报错

原理猜测:

以上可以看作查询过程三种状态

报错的原因在于填充表向分组表过度的时候

注意:查询的时候如果使用rand()函数,该函数会被调用多次,这是出现问题的关键

根据concat列可以看出floor(rand(0)*2)该函数是存在规律的

0110110

1.第一条数据 1 aa 0分组

分组时floor(rand(0)*2)调用一次得出0,此时向分组表(虚表)插入0作为主键,但是插入时

floor(rand(0)*2)会被在调用一次,因此插入的数值为1,预期的值应该插入0,但实际插入了1,如下图

2.第二条数据2 bb 1分组

分组时floor(rand(0)*2)被调用,此时是第三次被调用得出的数值为1,分组表中存在1不进行处理

 3.第三条数据 3 cc 1

分组时floor(rand(0)*2)再次被调用,此时是第四次调用数值为0,分组表中不存在0准备插入数值0,插入时第五次调用floor(rand(0)*2),得到了数值1,因为分组表中存在了1,此时插入则进行报错,

报错的内容为插入的内容,如果在concat函数内加上我们需要的信息,这样报错时则会有敏感信息泄露

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值