原标题:通达OA-感染勒索病毒漏洞分析
No.1声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.2引言
开篇的首先感谢l1nk3r大佬的帮助。
前天看到通达OA官方发布的一则更新公告
http://club.tongda2000.com/forum.php?mod=viewthread&tid=128377&extra=page%3D1
No.3 第一个漏洞点
下了2017版本和最新版本的代码(这里遇到了一个坑点,2017版本的相当于只有漏洞的一半,为啥是一半后面会提到)
下载地址如下:http://www.tongda2000.com/download/2017.php
打开以后发现php代码都是混淆过后的(sublime打开如下图所示,用其他编辑器打开是乱码)
通达OA的代码加密方式用的是zend,网上找在线解密即可
也可以下载批量解密工具进行解密
然后我下载了对应版本的补丁包。通过查看补丁包发现主要是针对某一个文件进行补丁
然后针对未打补丁的和打补丁的进行对比查看,发现主要不同点在include_once('auth.php')这里
然后查看了一下auth.php
初步推断是未授权的文件上传漏洞。
直接访问问题url提示还未登陆,然后查看源代码
然后读代码构造payload,发现他有一个$_POST[‘P']参数如果P参数不为空且存在,则会创建一个sessionid
然后我构造一个P参数,发现走到了-ERR接收方IP无效的提示
很显然我需要走通这个步骤,也就是我的$DEST_UID需要赋值,来源是post传参。
既然是文件上传我肯定是需要上传文件的,所以构造上传,且不为空
构造好以后我以为万事俱备只缺getshell了,然后发现竟然回显ok的标志
说好的文件上传呢,我又回去读源代码(其实在这里也可以成功上传文件,只不过回显不了文件的名字而已)
发现UPLOAD_MODE虽未赋值,但是会加入判断。由于php代码都被加密了,解密太复杂,就没有深究他的其他配置情况。尝试构造,发现,可以成功上传,然后我去找文件,准备getshell发现2个坑点:
1.不能上传php;
2.上传的文件不在web目录下(当时我找了上传的文件找到怀疑人生,卡了挺久,还好l1nk3r大佬点出来在非web目录下)。
所以又出来了一个新点,就是这个漏洞应该是文件上传+文件包含。通过对比补丁暂未发现新漏洞中存在包含问题。又去看了其他版本通达,发现存在包含,可以文件上传+文件包含getshell文件包含形式和文件上传类似。
No.4 第二个漏洞点
咱们通过第一个漏洞上传文件以后,由于不在web目录下,利用文件包含进行包含。所以发现
/ispirit/interface/gateway.php目录下。
直接使用了include_once进行包含(问题点)
所示我们需要让代码走到include_once这个位置。那么开始看整段代码看如何走到
首先判断了一个json值。然后再判断url。所以我们需要构造一个json,还有一个url即可让代码走到include_once $url这里
构造完以后成功执行。
No.5 防御方案
1.关注通达OA官网,根据自身版本及时打补丁;
2.关注通达OA官网的历史漏洞及补丁,建议及时打历史补丁;
3.部署安恒玄武盾、waf等安全设备进行安全防护。返回搜狐,查看更多
责任编辑: