漏洞描述
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后缀

结语
可能有不重启就能触发的利用,还未研究
转载
分享
没有评论