zoukankan      html  css  js  c++  java
  • BUUCTF-[极客大挑战 2019]HardSQL 1详解

    来到sql注入骚姿势,我们一点一点开始学

    我们来到这道题,然后尝试注入,结果发现

    拼接'or '1'='1

      'or '1'='2如果是字符型注入则会报错,然而并没有而是显示的页面一样,

    通过常规注入,回显的页面都是

    最后,我们发现这道题是xpath报错注入,函数注入

    extractvalue()
    extractvalue() :对XML文档进行查询的函数

    语法:extractvalue(目标xml文档,xml路径)

    第一个参数 :   第一个参数可以传入目标xml文档

    第二个参数: xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

          正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

    tip: 还有要注意的地方是,它能够查询的字符串长度最大是32个字符,如果超过32位,我们就需要用函数来查询,比如right(),left(),substr()来截取字符串

    再举个栗子:

    SELECT ExtractValue('<a><b><b/></a>', '/a/b'); 这个语句就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

    利用concat函数将想要获得的数据库内容拼接到第二个参数中,报错时作为内容输出。

    知道这些知识之后,我们开始注入吧

    百度了web 的骚操作
    用’^'来连接函数,形成异或
    这边用的是extractvalue()

    我们先去爆数据库:

    先构造payload:

    ?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(database()))))%23

    于是我们知道了库名叫:geek

    然后,我们再payload爆表名,但是这里把等于号给我们过滤了,不过我们还有骚操作like用法

    ?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))

    于是爆出表名:

     爆列名:

    ?username=admin&password=admin'^extractvalue(1,concat(0x5c,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23

     爆数据就完事了,这里因为用extractvalue()函数,一次只能显示32个字符,我们需要用right函数

     再用right函数,爆右边,然后拼接一下flag

     拼接然后得到flag

    flag{62b5ffa6-498c-465f-94e5-ddc474f549dc}

  • 相关阅读:
    书签
    jQueryUI Plugin TableSorter的2个widget扩展
    CSS之关于clearfix--清除浮动
    C#中的is关键字原来会做null检查
    jQuery UI 控件之Slider
    延长Nodejs HTTP 的连接时长
    Nodejs的Promise库
    jQuery的选择器中的通配符
    SharePoint Server 2010 中的基本任务
    ajax浅析---ScriptManagerProxy
  • 原文地址:https://www.cnblogs.com/junlebao/p/13836583.html
Copyright © 2011-2022 走看看