mysql报错注入总结

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 J节点中的作者名字。

其中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

从图中可以看出:

J 节点的数据替换成了:替换的内容

与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注入

你可能感兴趣的:(mysql报错注入总结)