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

渗透技巧 2年前 (2021) admin
1,036 0 0




漏洞信息


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


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


包括:

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容器进行构建,查看服务配置:


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


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


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


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


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


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




数据库分析


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

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

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


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


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


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




合法API URL分析


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


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


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


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


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


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

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

在`ADSFilter#doFilter`打下断点:


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


进入`doSubFilters`:


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


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


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


然后调用`RestAPIFilter.doAction`:


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


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


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


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


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


一共有607个合法URL规则:


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


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


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


/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`:

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




文件上传


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

/RestAPI/WC/NotificationTemplate/attachFiles

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


定位函数`attachFiles`:


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


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


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


直接GetShell:


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




修复方式


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


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


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


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


将文件类型限制为:


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`:


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


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


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


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


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



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。






点关注,不迷路!

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

原文始发于微信公众号(且听安全):【最新漏洞预警】Zoho ManageEngine Admanager Plus 任意文件上传漏洞可GetShell

版权声明:admin 发表于 2021年12月5日 下午10:36。
转载请注明:【最新漏洞预警】Zoho ManageEngine Admanager Plus 任意文件上传漏洞可GetShell | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...