by:holy
基于报错获取信息,有三个常用的报错
今天总结一下:
updatexml()
extractvalue()
mysql中的xpath
我们需要先了解mysql数据库中对xml提供解析操作的xPath,参考链接:MySQL 5.1 提供XML内置支持(XPath)
我们通过文章提供的内容创建了一个xpath测试的数据库:
插入的xml语句
创建成功后doc字段效果如下
image.png
通过该数据库,我们来熟悉xPath语言,参考链接:Xpath语法学习-W3school
EXTRACTVALUE()函数:
ExtractValue(xml_document,xpath_string)
第一个参数:xml_document,为xml文档对象名称,从前文中可以看出是x库的doc字段
第二个参数:xpath_string:xpath语法
image.png
从图中语句我们可以理解,EXTRACTVALUE函数通过xpath读取到了xml <initial>J</initial>节点中的作者名字。
其中xpath定位语句必须是正确的,不然会产生错误,数据库会提示xpath语法错误。他会把这个报错信息显示出来,那么我们把xpath语句替换成想要查询的数据库语句,顺带着就把要想的信息通过xpath语法报错而显示了出来,结果如图所示:
image.png
从图中可以看出 version() 语句成功执行了,只是显示位有问题,后面我们使用concat语句进行拼接使报错语句完整的显示出来:
image.png
那么version()部分的内容就变成可以任意构造的sql语句了,但是!xpath报错组多显示32个字节!
updatexml()函数:
updatexml(xml_document,xpath_string,new_value)
第一个参数:xml_document,为xml文档对象名称,是数据库x库的doc字段
第二个参数:xpath_string:xpath语法
第三个参数:new_value:替换查找到的符合条件的字符(string)
image.png
从图中可以看出:
<initial>J</initial> 节点的数据替换成了:替换的内容
与EXTRACTVALUE()相同,通过xpath报错顺带写成要查询的数据库语句显示出来:
image.png
从图中可以看出 version() 语句成功执行了,只是显示位有问题,后面我们使用concat语句进行拼接使报错语句完整的显示出来:
image.png
构造查询
image.png
通过图中划线部分可以任意构造报错注入查询
database() //获取当前数据库
version() //获取数据库版本
user() //获取用户
@@datadir //获取数据库路径
@@version_compile_os //获取操作系统
@@basedir //mysql安装路径
session_user() //获取连接数据库的用户名
current_user() //获取当前用户名
system_user() //获取系统用户名
参考文章:
Xpath语法学习-W3school
MySQL 5.1 提供XML内置支持XPath
报错注入分析之updatexml注入