CVE-2021-40539-Zoho ManageEngine ADSelfService Plus如何从bypass到RCE
目录
1.漏洞信息
2.调试配置
3.Restful API认证绕过
4.任意文件上传
5.命令注入
6.后记
7.参考
有需要了解更多漏洞情报小伙伴,请关注微信公众号:且听安全。聪者听于无形,明者见于未形;专注网络安全,关注漏洞态势;拒绝重复搬运,只做精品原创。
1.漏洞信息
2021年9月,Zoho官网发布了CVE-2021-40539漏洞补丁:CVE-2021-40539。从描述来看,CVE-2021-40539是一个认证绕过漏洞,影响版本包括`ADSelfService Plus builds up to 6113`,漏洞在`ADSelfService Plus build 6114`版本中完成了修复。漏洞脆弱点位于Restful API接口中,攻击者可以构造特殊的URL请求,绕过认证后实现RCE,官方给出了漏洞利用的示意图:
2.调试配置
下载6113版本进行安装。安装完毕后运行自启动命令如下:
"C:\ManageEngine\ADSelfService Plus\bin\Wrapper.exe" -c "C:\ManageEngine\ADSelfService Plus\bin\\..\conf\wrapper.conf"
修改`wrapper.conf`文件,加入远程调试信息:
-Xrunjdwp:transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=n
重新启动成功打开远程调试端口:
3.Restful API认证绕过
查看`web.xml`,Restful API接口对应servlet为`action`:
URL以`/RestAPI/*`开头,查看`action`定义:
Restful API接口采用struts架构生成,访问接口的定义位于`*.xml`配置文件中。
`web.xml`定义了一个名为`ADSFilter`的全局过滤器:
`com.manageengine.ads.fw.filter.ADSFilter#doFilter`
第65行首先判断如果是Restful API访问,尝试提取认证信息,然后调用`doSubFilters`:
经过一系列判断,进入第136行,对Restful API访问进行检查:
调用`isRestAPIRequest`函数判断是否为Restful API访问,如果为`true`,将调用`RestAPIFilter.doAction`进行认证信息验证等处理,看下`isRestAPIRequest`函数定义:
通过`request.getRequestURI`提取URL信息,这里通过正则表达式`/RestAPI/.*`来判断是否为Restful API访问,因为Zoho ManageEngine ADSelfService Plus使用的是Tomcat容器,下面的两个请求等价:
/RestAPI/LicenseMgr
/./RestAPI/LicenseMgr
但是第二个请求部匹配正则表达式,存在绕过的可能性。`/RestAPI/LicenseMgr`对应的处理类为`LicenseMgr`,打下断点:
- 请求一:`/RestAPI/LicenseMgr`:
可以发现在`com.manageengine.ads.fw.filter.ADSFilter#doSubFilters`没有通过权限检查,返回`false`。
- 请求二:`/./RestAPI/LicenseMgr`
绕过了认证检查。
下面继续分析在绕过认证之后,是否存在进一步利用的可能性。
4.任意文件上传
前面提到了Restful API的接口定义位于`*.xml`文件之中,在`struts-config.xml`中找到`LogonCustomization`:
`com.adventnet.sym.adsm.common.webclient.admin.LogonCustomization`:
对参数进行一系列判断后,进入`sCAction.addSmartCardConfig`:
跟进`addSmartCardConfig`:
第94行调用`FileActionHandler.getFileFromRequest`提取`certFileJson`,进入函数:
其中参数`paramName`来源于请求提交的`CERTIFICATE_PATH`参数,实际上就是将上传的文件(来源于参数`CERTIFICATE_PATH`)进行保存。
构造一个文件上传的POST请求,根据前面的分析设置参数,最终请求如下:
文件上传至`\ManageEngine\ADSelfService Plus\bin`目录,尝试利用`../`进行穿越,但是`formFile.getFileName`只会提取文件名称,导致前面的`../`无效,无法进行穿越。
5.命令注入
现在可以实现未授权向`bin`目录写入任意文件,文件名称和文件内容完全可控,由于无法实现路径穿越,也就无法直接Getshell。进一步分析,在`struts-config.xml`中找到`ConnectionAction`:
`com.adventnet.sym.adsm.common.webclient.admin.ConnectionAction#openSSLTool`:
进入`SSLUtil.createCSR`:
实例化`JSONObject`对象`sslParams`,其中的参数全部来自于`request`,然后调用`createCSR`,跟进:
实例化字符串`keyCmd`,然后根据`JSONObject`的值完成字符串拼接,最后调用`runCommand`:
猜测可能会调用`runtime`执行命令,在`exec`处打下断点,构造请求进行测试:
确定调用了`Runtime.exec`来执行命令,参数为:
..\jre\bin\keytool.exe -J-Duser.language=en -genkey -alias tomcat -sigalg SHA256withRSA -keyalg RSA -keypass "null" -storePass "null" -dName "CN=null, OU= null, O=null, L=null, S=null, C=null" -keystore ..\jre\bin\SelfService.keystore
`keytool.exe`是Java提供的一个生成数字证书的工具:
其中参数`providerclass`和`providerpath`可以用于指定Java字节码class文件的名称和路径,当调用`keytool.exe`时,会自动执行对应Java代码。很自然可以想到结合上面的任意文件上传漏洞,上传一个恶意class文件到bin目录,然后通过构造POST参数实现RCE。
首先构造一个恶意类`evil.java`:
public class evil {public evil()throws Exception{Runtime.getRuntime().exec("calc");}
}
编译evil.class文件后,上传至bin目录:
利用接口`ConnectionAction`构造如下请求:
触发断点,实际执行的命令如下:
..\jre\bin\keytool.exe -J-Duser.language=en -genkey -alias tomcat -sigalg SHA256withRSA -keyalg RSA -keypass "null" -storePass "null" -keysize 123 -providerclass evil -providerpath "C:\ManageEngine\ADSelfService Plus\bin" -dName "CN=null, OU= null, O=null, L=null, S=null, C=null" -keystore ..\jre\bin\SelfService.keystore
成功实现RCE:
6.后记
CVE-2021-40539实现RCE的过程由3个漏洞组成,分别是Restful API认证绕过、任意文件上传以及命令拼接。在深入分析过程中,发现文件上传和命令执行还有其他的触发点,这里不过多赘述。此外,在`ADSelfService Plus build 6114`版本中,补丁更新的地方非常多,但对漏洞的修复并不完善,仍然可以被bypass,直到在更新的版本中,漏洞才得到较为完善的修复,有兴趣的小伙伴可以自行分析。
有需要了解更多漏洞情报小伙伴,请关注微信公众号:且听安全。聪者听于无形,明者见于未形;专注网络安全,关注漏洞态势;拒绝重复搬运,只做精品原创。
7.参考
CVE-2021-40539-Zoho ManageEngine ADSelfService Plus如何从bypass到RCE
CVE-2021-40539-Zoho ManageEngine ADSelfService Plus如何从bypass到RCE相关推荐
- FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)
聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...
- CISA提醒修复Zoho ManageEngine RCE漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 摘要 本周四,美国网络安全和基础设施安全局 (CISA) 提醒称,网络攻击活动正在利用最近修复的一个Zoho ManageEngine 漏洞 ( ...
- Black Hat USA 2021:通过无线基带-针对5G智能手机的RCE白皮书
Over The Air Baseband Exploit: Gaining Remote Code Execution on 5G Smartphones 通过无线基带针对5G智能手机的RCE白皮书 ...
- 学习笔记-B/S - Exploits
B/S - Exploits 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 大纲 各类论坛/CMS框架 AEM 74CMS dedeC ...
- 速修复!CISA警告称 Zoho 服务器0day已遭在野利用
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 美国网络安全和基础设施安全局 (CISA) 督促组织机构应用 Zoho ManageEngine 服务器的最新安全更新,修复已遭在野利用一周多的 ...
- Zoho:尽快修复已遭利用的 ManageEngine 严重漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 商业软件提供商 Zoho 督促客户尽快将 Desktop Central 和 Desktop Central MSP 更新至最新版本. Zoho ...
- 超8成项目存在高危开源漏洞 《2021中国软件供应链安全分析报告》发布
聚焦源代码安全,网罗国内外最新资讯! 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为 ...
- Zoho 修复Desktop Central 中的又一个严重漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 Zoho 修复了一个新的严重漏洞(CVE-2021-44757),它影响 Zoho Desktop Central 和 Desktop Cent ...
- 研究员拒绝提前通知,Zoho 匆忙修复一个严重的 0day
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 业务工具开发公司 Zoho 指出,已修复影响其 ManageEngine Desktop Central 产品的一个严重的0day. M ...
最新文章
- 20080826 - Delphi 2009 来了
- socket 2.草稿。
- 130701基础练习-first
- python函数代码_如何显示Python函数的代码?
- linux java 部署 生产环境
- 4am永远 鼠标按键设置_4AM碾压性夺冠创PCL历史!韦神赛后采访彰显霸气
- 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
- 用java编写录音机类_java实现录音机
- IMO船舶材料防火安全规范
- 学习总结-在Icepak模型中修改和增加零件
- 成年人夜生活的自救! 华熙LIVE·五棵松放大招
- 解决git克隆到本地的仓库文件夹不显示红色感叹号、绿色对号等图标的问题
- 华为路由器接口如何区分_华为路由器接口管理命令有哪些
- “拼多多和短视频极速版”,让我怎么吐槽你好呢!
- CSS 实现文字渐变色
- 《Unix编程艺术》重读笔记(三)
- Python ORM框架peewee
- Intel第十代CPU集成显卡不再支持 Legacy启动 (i5-10400...)
- python自动化ppt_python自动化办公手册之python操作PPT
- 详解UniSwap、无聊猿、PlatoFarm空投的逻辑
热门文章
- 【Codeforces 777 D Cloud of Hashtags】
- 逻辑斯蒂回归(logistic regression)原理小结
- 信号系统matlab实例3——卷积的matlab求解
- 备份 mysql数据
- 使用Julia运用JuMP和Clp求解Lp和ILP问题(分支定界法)
- NOIP 2018 滚粗记(bushi)
- 62套儿童行业响应式Html5儿童慈善机构网站模板儿童公益组织企业官网模板儿童慈善CSS模板下载婴儿树儿童健康食品整站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响
- 58同城和赶集网要合并了!
- 【数据结构】(森林)以孩子兄弟链表为存储结构,请设计递归算法求树的深度
- 新页微NY7503S无线充芯片10w