通达OA漏洞利用威胁分析
字数 1367 2025-08-20 18:17:31

通达OA漏洞利用威胁分析教学文档

0x01 通达OA系统概述

通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。

0x02 系统目录结构及版本信息

目录结构

目录名称 用途
attach OA附件文件存放目录
bin Apache、PHP、Zend等主程序及配置文件,服务配置程序等
data5 MySQL数据库文件目录
logs Apache等日志文件目录
MyAdmin 通达OA的MySQL管理工具
mysql5 MySQL主程序文件
nginx Nginx Web应用服务
tmp 临时文件目录
webroot 通达OA的WEB根目录(PHP程序目录)

版本信息检查点

  1. /inc/expired.php
  2. /inc/reg_trial.php
  3. /inc/reg_trial_submit.php

0x03 任意文件删除漏洞分析

漏洞位置

/module/appbuilder/assets/print.php

漏洞代码分析

<?php
$s_tmp = __DIR__ . "/../../../../logs/appbuilder/logs";
$s_tmp .= "/" . $_GET["guid"];

if (file_exists($s_tmp)) {
    $arr_data = unserialize(file_get_contents($s_tmp));
    unlink($s_tmp);
    $s_user = $arr_data["user"];
}
else {
    echo "未知参数";
    exit();
}

漏洞原理

  1. $s_tmp初始值为当前脚本目录(__DIR__)拼接相对路径/../../../../logs/appbuilder/logs
  2. 然后拼接GET参数guid的值,导致路径可控
  3. 仅使用file_exists()检查文件存在性后直接调用unlink()删除文件

影响版本

通达OA V11.6及以下版本

漏洞利用示例

删除/module/appbuilder/assets/目录下的test.txt文件:

?guid=../../../webroot/module/appbuilder/assets/test.txt

0x04 任意用户文件上传漏洞分析

漏洞位置

/general/data_center/utils/upload.php

漏洞代码关键点

if ($action == "upload") {
    if ($filetype == "xls") {
        // xls处理代码
    }
    else if ($filetype == "img") {
        // img处理代码
    }
    else {
        // 漏洞所在代码块
        $uploaddir = MYOA_ATTACH_PATH . "/data_center/attachment/";
        
        if (!is_dir(MYOA_ATTACH_PATH . "/data_center/attachment")) {
            mkdir(MYOA_ATTACH_PATH . "/data_center/attachment");
        }
        
        $s_n = $_FILES["FILE1"]["name"];
        if ($s_n[0] != "{") {
            $s_n = $repkid . "_" . $s_n;
        }
        
        move_uploaded_file($_FILES["FILE1"]["tmp_name"], $uploaddir . $s_n);
    }
}

漏洞原理

  1. $action为"upload"且$filetype不为"xls"或"img"时进入else代码块
  2. 上传目录不存在时会自动创建
  3. 文件名仅检查是否以"{"开头,否则简单拼接$repkid变量
  4. 直接使用move_uploaded_file()移动上传文件,无严格过滤

影响版本

通达OA V11.7以下版本

利用条件

需要后台权限(可通过删除认证文件绕过)

0x05 组合利用技术

攻击链

  1. 首先利用任意文件删除漏洞删除认证文件inc/auth.inc.php
    ?guid=../../../webroot/inc/auth.inc.php
    
  2. 然后利用文件上传漏洞上传Webshell
  3. 通过Webshell获取服务器权限

防御建议

  1. 及时升级到最新版本
  2. 对文件操作进行严格路径校验
  3. 实现上传文件的严格过滤机制
  4. 限制关键目录的写权限
  5. 部署Web应用防火墙(WAF)

附录:漏洞修复方案

  1. 对于文件删除漏洞:

    • 添加路径白名单校验
    • 禁止使用相对路径跳转
    • 限制可删除的文件范围
  2. 对于文件上传漏洞:

    • 实现严格的文件类型检查
    • 限制上传文件扩展名
    • 对上传文件内容进行安全检查
    • 存储上传文件时使用随机文件名
    • 禁用危险的文件执行权限
  3. 通用安全措施:

    • 实施最小权限原则
    • 定期安全审计
    • 启用日志记录和监控
    • 进行输入验证和输出编码
通达OA漏洞利用威胁分析教学文档 0x01 通达OA系统概述 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。 0x02 系统目录结构及版本信息 目录结构 | 目录名称 | 用途 | |---------|------| | attach | OA附件文件存放目录 | | bin | Apache、PHP、Zend等主程序及配置文件,服务配置程序等 | | data5 | MySQL数据库文件目录 | | logs | Apache等日志文件目录 | | MyAdmin | 通达OA的MySQL管理工具 | | mysql5 | MySQL主程序文件 | | nginx | Nginx Web应用服务 | | tmp | 临时文件目录 | | webroot | 通达OA的WEB根目录(PHP程序目录) | 版本信息检查点 /inc/expired.php /inc/reg_ trial.php /inc/reg_ trial_ submit.php 0x03 任意文件删除漏洞分析 漏洞位置 /module/appbuilder/assets/print.php 漏洞代码分析 漏洞原理 $s_tmp 初始值为当前脚本目录( __DIR__ )拼接相对路径 /../../../../logs/appbuilder/logs 然后拼接GET参数 guid 的值,导致路径可控 仅使用 file_exists() 检查文件存在性后直接调用 unlink() 删除文件 影响版本 通达OA V11.6及以下版本 漏洞利用示例 删除 /module/appbuilder/assets/ 目录下的 test.txt 文件: 0x04 任意用户文件上传漏洞分析 漏洞位置 /general/data_center/utils/upload.php 漏洞代码关键点 漏洞原理 当 $action 为"upload"且 $filetype 不为"xls"或"img"时进入else代码块 上传目录不存在时会自动创建 文件名仅检查是否以"{"开头,否则简单拼接 $repkid 变量 直接使用 move_uploaded_file() 移动上传文件,无严格过滤 影响版本 通达OA V11.7以下版本 利用条件 需要后台权限(可通过删除认证文件绕过) 0x05 组合利用技术 攻击链 首先利用任意文件删除漏洞删除认证文件 inc/auth.inc.php 然后利用文件上传漏洞上传Webshell 通过Webshell获取服务器权限 防御建议 及时升级到最新版本 对文件操作进行严格路径校验 实现上传文件的严格过滤机制 限制关键目录的写权限 部署Web应用防火墙(WAF) 附录:漏洞修复方案 对于文件删除漏洞: 添加路径白名单校验 禁止使用相对路径跳转 限制可删除的文件范围 对于文件上传漏洞: 实现严格的文件类型检查 限制上传文件扩展名 对上传文件内容进行安全检查 存储上传文件时使用随机文件名 禁用危险的文件执行权限 通用安全措施: 实施最小权限原则 定期安全审计 启用日志记录和监控 进行输入验证和输出编码