
掌控安全-master
一位向往于任意门的白帽少年,我的奇技淫巧,让你尽可能的getshell.
今天的主角通达OA,前段时间黑产界的杀手,开始吧
CNVD:CNVD-2020-26562
通达OA是由北京通达信科科技有限公司开发的一款办公系统,前几天通达官方在其官网发布了安全提醒与更新程序,并披露有用户遭到攻击。
攻击者可在未授权的情况下可上传图片木马文件,之后通过精心构造的请求进行文件包含,实现远程命令执行,且攻击者无须登陆认证即可完成攻击。

本文主要以通达OA文件上传和文件包含导致的RCE进行复现和分析
通过fofa的搜索可以看到通达OA系统应用非常广泛,这就给同学们提供了大量的实战环境.当然大家一定要做一个正直的白帽子.

通达OA V11版 <= 11.3 20200103
通达OA 2017版 <= 10.19 20190522
通达OA 2016版 <= 9.13 20170710
通达OA 2015版 <= 8.15 20160722
通达OA 2013增强版 <= 7.25 20141211
通达OA 2013版 <= 6.20 20141017
通达OA系统采用了一键式的傻瓜操作,正常的软件安装,这里我本地搭建的.安装过程省略.安装完成后访问本地地址,截图如下:

文件在 webroot\ispirit\im\upload.php
源码采用了zend加密,解密后才能正常阅读代码,上面的代码是解密后的,如果有想去探索更多的可以用解密工具解密自行研究。
通过上边的源码可以看到,第一个if(第5行)对P进行了判断,只要传递了参数P或者不为空,就可以进入下面的语句,如果判断失败,就进入else,也就是身份认证功能,所以这里只需要传递一个P并且值不为空,就可以绕过登录认证,在未授权的情况下进行上传文件。

这里测试的包中传递了P参数
接着往下看

判断DEST_UID,只要不为空也不为0即可, 在之后的文件上传处理逻辑代码中,会对$_FILES[‘ATTACHMENT’][‘name’])进行一次url解码,之后判断解码前后文件名长度是否有变化,如果有变化,则将url解码后的文件名作为最后的文件名。
之后追踪upload函数,在 inc/utility_file.php 的1321行

这里调用了is_uploadable对文件名字进行判断,这个函数在1833行
首先使用了strrpos来定位 . 最后出现的位置

当文件名中不存在”.”时会直接以现有的文件名来作为EXT_NAME,如果存在则从.开始匹配3位,判断后缀是否为php,如果为php则返回false,否则将”.”之前的作为EXT_NAME。
因为通达OA搭建在windows环境下,所以可以上传一个.php.后缀的文件,来绕过文件检测(这里跟文件上传的绕过原理相同),但是这里问题是上传的文件不在web工作目录下,所以即使上传了也访问不到,所以无法利用
下边我们就要用到文件包含的漏洞执行我们上传的文件!
这个关键文件的位置在webroot\ispirit\interface\gateway.php(这里仅参考我用的版本,不同的版本好像路径不同,还有待研究),话不多说,看源码:
这里首先是不传入参数P就可以进入下面判断语句,之后用到了stripcslashes函数

看一下实例就明白了,只是这里的源码接收了一个形参 之后从json中获取url参数的值,之后判断general/、ispirit/、module/是否在url内,如果不在直接跳过下面的include_once $url,如果存在则包含指定URL的文件, 这个是后期进行文件包含的重点
通过第一个漏洞,绕过认证上传木马,然后通过文件包含来包含文件,其中需要注意的是 DEST_UID 不能未空,文件包含中的url请求数据中需要包含 general/、ispirit/、module/三者中的一个.
1.访问本地通达OA系统

2.抓包,改POST包,放入Repeater模块。

3.改包,如下POC
单包发送,会返回一个数据包,数据包包含了文件上传的路径。我们单包发送会在通达OA系统的文件中生成木马php文件。

很明显的可以看到,上传成功了,接下来利用文件包含执行上传的木马文件 访问地址
抓包,构造payload
查看返回包(这里一定要发POST包)

system权限 执行一下CMD命令看一下

可以看到,各种危害不是很大的漏洞,组合起来危害还是比较大的,尤其是在这个攻击中两次都利用到的认证绕过,起到了关键的作用。
通过绕过认证访问到上传接口进行图片马的上传,再结合上文件包含,造成了RCE。
目前最直接的修复方式就是替换官方给的文件
此漏洞本人通过查阅各方面的资料复现了5个小时左右,不敢说全网最详细,也差不多了。希望对大家有所帮助。同时大家一定要做一个正直的白帽子,