MySQL—报错注入

admin 2022年5月20日02:59:50评论70 views字数 1739阅读5分47秒阅读模式

*本文来自于暗盾网络安全社区:https://bbs.andunsec.com*
报错信息必须在页面中回显。
原理:通过mysql一些函数 让其报错,产生超出预期的结果,并且报错信息中包含重要信息
用sqli第5关举例(以下是sqli第五关的源码)
MySQL—报错注入

报错注入用于有报错回显但是没有一个合适的数据返回点的时候。
MySQL—报错注入


学习两种报错注入的方法
基于xpath路径 报错(mysql5.1.5+)

基于group by 和 floor函数报错


基于xpath路径 报错
要先了解两个函数:
extractvalue(使用xpath表示法从xml字符串中提取值)
这是一个对xml文件进行查询的函数,更准确地说,它是会从目标xml文件中返回所包含查询值的字符串
updatexml(改变文档中符合xml片段的值)

extractvalue有两个参数
extractvalue(XML_document,XPath_string)
看得出来第二个参数要求的是Xpath格式的字符串,语法正确是会按照路径
/该xml文件/要查询的字符串 进行查询。如果我们输入的Xpath_string不对就会报错,而如果页面回显sql报错信息就可以得到我们想要的信息了。
XML_document 可以是anything。
正常使用:
MySQL—报错注入
报错使用:
首先要进入一个数据库,等等才能爆出我们在哪个数据库,先选择security数据库
use security;
select extractvalue(1,concat(0x7e,database()));
这里的0x7e是ASCII码的 符号~ (找不到这个路径就会报错)
MySQL—报错注入

既然以及回显出数据库名了,就可以利用联合注入学习过的流程去拿想要获取的数据了。
MySQL—报错注入
下面的流程不熟悉的可以重新学习联合注入里面的内容。

updatexml函数(这是个修改xml文件的函数)
它有三个参数 这个函数和extractvalue基本相同

updatexml('XML_document','Xpath_string','New_value')

或者:
updatexml('目标xml文件名','在xml中查询的字符串','替换后的值')
MySQL—报错注入
下面流程都是一样的 不熟悉的可以重新学习联合注入里面的内容。

基于group by 和 floor函数报错
原理 :在虚拟表里面插入重复的主键 导致报错
具体原理:
count(*)函数是用来计数的。
floor()函数 是用来取整(取最小整数)
rand()函数 用来生成伪随机数(0-1之间的一个小数)
如果我固定rand()的种子为14 那么就会生成一个伪随机数
floor和(rand(任意数)*2)配合使用,就会生成固定的0或1 如floor(rand(14)*2) (输出是固定的)
MySQL—报错注入


1.

select * from user;

MySQL—报错注入

2.

select * from user group by name;

MySQL—报错注入
这里的group by 意思是 根据name 分组

3.

select name,count(*) from user group by name;

MySQL—报错注入
count(*)函数是用来计数的。

第3条语句执行时执行group by 的时候 会创建一个虚拟表 里面有个主键,这里的主键从分类的name(查询的是name)里面获取。
虚拟表的主键不存在这个值的时候,就插入新记录
MySQL—报错注入

关键在于rand()的特殊性(如果使用rand()的话,该值会被计算多次)
在这里的意思就是,group by 进行分组时, floor(rand(14)*2)执行一次(查看分组是否存在),如果虚拟表中不存在该分组,那么在插入新分组的时候 floor(rand(14)*2) 就又计算了一次。(其实在上述 rand(14) 产生多个数据的时候,也能观察出来。只要 rand(14) 被调用,一定会产生新值)。所以会导致连续插入两次1,导致重复并且报错!

还是sqli第五关为例子 下面是爆当前库的语句

?id=1' union select 1,count(),concat(database(),0x7e,floor(rand(14)2)) as a from information_schema.tables group by a --+

MySQL—报错注入
修改database()位置,和information_schema.tables 就可以得到想要的数据


原文始发于微信公众号(网安之道):MySQL—报错注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月20日02:59:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MySQL—报错注入http://cn-sec.com/archives/1024812.html

发表评论

匿名网友 填写信息