文章目录
-
目录
文章目录
一.报错注入概述
二.报错注入分类
extractValue()函数概述
利用extractValue()函数报错注入
利用updatexml()函数报错注入
总结
一.报错注入概述
在SQL注入报错攻击中,攻击者通过在用户输入的位置注入恶意的SQL代码,使应用程序拼接出错误的SQL语句。当数据库执行错误的SQL语句时,会返回错误信息,这些错误信息可能包含数据库的具体错误信息、相关的数据和表结构等敏感信息。攻击者通过分析这些错误信息来获取相关的数据或者进一步攻击数据库。
案例如下:
http://192.168.100.10/sql/Less-1/index.php?id=1' union select 1,2,datadase()--+
案例分析:上述sql注入中认为将正确的sql语句database() 改为错误的sql语句 datadase()
数据库回显内容为:FUNCTION security.datadase does not exist
通过数据库回显信息可逆向分析出当前未注入恶意sql的语句查询的数据库名是securty
因此我们可以通过报错注入推断出部分数据库真实信息
二.报错注入分类
extractValue()函数概述
extractValue()函数在SQL语句中用于提取XML类型的数据中指定节点的值。它接受两个参数:第一个参数是XML类型的列或表达式,第二个参数是XPath表达式。XPath是一种用于在XML文档中定位节点的语言。
extractValue()函数首先对XML数据进行解析,然后基于XPath表达式定位到指定的节点,最后返回该节点的值。如果节点不存在,函数将返回空值。
SELECT extractValue(查询列名, '/root/node') AS node_value
FROM table_name;
#上述SQL语句将从表中名为table_name的记录的xml_column列中提取出位于/root/node路径下的节点的值,并将其作为node_value返回。
利用extractValue()函数报错注入
extractValue()函数对查询路径的符号是否正确十分敏感,当路径符号出现错误,数据库将会回显错误信息,如下图:
因此,可以在执行此报错前插入一些恶意的sql查询语句通过此报错回显一些我们需要的信息。
案例如下:
select extractivalue(doc.concat(0x7e,(select database()))) from xml;
回显错误:XPATH syntax error :"~ctfstu"
通过上述报错回显成功回显当前数据库名ctfstu
注:0x7e :是阿斯克码,会被电脑转译为符号 ~
concat()函数会将括号中的内容拼接,如concat(1,2)执行结果为12
报错分析:数据库优先执行括号中的内容即优先执行select database() 查询到数据库名
concat()函数将~ 与数据库名拼接为 ~ctfstu
数据库最终执行的语句为select extractivalue(doc.~ctfstu) from xml;
当使用函数extractivalue()查询时检测路径符号 ~ 有误从而将报错信息~ctfstu回显
substring()函数
利用updatexml()函数报错注入