SQL注入-报错注入

靶场环境:sqli-labs-master

报错注入

没有回显,但是会输出sql语句执行错误信息。

没有sql语句的错误页面不会提示其他信息

如图我输入了id=1'导致了单引号没有闭合,发生了报错

报错注入的分类

MySQL 的报错注入主要是利用 MySQL 的一些逻辑漏洞,根据漏洞 原因的不同,可以将MySQL 报错注入分为以下几类:
BigInt 等数据类型溢出
xpath 语法错误
count()+rand()+group_by() 导致主键重复 空间数据类型函数错误

xpath语法错误

mysql5.1.5 开始提供了两个 XML 查询和修改的函数:
1. updatexml() :适用于 5.5.5-5.5.49 版本
2. extractvalue() :适用于 5.1.5+ 版本
可以通过 xml 函数报错,来显示注入命令执行结果。
updatexml 函数格式: updatexml((XML_document, XPath_string,new_value)
XML_document xml 文档的名称
XPath_string xpath 格式的字符串
new_value :替换查找到的符合条件的数据
extractvalue 函数格式: extractvalue((XML_document, XPath_string),除了没有第三个参数( new_value ),其它与updataxml()函数完全一样。所以后面只讲 updatexml() 函数的使用。
简而言之,updatexml函数功能就是查找一个字符串,并进行替换。而我们在XPath_string处也就是第二个参数那里传入不符合xpath格式的特殊字符,并加上一些查询语句,mysql就会把错误和查询语句的结果报错显示出来。这就是xpath报错注入的原理。
注意事项:
必须是在 XPath_string 处传特殊字符, mysql 才会报错,同时我们还需要注入命令,没这么多位置,所以要用到concat 函数。xpath只会对特殊字符进行报错,这里我们可以用 16 进制的 0x7e
~ )来进行利用。xpath只会报错 32 个字符,对于输出结果大于 32 个字符的命令,
要用 substr 函数截取后分段输出。
函数说明:
concat(s1,s2...sn) :将字符串 s1,s2...sn 合并为一个字符串。 substr(s, start, length) :从字符串 s start 位置截取长度为length 的子字符串, start 1 开始。

注入过程

1.判断注入类型

这里我输入id=1'引起了单引号不匹配,所以给我提示了报错信息

确认了两点一个是报错注入,一个是单引号闭合(字符型)

我将数据库原本存在的'注释掉发现正常显示了

2.获取数据库名

使用updatxml()函数
可以看到报错信息内正是我们输入的0x7e(~)包裹着数据库名   security

3.获取表名

这里的语句就和普通注入语句没什么区别了,在concat()函数中输入对应查询语句即可

表名分别是emails,referers,uagents,users

4.获取字段

获取users表的字段

5.获取字段记录

获取username字段的记录

虽然成功查询到记录但是我我们可以观察到,后面的~并没有显示出来,像是后面还有一段内容没有显示,这是由于xpath只会报错32个字符,所以可以使用substr()函数进行字符串截取

可以看到我们先截取30个字符显示如下结果,后面还有数据。那么我们就可以从31位开始截取

如果还没显示完,我们可以继续以此方式截取。

后续内容相信大家已经能够举一反三了。如果对查询语句不熟悉可以查看我前几篇文章

联合查询:http://t.csdnimg.cn/qIWwx

布尔盲注:http://t.csdnimg.cn/zD3GH

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捞虾米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值