检查网页源代码的flag才对,不然就笨笨爱大壮了,就是它:falg={benben love dazhuang}。
这个靶场是存在源码泄露的
0x01 常见命令执行危险函数
system()函数:
直接根据要求传参即可,0x01常见命令执行危险函数都是如此,直接传参即可,主要是熟悉命令执行函数。
0x02 过滤命令执行函数
这里使用了正则匹配,exec等函数不能使用,但并没过滤完整,使用passthru进行绕过。
0x03 命令连接符
链接演示1:
查看源代码发现将cmd传递的参数进行拼接执行,payload:?cmd= /;cat flag.php 先查看根路径下有哪些文件,然后使用分号执行查看命令,分号的作用是结束执行本条命令。先将ls给废掉然后再执行自己的。
||拼接:
payload:?cmd=cat flag.php||或者为?cmd=cat flag.php;
$cmd = $cmd." >/dev/null 2>&1"; 这段代码的 含义是将命令的输出重定向到 /dev/null
,从而隐藏命令的输出。
0x04 过滤空格
这里使用了<过滤空格,也可以使用<>,${IFS}等进行绕过。
0x05 文件名过滤
代码审计发现过滤掉了/flag等关键字,直接使用*过滤不让用system()函数 其他又不是不能用。
payload:passthru('cat /fl*');
0x06 文件读取命令过滤
读取过滤:
代码审计发现过滤了/flag,引号等一系列关键字,还是那句话黑名单很难过滤全,条条大陆通罗马,换条路即可。不让我用单引号那我就用双引号,不让我用cat命令那我可以用tac命令。直接上?cmd=system('tac /fl*');答案不唯一。
grep方法绕过:
此题用上一题的方法可以绕过,但是说用grep那就试试
0x07 编码绕过介绍
base64编码绕过:
这里将cat提前进行了base64 编码
hex:
这里将cat f*进行了hex编码。
总结:
这个靶场有个坑,这个坑就是在根目录下有一个flag,所以体现了现ls的重要性。要查看文件先确定路径,但是主要是为了熟练命令执行手法。在这个靶场里可以一条路走到黑,但是多一种方法往往又是就多一种出路。