【ctf】简单说明报错型注入floor()和updataxml原理

floor rand group by 缺一不可

报错原理 floor(rand(0)*2)x 中floor负责把生成的随机数的小数去掉

但是(0)*2严格来说不算随机数 他的生成形式基本为011

所以能肯定导致报错 如果是rand()*2就会不可控

我是这么理解的:它一共有五次操作 如下:

由011011的这种形式 第一个生成的数字是0 他会检查有没有为0的键名(key) 结果当然是没有(第一次操作) 所以会插入一个虚拟表

但是在插入过程中要再取一次group by 后面的值 即再进行一次运算(第二个生成的数字是1) 所以输入的数据 key=1 value=1(第二次运算)

第三个生成的数字是1(第三次运算) 但是检查处key=1已经有了怎么办? 那就用count的方法把value+1=2 即key=1 value=2(第四次运算)

不要被上面搞晕了 一次语句执行相当于两次运算 第一次结果 1,1 第二次结果1,2

最后是第五步运算了 也就是关键所在 这时相当于一个循环了 又从头开始执行 但是结果也是1,1 已经有了重复了怎么办?所以就出错了 

此时就会抛出主键冗余的异常,也就是所谓的floor报错

 

updataxml()我是这么理解的 它的固定格式是updataxml(1,2,3)   1和3不是关键 而2是xpath格式的路径 但是我们通常借助concat来拼接sql语句 包括~这些因为格式不对所以出错 

如果以上理解有误 欢迎各位大佬指出

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值