Author:Ja0k@SecurityCN
一、事件背景
近日,通达OA在官方论坛发布了紧急通知,提供了针对部分用户反馈遭到勒索病毒攻击的安全加固程序。根据公告,遭受攻击的OA服务器首页被恶意篡改,伪装成OA系统错误提示页面让用户下载安装插件,同时服务器上文件被勒索病毒重命名加密,论坛中有多个用户反馈中招(具体现象为:主页被篡改、站点文件扩展名被修改、并生成一个勒索提示文本文件),论坛地址:http://club.tongda2000.com/forum.php?mod=viewthread&tid=128367&extra=page%3D1
通过在v11.3版本的测试发现全版本的任意文件上传漏洞结合v11版本的文件包含漏洞可以造成远程命令执行,默认为System权限,恶意攻击者可以成功上传Webshell后门,并进一步释放勒索病毒,危害较大。
二、漏洞信息
漏洞名称 | 通达OA任意文件上传漏洞 |
---|---|
CVE编号 | - |
影响范围 | 通达OA 2013/2013增强/2015/2016/2017/v11版本 |
威胁等级 | 高危 |
公开时间 | 2020年3月13日 |
漏洞名称 | 通达OA文件包含漏洞 |
---|---|
CVE编号 | - |
影响范围 | 通达OA v11版本 |
威胁等级 | 高危 |
公开时间 | 2020年3月13日 |
三、漏洞分析
3.1 补丁对比
http://www.tongda2000.com/news/673.php
根据通达官方的修复说明,需要替换MYOA\webroot下的文件下载官方发布的所有版本的补丁分析后发现:2013/2013增强/2015/2016/2017版本的补丁只有1个文件ispirit\im\upload.php;v11版本的的补丁文件与此次漏洞相关的有ispirit\im\upload.php 和ispirit/interface/gateway.php 等多个文件,所以v11 版本同时受2个漏洞的影响,其他版本暂不确定。
本次分析以通达v11 版本 为例
- 注意:通达OA的php文件采用的是zend54 加密,可以使用 SeayDzend工具进行解密,工具下载地址见附录
#补丁1: ispirit\im\upload.php 任意文件上传漏洞
对比补丁前后发现 主要是为了修复未登录任意上传文件,有2处更改首先第1处,就是关于登陆验证文件'./auth.php' 的调用
但在upload.php未修复前,有一个if判断如果$P存在且非空就不需要经过auth.php验证即可执行后续代码。利用此处逻辑漏洞可绕过登陆验证直接上传文件。补丁文件中是直接强制include_once './auth.php'; 进行登录验证。第2处,修改是在upload.php中 增加了登录的与数据库中的Session校验
$time = time(); $sql = 'select * from im_recent where ((from_id = \'' . $_SESSION['LOGIN_UID'] . '\' and to_id = \'' . $DEST_UID . '\') or (from_id = \'' . $DEST_UID . '\' and to_id = \'' . $_SESSION['LOGIN_UID'] . '\')) and type = \'1\''; $cursor = exequery(TD::conn(), $sql); if (0 < mysql_num_rows($cursor)) { $sql1 = 'UPDATE im_recent SET update_time = \'' . $time . '\' WHERE ((from_id = \'' . $_SESSION['LOGIN_UID'] . '\' and to_id = \'' . $DEST_UID . '\') or (from_id = \'' . $DEST_UID . '\' and to_id = \'' . $_SESSION['LOGIN_UID'] . '\')) and type = \'1\''; exequery(TD::conn(), $sql1); } else { $sql2 = 'INSERT INTO im_recent (from_id,to_id,update_time,type) VALUES (\'' . $_SESSION['LOGIN_UID'] . '\',\'' . $DEST_UID . '\',\'' . $time . '\',\'1\')'; exequery(TD::conn(), $sql2); }
分析完补丁之后我们来整体分析下存在漏洞upload.php 文件的逻辑
1.先判断\$P 参数是否存在调用Session和 auth登录认证,当\$P非空时此处可以绕过auth.php登录验证2.判断\$DEST_UID是否为空;其次如果DEST_UID 中存在有,
,则通过intval获取整数值;最后当$DEST_UID=0时,UPLOAD_MODE要为2 否接收方ID无效。
3.UPLOAD_MODE 有3种模式,vociemsg\weixunshare\im,其中im是默认模式,\$_FILES全局变量大于等于1的时候(就是有文件上传的时候),会调用upload方法进行处理,这里的文件上传的 参数为ATTACHMENT
4.跟进inc\utility_file.php 的upload方法,发现有个文件名校验函数is_uploadable
我们看下关于文件后缀名的获取方式,是通过strrpos 函数获取.
最后一次出现的位置开始到后面的3个字符串,不能为php
,其实黑名单有很多种方式绕过,比如上传后缀名为.phtml
,.cpt
等都可以绕过
补丁2:ispirit/interface/gateway.php 文件包含漏洞
通过对比v11.3版本的补丁中gateway.php前后代码发现 第47行后面,增加了对url地址种的..
符号的判断,防止用户读取其他目录文件。
通读修复之前的代码发现,整个流程为foreach循环解析$json,如果$key键等于字符串url
,则$url={\$key所对应的值},如果$url非空则调用 ,且数据中包含'general/' or 'ispirit/'or 'module/'时,就会调用include_once对$url进行包含。
if ($json) { $json = stripcslashes($json); $json = (array) json_decode($json); foreach ($json as $key => $val ) { if ($key == "data") { $val = (array) $val; foreach ($val as $keys => $value ) { $keys = $value; } } if ($key == "url") { $url = $val; } } 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; } }
那么就可以在url中传入../
进行跨目录,从而可以包含第1个漏洞上传的php文件,造成RCE
四、漏洞复现
*本次复现以通达OAv11.3 版本 为例
第1个漏洞的Poc的构造需要满足四个条件: P非空、DEST_UID非空且为数字、UPLOAD_MODE为1或2或3、ATTACHMENT的filename后缀名不能为php
最后构造的Payload如下上传了1个文件名为a.phtml
的php文件 绕过黑名单检测路径为 attach/im/2003/72566742.a.phtm 但该目录不在webroot下不能直接执行webshell,才需要利用后面的文件包含漏洞跨目录解析
最后RCE成功,有一点需要提醒下,通达OA开启了 disable_funcation 功能 很多常见的命令执行函数如 exec、eval、system等都被禁止了,需要bypass想学习绕过的可以参考:https://www.cnblogs.com/-qing-/p/10944118.html
五、修复建议
官方提供了以下可能受到影响的版本的补丁:2013版、2013增强版、2015版、2016版、2017版、V11版本下载地址:
V11版:http://cdndown.tongda2000.com/oa/security/2020_A1.11.3.exe 2017版:http://cdndown.tongda2000.com/oa/security/2020_A1.10.19.exe 2016版:http://cdndown.tongda2000.com/oa/security/2020_A1.9.13.exe 2015版:http://cdndown.tongda2000.com/oa/security/2020_A1.8.15.exe 2013增强版:http://cdndown.tongda2000.com/oa/security/2020_A1.7.25.exe 2013版:http://cdndown.tongda2000.com/oa/security/2020_A1.6.20.exe
六、附录
本次分析及复现的相关工具地址
https://github.com/SecurityCN/Vulnerability-analysis/tree/master/通达OA3月漏洞
参考:
*http://club.tongda2000.com/forum.php?mod=viewthread&tid=128377&extra=page%3D1