一、漏洞简介

通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。3月13日,通达OA在官方论坛发布通告称,近日接到用户反馈遭到勒索病毒攻击,攻击者通过构造恶意请求,上传webshell等恶意文件,并对入侵的服务器进行文件加密,勒索高额匿名货币赎金。笔者长期从事二进制漏洞的研究,写此文旨在学习web漏洞的研究方法并以此漏洞为实践,强化对web漏洞利用技术的认识,记录之。

二、漏洞分析

资料显示,该漏洞影响范围较广,影响的版本有:V11版、2017版、2016版、2015版、2013增强版、2013版。

本文为了复现方便,下载使用了通达OA V11.3版本。下载链接:

https://pan.baidu.com/s/1QFAoLxj9pD1bnnq3f4I8lg

提取码:ousi

2.1 初步的代码审计

安装好通达OA v11.3版本,安装后在webroot目录下找到源代码,查看源码,发现都是乱码,都是经过zend加密的,需要解密。解密工具可使用SeayDzend,因为源码是php写的,最简单的是用seay源码审计工具粗略筛选一下,查找潜在的漏洞,代码审计时间较长,审计结果取了开头一小段,说明思路而已。如图1所示:

图1:代码审计

2.2 文件上传漏洞

根据网上公开资料,直接定位到源码路径 C:\phpStudy\WWW\tongdaoa\webroot\ispirit\im\upload.php,查看源码,如图2:

图2:upload.php文件上传漏洞源码

该段源码黑框内部分,传入参数p,当参数p非空时进入会话页面,否则就进入认证页面。该处漏洞比较明显,只要参数p非空就可以绕过认证。继续阅读该段代码,绕过认证后就可以直接上传文件。如图3所示:

图3:文件上传

跟进inc\utility_file.php 的upload方法,发现有个文件名校验函数is_uploadable。查看该函数的代码逻辑,如果文件名从最后一个位置倒数三个是“php”,那么返回false,也就是不可以上传以php结尾的文件。参考源码,这里也有多种黑名单绕过的方法,略过。源码如下图4:

图4:文件名黑名单

2.3 文件包含漏洞

参考资料,该文件包含漏洞存在于源码ispirit/interface/gateway.php。查看该处源码,如图5:

图5:文件包含漏洞代码

通过foreach 循环解析json,如果key和url相等,那么获得url,判断url是否为空,如果不为空且url中包含general/、ispirit/、module/,就调用include_once函数。试想,如果url构造成../../类型,执行完文件包含后,就可以访问到我们之前上传的文件了,一个../向上一级目录移动一下,两个../刚好退到tongdaoa的安装目录,后面紧接着之前上传的文件目录就可以。此处漏洞关键就在于构造url。

三、漏洞复现

3.1 复现环境

测试主机:Win10 x64 english

通达OA 11.3

抓包软件: Burpsuite v1.737

浏览器Firefox 41.0

下面我们分别对两个漏洞分别进行复现。

3.2 复现文件上传漏洞

通过通读upload.php源码,复现该漏洞需要满足以下条件:

(1)参数p 非空;

(2)DEST_UID非空且为数字;

(3)UPLOAD_MODE 为1 或者2 或者3;

(4)attachment的文件名不可以为php;

构造文件上传payload1 如图6:

图6:文件上传payload1

用Burpsuite抓包,修改当前payload为payload1并重放,文件上传成功。如图7所示:

图7:文件上传复现

上传的文件保存在目录c:\phpstudy/www/tongdaoa/attach/im/2005/路径下,如图8所示:

图8:上传成功

验证文件上传成功。此时有一个问题,就是上传的文件不在webroot目录下,远程是访问不了的。这是需要配合另一个漏洞-文件包含漏洞来完成路径穿越,访问到上传的文件。

3.3 复现文件包含漏洞

按照之前代码分析,主要是构造url的payload。假设访问http://localhost/ispirit/interface/gateway.php,用burpsuite截包,发送到repeater,构造文件包含漏洞的payload2,payload2里注意两处,一处是增加Content-Type: application/x-www-form-urlencoded,另一处是json处url的构造。如图9所示,文件包含漏洞执行成功。

图9:文件包含漏洞复现

3.4 获取目标shell

两个漏洞结合使用,可以远程获取shell。提前准备好php木马以及冰蝎等远程连shell工具。思路:利用文件上传漏洞上传php木马,然后再利用文件包含漏洞,使得web访问到该php文件,再用冰蝎连接。(注意:不可以直接为.php,根据代码分析结果,结尾为php的文件上传不上去)如图10所示:

图10:获取shell步骤1

在文件夹路径“C:\phpStudy\WWW\tongdaoa\attach\im\2005”下找到了该文件,上传成功。如图11:

图11:上传成功

然后通过文件包含漏洞访问到刚刚上传的2125745527.test.php文件。如图12所示:

图12:访问已上传的文件

访问成功后,在\ispirit\interface\ 目录下会生成readme.php ,用冰蝎webshell连接,成功获取shell。如图13:

图13:成功获取shell1

图14:成功获取shell2

最后剩下的就是构造exploit了,网上已经给出很多该漏洞远程利用程序,大家可以用来测试。

四、补丁比较&加固建议

4.1补丁比较

笔者本着学习的目的,下载了通达OAv11.3的补丁,并做了补丁比较,比较的结果如下:

第一处补丁补上了文件上传漏洞,无论参数是否为空,都要进行认证。如图15所示:

图15:第一处补丁

第二处补丁将“..”过滤掉了,如果url中出现该符号,认为是错误的url。这样就不可以执行路径穿越,也就访问不到非webroot目录下的文件了。如图16所示:

图16:第二处补丁

4.2 加固建议

建议使用受影响版本的通达OA用户登录通达OA官网,获取最新补丁。请根据当前OA版本选择所对应的程序文件,运行前请先做好备份。安全更新下载地址:http://www.tongda2000.com/news/673.php

本文仅是记录一次对通达OA漏洞的分析利用过程,不当的地方请大牛们指点纠正。从逆向思维的角度出发,如何自主发现该类型的漏洞并能快速形成利用思路,构建exploit?这是笔者想在后续深入学习web漏洞时想着重提高的。有对代码审计有经验的大牛或者对代码审计感兴趣想一起学习的,可站内联系,一起进步!

五、参考

https://www.cnblogs.com/yuyan-sec/p/12549237.html

*本文作者:elvadisas,转自FreeBuf