通达OA任意文件上传并利用文件包含导致远程代码执行漏洞分析
字数 1351 2025-08-25 22:58:20
通达OA任意文件上传及文件包含漏洞分析与利用
漏洞概述
通达OA系统存在一个组合漏洞,攻击者可以通过绕过身份验证实现任意文件上传,再结合文件包含漏洞最终导致远程代码执行。该漏洞影响多个版本的通达OA系统。
漏洞分析
文件上传漏洞
漏洞入口
文件上传功能位于 /ispirit/im/upload.php,关键代码如下:
$P = $_POST["P"];
if (isset($P) || ($P != "")) {
ob_start();
include_once "inc/session.php";
session_id($P);
session_start();
session_write_close();
}
else {
include_once "./auth.php";
}
绕过身份验证的条件
- 必须提供
P参数且不为空 - 通过
P参数控制 session,绕过auth.php的身份验证
文件上传参数要求
$DEST_UID = $_POST["DEST_UID"];
$dataBack = array();
if (($DEST_UID != "") && !td_verify_ids($ids)) {
$dataBack = array("status" => 0, "content" => "-ERR " . _("接收方ID无效"));
echo json_encode(data2utf8($dataBack));
exit();
}
DEST_UID参数不能为空DEST_UID需要是0-9开头的任意字符串- 如果
DEST_UID=0,则UPLOAD_MODE必须为2
文件上传处理
上传功能通过 upload() 函数实现(位于 utility_file.php 第1665行),最终调用 add_attach() 函数(第1854行)处理附件。
文件存储路径
文件存储路径由以下部分组成:
$SYS_ATTACH_PATH_ACTIVE定义在utility_file.php第403行- 实际路径为
$ROOT_PATH . "../attach/"(定义在td_config.php) - 最终路径格式:
$PATH/$YM/$ATTACH_ID.$ATTACH_FILE
文件包含漏洞
漏洞入口
文件包含功能位于 /ispirit/interface/url.php(或其他类似文件),关键代码如下:
if ($json) {
$json = stripcslashes($json);
$json = (array) json_decode($json);
foreach ($json as $key => $val) {
if ($key == "url") {
$url = $val;
}
}
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;
}
}
exit();
}
利用条件
- 提供
json参数,包含有效的JSON数据 - JSON数据中必须包含
url键 url值必须包含general/、ispirit/或module/路径
漏洞利用步骤
组合利用方式
-
绕过身份验证上传文件
- 向
/ispirit/im/upload.php发送POST请求 - 包含参数:
P: 任意非空值(用于绕过身份验证)DEST_UID: 0-9开头的字符串(如"1")UPLOAD_MODE: 1/2/3ATTACHMENT: 恶意文件
- 向
-
获取上传文件路径
- 上传成功后,服务器返回包含文件部分路径的响应
- 完整路径需要结合
$ROOT_PATH和返回的部分路径构造
-
利用文件包含执行代码
- 向包含漏洞的接口发送请求
- 包含
json参数,指向上传的恶意文件 - 示例JSON:
{"url":"attach/路径/恶意文件"}
防御措施
-
文件上传修复
- 严格验证上传文件的类型和内容
- 实现完整的身份验证机制,不可仅依赖session_id
- 限制上传文件的可执行权限
-
文件包含修复
- 避免动态包含用户可控的文件路径
- 如果需要动态包含,应严格限制包含路径范围
- 实现文件包含的白名单机制
-
系统层面
- 及时更新官方补丁
- 限制服务器目录访问权限
- 监控异常文件操作
参考资源
- 漏洞发现者GitHub: https://github.com/jas502n/OA-tongda-RCE
- 官方补丁:建议联系通达OA官方获取最新安全更新
免责声明
本文仅用于安全研究和教育目的,未经授权不得用于非法用途。使用本文所述技术造成的任何后果由使用者自行承担。