【最新漏洞预警】Zoho ManageEngine Admanager Plus 任意文件上传漏洞可GetShell

VSole2021-12-06 05:06:14

漏洞信息

2021年9月,Zoho官方通报了Zoho ManageEngine ADManager Plus的多个漏洞:

包括:

CVE-2021-37539CVE-2021-37762CVE-2021-37741CVE-2021-37761CVE-2021-37925CVE-2021-37919CVE-2021-37920CVE-2021-37921CVE-2021-37923CVE-2021-37924CVE-2021-37918CVE-2021-37922CVE-2021-37931CVE-2021-37930CVE-2021-37929CVE-2021-37928CVE-2021-37926

这些漏洞以文件上传类型为主,影响v7111及以下版本。其实这个产品和前期分析的Zoho ManageEngine ADSelfService Plus有很多类似的代码,相关文章链接如下:

CVE-2021-40539
QCyber,公众号:且听安全CVE-2021-40539-Zoho ManageEngine ADSelfService Plus如何从bypass到RCE

下面将Zoho Manageengine Admanager Plus其中一处认证后的任意文件上传漏洞分享给大家。

进程分析

系统使用Tomcat容器进行构建,查看服务配置:

8080端口对应`ADMP`服务,找到对应进程并获取启动命令:

加入调试信息并重启,成功打开远程调试端口:


数据库分析

在`bin`目录有一个连接数据库脚本`connectDB.bat`:

cd ../pgsql/binclspsql -h127.0.0.1 -Uadmanager -p33306 -dadsm

默认情况下数据库配置信息位于`database_params.conf`:

利用上面的配置信息,成功连接数据库:

合法API URL分析

查看`web.xml`,找到一个名为`FWServletAPI`的`servlet`:

同时定义了多个针对全部URL请求的过滤器,比如`ADSFilter`:

我们随意构造一个URL请求:

http://***:8080/RestAPI/WC/NotificationTemplate/test

在`ADSFilter#doFilter`打下断点:

进入`doSubFilters`:

经过一系列参数提取和身份认证验证后,第136行调用函数`RestAPIUtil.isRestAPIRequest`来验证URL:

然后调用`RestAPIFilter.doAction`:

第61行通过`RestAPIUtil.getAPIDetails`来获取API接口的信息,跟进:

发现这里是从数据库中来寻找合法的API URL规则:

一共有607个合法URL规则:

寻找`/RestAPI/WC/NotificationTemplate/*`合法的URL列表,共计13个:

/RestAPI/WC/NotificationTemplate/getDefaults/RestAPI/WC/NotificationTemplate/getTemplate/RestAPI/WC/NotificationTemplate/saveTemplate/RestAPI/WC/NotificationTemplate/deleteTemplates/RestAPI/WC/NotificationTemplate/copySettings/RestAPI/WC/NotificationTemplate/attachFiles/RestAPI/WC/NotificationTemplate/removeFileAttachment/RestAPI/WC/NotificationTemplate/getShareSettings/RestAPI/WC/NotificationTemplate/saveShareSettings/RestAPI/WC/NotificationTemplate/getShareableUsers/RestAPI/WC/NotificationTemplate/getModuleDetails/RestAPI/WC/NotificationTemplate/getTemplates/RestAPI/WC/NotificationTemplate/addRemoveColumns

相关定义位于文件`ADSProductAPIs_OMP.xml`:

文件上传

既然漏洞与文件上传有关,重点关注名为`attachFiles`的URL,替换HTTP请求为:

/RestAPI/WC/NotificationTemplate/attachFiles

定位函数`attachFiles`:

提取请求的相关参数后没有进行任何检查,直接将上传的文件内容进行写入操作。构造如下请求:

直接GetShell:

修复方式

v7111版本中函数`attachFiles`中增加了对文件后缀名的判断:

文件后缀名判定通过新增的`FileUtil.validateImageFileExtension`函数完成:

将文件类型限制为:

public static final String DEFAULT_IMAGE_EXTENSION[] = {    "jpg", "png", "gif", "jpeg", "tiff", "pjp", "pjpeg", "jfif", "tif", "svg",     "bmp", "svgz", "webp", "ico", "xbm", "dib"};

写在最后

通过补丁对比发现还存在多处文件上传漏洞的修复,比如`com.manageengine.ads.fw.ssl.SSLAPI#addNewCertificate`:


同样对文件后缀进行了过滤,通过研究发现这个触发点是对压缩包进行解压,但是没有对文件后缀进行检查,可以实现任意文件上传,但是在处理完压缩包后,程序会自动删除文件,但是存在条件竞争的问题,仍可GetShell。

再比如`com.manageengine.ads.fw.sso.ADSSAMLAPI#saveSAMLConfig`:

也是增加后缀名检查,还有一些其他点在原理上也是相同的,这里就不一一赘述了,有兴趣的小伙伴可自行研究。

文件上传zoho
本作品采用《CC 协议》,转载必须注明作者和本文链接
Zoho ManageEngine Admanager Plus 任意文件上传漏洞可GetShell。
ZOHO ManageEngine ServiceDesk Plus(SDP)是美国卓豪(ZOHO)公司的一套基于 ITIL 架构的 IT 软件。该软件集成了事件管理、问题管理、资产管理IT项目管理、采购与合同管理等功能模块。 使用该系统的国家以国外为主,比如 fofa 的查询结果:
一、境外厂商产品漏洞 1、Oracle MySQL Server拒绝服务漏洞(CNVD-2021-54386)
近日,ZOHO已发布安全公告,修复了ManageEngine ServiceDesk Plus存在跨站脚本和远程命令执行漏洞。建议受影响用户及时升级安全版本进行防护,并做好资产自查以及预防工作,以免遭受黑客攻击。
360漏洞云监测到安全研究人员近日公开了ManageEngine ServiceDesk Plus中的一个“从存储型跨站脚本到远程代码执行”的漏洞利用链的技术细节。
Fuxploider是一种开源渗透测试工具,可自动检测和利用文件上传表单缺陷的过程。该工具能够检测允许上传的文件类型,并能够检测哪种技术最适合在所需的Web服务器上上传Web Shell或任何恶意文件
文件上传前端JS 防护,通过抓包修改,或插件js禁用来绕过。后端黑名单上传陌生后缀 .php3 php5上传配置文件 .htaccess通过 双写 ,大小写,基于windows 特性
此时通过对Content-Type进行修改,可能会绕过waf。其他的http头添加删除等也是类似。检测到上传jsp文件,任意内容都会被拦截。先来fuzz一波能利用的后缀名,这里可以包括中间件的一些配置文件。希望不大,一点都不出意外,全部被拦截了。因为最终还是需要免杀马的,jsp免杀又不会,先不考虑这个,先考虑把waf绕过。fuzz本来就是一个天马行空的过程,好了,继续来看。
文件上传数据包解析 文件上传实质上还是客户端的POST请求,消息主体是一些上传信息。前端上传页面需要指定 enctype为multipart/from-data才能正常上传文件。 一个正常的文件上传数据包大致如下:
VSole
网络安全专家