【SQL注入】基于extractvalue()的报错注入原理

本文介绍了MySQL中的ExtractValue函数,用于从XML数据中提取值,同时讨论了如何利用此函数进行SQL注入攻击。通过示例展示了函数用法及其潜在的安全风险。
摘要由CSDN通过智能技术生成

一、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: 数据库名”因此会产生报错,可以从报错结果中看到我们想要的数据库名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值