关于BMZCTF中 shell_exec的解法详解
反引号和$(),本质上都属于命令嵌套,本意是Linux为了执行嵌套式的命令而设计的一种命令模式,比如我如果想echo whoami指令执行后的结果,在Linux中直接执行:
echo whoami
是不可以的! 但是,我们可以这样:
echo `whoami`
或者是:
echo $(whoami)
Linux系统就会先执行whoami命令,然后将其执行后的结果显示出来。 因此,在这里我们可以利用命令嵌套,来执行我们想要的代码,只需要用反引号或者是$符号把我们想要执行的命令作为嵌套命令即可。
明确了如何嵌套我们的想要执行的命令,经过实验发现题目还设置了防火墙,对特定的格式进行了过滤,比如“cat”、“flag”以及空格等,这里,针对这些过滤,我们可以通过替代的方式绕过,比如说经过实验,可以使用${IFS}替换空格,可以使用head替换cat,也可以使用%9插在字符串中间,起到防范的作用,这样,我们精心构造的payload就可以拿到flag了! 最后,我把我拿到flag的payload公布一下:
ip=www.baidu.come.$(ec$9ho$IFS$9s$9h$IFS$9d.txt$IFS$9|s$9h$IFS$9>f.txt)
执行成功后,访问f.txt,就可以看到flag了!!!
上一篇:
5款热门的远程控制软件,让你事半功倍
下一篇:
修正的判定/条件覆盖