zoukankan      html  css  js  c++  java
  • [SUCTF 2019]EasySQL

    1. 注入点测试
            a. 输入敏感字符 or、and、union、handler、from等字符串页面显示Nonono;有waf检测,不过这里没有过滤select、concat,可以使用BurpSuit测试一下。
            b. 输入字符串 a、b、c、love等页面没有任何回显
            c. 输入数字1,2,3,4,77,12312等页面显示 Array ( [0] => 1 )  只有输入数字0时页面没有回显。这里可以看出,后台将查询结果放在一个数组中,并进行输出。
            d. 堆叠注入测试,输入1;show databases;#页面会输出数据库的名字,可以进行堆叠注入。不过他这里过滤了from字段,所以查到表名,还是无法继续注入,但是我们已经知道的就是他这里可以执行多条Sql语句。
    2. 测试输入输出数据
            a. 输入1             输出 Array ( [0] => 1 )
            b. 输入1,2           输出Array ( [0] => 1 [1] => 1 )
            c. 输入1,2,3        输出Array ( [0] => 1 [1] => 2 [2] => 1 )
            d. 输入1,0           输出Array ( [0] => 1 [1] => 0 )
            e. 输入0,1           输出Array ( [0] => 0 [1] => 1 )
        经过上面5次的测试,从结果中不难看出,
            ○ 他这里后台是将查询到的结果放在了数组中,并在前端页面进行显示
            ○ 数组前面部分输出的都是输入的数组,只有最后一位输出的结果为0或者是1。并且只有输入的最后一位为0是,输出才是0。

       所以我们猜测这里的sql语句中用到了运算符或(||),将从前端输入的数据和||进行了拼接,并且运算符或(||)的另一端为0或字符串。
            可以根据图中测试大胆猜测Sql语句为 select $_POST['query'] || 0(flag) from table_name
          

    3.测试payload

        根据我们上述猜测也许或(||)后面拼接的就是flag,加上这里又可以执行多条Sql语句,那么这里 可以通过修改 sql_mode 模式 : PIPES_AS_CONCAT 来实现将 " || "视为 字符串连接符 而非 或 运算符
        Payload:1;set sql_mode=PIPES_AS_CONCAT;SELECT 1
        页面输出flag
        
    4. 方法二:
        其实这里并没有过滤*号,所以这里可以直接构建
        Payload:*,1
        代入到Sql语句中也就是 select *,1 ||  xxx from table_name。直接查询表格的全部内容。所以使用BurpSuit通过字典测试过滤字段还是很重要的。

  • 相关阅读:
    ASCII码对照表
    有种美叫做放弃
    OCX和DLL的区别
    江湖经验:喝酒的学问技巧
    TC2.0实现多文件编译
    希尔排序
    CalcOpticalFlowPyrLK的使用(转)
    简单选择排序的实现
    VS2008中解决方案窗口的问题
    用友T3用友通行政单位没有损益类科目,如何做期间损益结转?
  • 原文地址:https://www.cnblogs.com/ersuani/p/13875407.html
Copyright © 2011-2022 走看看