一、ExtractValue函数
ExtractValue()
函数是MySQL数据库中用于提取XML数据中指定路径的值的函数。它基于XPath语法,允许用户根据特定的路径表达式从XML格式的数据中获取所需信息。以下是关于MySQL中ExtractValue()
函数的详细讲解:
1.1语法
EXTRACTVALUE(xml_data, xpath_expression)
xml_data
: 包含XML数据的字段或表达式。xpath_expression
: XPath路径表达式,用于指定要提取值的位置。
1.2示例
假设有一个包含XML数据的表books
,其中一列为book_info
包含以下内容:
<book>
<title>MySQL Cookbook</title>
<author>Paul DuBois</author>
<year>2014</year>
</book>
我们可以使用ExtractValue()
函数来提取特定节点下的值。例如,要获取书籍标题(title):
SELECT ExtractValue(book_info, 'book/title') AS title FROM books;
这将返回结果为:
+-------------------+
| title |
+-------------------+
| MySQL Cookbook |
+-------------------+
二、利用extractvalue()进行报错SQL注入
在使用ExtractValue()函数时,无效的XPath表达式(xpath_expression)可能会导致报错。通过将恶意的SQL语句拼接放在xpath_expression处,可以使得该条SQL语句报错,并执行我们注入的恶意语句
例如:
SELECT * FROM users WHERE username = 'input_username' AND password = ExtractValue(1, CONCAT('username:', (SELECT database())));
其中payloadAND password = ExtractValue(1, CONCAT('username:', (SELECT database())));
使用了extractvalue函数,将xml数据设置为1
,xpath_expression部分设置为CONCAT('username:', (SELECT database())
此时的xpath_expression为“username: 数据库名”
,由于1
中并没有“username: 数据库名”
因此会产生报错,可以从报错结果中看到我们想要的数据库名