updatexml、extractvalue和floor报错注入原理

updatexml

updatexml是SQL语法的一个函数:
UPDATEXML(XML_document, XPath_string, new_value)
参数:
1: XML_document是String格式,为XML文档对象的名称,文中为Doc
2:XPath_string (Xpath格式的字符串) ,用于匹配第一个参数中的部分内容。(就像使用正则表达式匹配一个文本的特定内容一样)
3: new_value,String格式,替换查找到的符合条件的数据。

在这里,我们利用updatexml函数的报错机制进行注入,原理就是当第二个参数的格式和Xpath的格式不符的时候,就会产生报错,我们可以将我们的payload构造到第二个参数中,让其随着报错信息展示到页面上。

and updatexml(1, (concat('#',(payload))), 1) #
or updatexml(1, (concat('#',(payload))), 1) #

具体使用and 还是 or就要根据前面的一条语句执行是否成功来判断

extractvalue

extractvalue(xml_frag, xpath_expr)
从一个使用xpath语法的xml字符串中提取一个值。
xml_frag:xml文档对象的名称,是一个string类型。
xpath_expr:使用xpath语法格式的路径。

SQL报错注入的应用:当使用extractvalue(xml_frag, xpath_expr)函数时,若xpath_expr参数不符合xpath格式,就会报错。

~符号(ascii编码值:0x7e)是不存在xpath格式中的, 所以一旦在xpath_expr参数中使用~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。

and extractvalue(1, (concat(0x7e,(payload)))) #
or  extractvalue(1,concat(0x3a,(select database()),0x3a)) #

floor

当floor(), count(), group by遇到一起在from一个3行以上的表时,就会产生一个主键重复的报错,而此时你把你想显示的信息构造到主键里面,mysql就会通过报错把这个信息给你显示到页面上。

select count(*),concat((payload), floor(rand(0)*2)) as a from information_schema.tables group by a
(select 1 from (select concat(0x7e,database(),0x7e,floor(rand(0)*2)) x,count(*) from users GROUP BY x) b)

floor() : 向下取整。
count() : 常用于计算行的数目
group by: 分组
rand() : 产生一个0-1的随机浮点数
rand(0): 0为随机数种子,0可以替换成任意整数

floor(rand(0)*2)可能为0也可能为1。
floor(rand(0)*2)返回结果是固定的,返回一个序列0110110011101

注入语句中查询用到的表内数据必须>=3条
select count(*) from users group by floor(rand(0)*2);
在这里插入图片描述
当表中数据小于3,查询结果是正确的

https://blog.csdn.net/weixin_43901998/article/details/105227678
https://blog.csdn.net/weixin_54894046/article/details/124940161
https://blog.csdn.net/weixin_46634468/article/details/120692475

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值