• 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) #
    
    • 1
    • 2

    具体使用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)) #
    
    • 1
    • 2

    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
    
    • 1
    (select 1 from (select concat(0x7e,database(),0x7e,floor(rand(0)*2)) x,count(*) from users GROUP BY x) b)
    
    • 1

    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

  • 相关阅读:
    最新期货限仓规定(商品期货限制开仓)
    spring boot项目修改配置文件后运行报错
    基于VB6的颜色取色器 - 开源研究系列文章 - 个人小作品
    vector底层实现及应用注意事项
    MCE丨重组蛋白常见的融合标签
    93.(cesium篇)cesium动态单体化-倾斜摄影(楼栋)
    AI也需要透明度?是的,需要
    URL工具-URLUtil
    git rebase的基本使用
    请解释一下React中的条件渲染(conditional rendering)。
  • 原文地址:https://blog.csdn.net/qq_55675216/article/details/126053484