通达OA任意文件上传并利用文件包含导致RCE分析

前言

通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。

3月13日,通达OA在官方论坛发布通告称,近日接到用户反馈遭到勒索病毒攻击,提示用户注意安全风险,并且于同一天对所有版本发布了加固补丁

通过在v11.3版本的测试发现全版本的任意文件上传漏洞结合v11版本的文件包含漏洞可以造成远程命令执行,默认为System权限,恶意攻击者可以成功上传Webshell后门,并进一步释放勒索病毒,危害较大。

漏洞分析

php解密

环境搭建什么的就不说了,这里采用的是2017的版本,修复前的版本。

官网下载

相比于一般的php审计,该项目增加了php的加密。这里因为我也是第一次接触到php加密的文件审计,前期碰壁很多,尝试google了php解密,找到一些工具(如黑刀zend等),但是并没有用(可能是zend版本的问题,也可能是工具本身的问题,没有深究)

后来看到一篇关于该漏洞的复现——通达OA最新RCE漏洞分析,并询问potatso大佬解密方法后,得到耐心解答0rz,并找到一个在线进行php解密的网站——DEPHP解密

另外是一个批量解密的工具,seay神写的SeayDzend

另外了解了关于php加密混淆的几种方法——PHP加密解密的解析

通达OA php代码部分的加密统统采用的是Zend加密。

文件上传

/webroot/ispirit/im/upload.php

这是一个文件上传的功能点,在未修复版本中,是可以绕过验证,从而达到任意上传的效果。有一个if判断如果$P存在且非空就不需要经过auth.php验证即可执行后续代码。利用此处逻辑漏洞可绕过登陆验证直接上传文件。补丁文件中是直接强制include_once ‘./auth.php’; 进行登录验证。因上传后的文件不在根目录,所以无法直接利用,因此需要进行文件包含。

文件包含

未修复前,可通过精心构造json进入47行的includ_once进行文件包含。官方在补丁中增加了对”..”的过滤防止用户读取其他目录文件。

20200326222917.png

分析利用链

  1. 先判断$P参数是否调用了Session和auth登陆认证,当$P费控时,此处可以绕过auth.php登陆验证

  2. 判断DEST_UID是否为空,如果$DEST_UID存在,则通过intval获取整数值,$DEST_UID==0UPLOAD_MODE==2才接受,否则 ID无效。

  3. $_FILES全局变量大于等于1的时候(就是有文件上传的时候),会调用upload方法进行处理,这里的文件上传的参数为ATTACHMENT

    20200326204612.png

  4. 跟进发现调用的是\general\appbuilder\modules\appdesign\models\AppUtils.php中用yii框架的upload 函数,找了一下,对后缀名有限制。

    namespace app\models;

    use yii\base\Model;
    use yii\web\UploadedFile;

    class UploadForm extends Model
    {
    /**
    * @var UploadedFile
    */
    public $imageFile;

    public function rules()
    {
    return [
    [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
    ];
    }

    public function upload()
    {
    if ($this->validate()) {
    $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
    return true;
    } else {
    return false;
    }
    }
    }
  5. 那么就可以在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,才需要利用后面的文件包含漏洞跨目录解析

修复建议

打上官方发布的补丁:加固补丁

个人观点

虽然我很菜,但是我个人不喜欢这个官网上的一些内容,主要是想要表现产品的优秀,将顾客的信息公之于众。在其官网上,可以非常容易的找到有哪些企业使用了这个系统。这的确是长了脸面(我们产品很好),但是没有一个系统是绝对安全的,这种做法也给这个用户带来的风险, 在黑客进行攻击的时候,这种行为无疑是给攻击者们提供了便利,这大概也是这个勒索病毒横行的原因之一吧。

参考链接

文章作者: V0WKeep3r
文章链接: http://v0w.top/2020/03/20/TODA-FileUpload-Inclusion-vuln/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 V0W's Blog
支付宝打赏
微信打赏