漏洞描述
CVE-2021-44515是 ManageEngine Desktop Central 中的身份验证绕过漏洞,可能导致远程代码执行。为了利用,攻击者会向易受攻击的端点发送特制的请求
调试环境
下载地址:https://archives3.manageengine.com/desktop-central/101213702/
windows+ Desktop Central 10.1.2137.2
影响版本
version<10.1.2137.3
version<10.1.2127.18
漏洞分析
Filter限制绕过
/mdm/mdmLogUploader
存在未授权上传,但限制了路径穿越符号../
,匹配符合文件名logger.txt|logger.zip|mdmlogs.zip|managedprofile_mdmlogs.zip
,该限制是在secutiyFilter
逻辑中执行
matchPattern:1751, SecurityUtil (com.adventnet.iam.security)
checkForAllowedValueRegex:1463, ParameterRule (com.adventnet.iam.security)
validateParamValue:1397, ParameterRule (com.adventnet.iam.security)
validateParamValue:1349, ParameterRule (com.adventnet.iam.security)
validateParam:1134, ParameterRule (com.adventnet.iam.security)
validate:962, ParameterRule (com.adventnet.iam.security)
validateURLRule:517, URLRule (com.adventnet.iam.security)
doFilter:306, SecurityFilter (com.adventnet.iam.security)
doFilter:138, XSSFilter (com.me.dconpremise.webclient.filter)
.............
反复看了securityFilter安全操作,不能绕过。思路转到XSSFilter逻辑执行能不能跳过Securityilter.doFilter
方法执行且正常执行文件上传.
XSSFilter.doFilter
中只要路由包含/mdm/
条件判断进入else中执行SecurityFilter.doFilter方法
if (!requestURI.contains("/emsapi") && !requestURI.contains("/dcapi") && !requestURI.contains("/mdm/") && !requestURI.contains("/api/v1/mdm") && !requestURI.endsWith(".ec") && !requestURI.endsWith(".pdf") && !requestURI.endsWith(".csv") && !requestURI.endsWith(".xls") && !requestURI.endsWith(".xlsx") && !requestURI.endsWith(".ecu") && !requestURI.contains("/emsapi/osdeployer") && securityFilterConfig.getURLRule(requestURI) == null) {
...........
}else{
super.doFilter(servletrequest, servletresponse, filterchain);
}
继续看XSSFilter.doFilter
中对requestURI
处理流程中当包含.ma
时会进行截断即/mdm/mdmLogUploader;.ma
-> /mdmLogUploader;.ma
,这样就能成功满足IF条件判断,不执行SecurityFilter.doFilter
方法.
if (requestURI.contains(".ma")) {
position = requestURI.indexOf(".");
position = requestURI.lastIndexOf("/");
if (position > position) {
requestURI = requestURI.substring(position, position) + ".ma";
}
}
Zip文件利用
服务启动流程中run.jar 执行
runStandAlone() -> LoadJars() -> getAllJarURLs() -> getNewServerClassInstance()
/mdm/mdmLogUploader
能够上传zip文件,10.1.2137.2
版本中在启动过程中会执行bin/run.jar
,Starte.getAllJarURLs()->Starter.addJars()扫描classPath.conf中的lib路径jar包或
zip`包.
在Starter.LoadJars
方法中会将当前目录的第一个jar作为classLoader
进行,所以可以上传名aaa.zip
顶替位置.
加载进classloader后,需要考虑如何进行利用getshell,启动流程中会执行Starter.getNewServerClassInstance
方法. 使用当前classloader实例化com.zoho.mickey.startup.MEServer
. 可以重构该类,在static中插入恶意代码.
漏洞复现
构造com.zoho.mickey.startup.MEServer
可以复制com.zoho.mickey.startup.MEServer
进行重构,可能需要修改一些语法错误,将Desktop Central的jar包使用idea导入。利用idea进行编译,使用jar进行打包为aaa.zip.
jar -cvf aaa.zip com/zoho/mickey/startup/MEServer.class
上传aaa.zip
重启服务
重启服务后弹出计算器
补丁修复
删除.zip
后缀
结语
可能有不重启就能触发的利用,还未研究