一背景介绍:
ManageEngine Applications Manager是一款用于应用性能监控及服务器性能监控的软件。它提供了监视和管理J2EE底层结构、J2EE应用的解决方案,它能监视Web服务器、数据库、应用服务器中的不同部件和这些部件所部署的系统,同时它还提供了开放标准(如SNMP、JMX),保护了投资也方便了集成.其管理功能覆盖了管理方案中最重要的方面,即监视应用服务器的底层结构及部署在其中的应用的故障(健壮性)和性能,并且,它还可以用于管理定制的应用和其他服务器.如:Oracle数据库服务器、电子邮件服务器、文件服务器、搜索引擎、认证服务器等.
1 受影响的系统版本:
ManageEngine Applications Manager 13.5
CVE: CVE-2018-7890
2 漏洞描述:
ManageEngine Applications Manager 13.5版本存在远程代码执行漏洞。testCredential.do是一个公开访问的端点,该端点会接受多个用户输入,并通过访问指定的系统来验证用户提供的凭证,然后会调用多个内部类,最后执行一个PowerShell脚本。但是,若指定的系统是OfficeSharePointServer,则不会验证该脚本收到的用户名及密码参数,导致命令注入。
二 漏洞细节:
漏洞细节:
testCredentialForConfMonitors 是一个可以公开访问的类。其中,monType可以从外部传入控制,该变量代表指定的系统。当monType为OfficeSharePointServer时,newMonConf.preConfMap.containsKey(monType),返回值为false,程序运行到else中。
然后,1调用NewMonitorConf类的方法getClass()。
该方法对传入的montype进行了数据库查询,最终返回了查询后的结果。接着,2将从返回的结果中的Dcclass字段的值赋值给了dcclass变量。返回的这个dcclass值是OfficeSharePointServer相关类的路径。
接着,3使用class.forName来返回这个类(SharePointServerDataCollector),并实例化为对象。最后,4用实例化后的admc对象来调用类中的CheckAuthentication方法。
然后,继续看CheckAuthenticationfang方法
这里需要控制跳转到else里,同时isPowershellEnabled可控,传入Powershell= true
在这里,变量host,username和password都是直接从外部传入赋值,可控。并且,这三个变量没有经过任何过滤就直接传入到了powershell命令中 ,然后通过Runtime.getRuntime().exec() 执行任意命令。
三 漏洞证明:
payload:
浏览器运行:
burpsuit:
返回以上错误信息代表存在漏洞。
四 Metasploit利用
反弹Metasploit shell
获取系统当前用户信息
获取系统信息
其中,exp地址为:
五 漏洞影响
从上图得知,Applications Manager处于公网的数量并不多,这是因为该软件多数用在内网环境下,直接被利用的范围较小。但是,由于该漏洞有固定的请求地址,当攻击者入侵进入企业内部网络后,可通过扫描的方式探测和发现,从而进行利用,控制存在漏洞的服务器。
六 防御措施:
目前官方已修复该漏洞,可从官网下载最新版本。
Windows平台下载安装Manage engine 的过程:
1) 官网提供历史版本下载
https://www.manageengine.com/products/applications_manager/support.html
可以找到build为13450的版本, 该版本存在漏洞
https://archives.manageengine.com/applications_manager/13450/
官方公告在13640版本上修复了该远程执行漏洞
2) 安装过程
选择HTTP和SSL的端口
填写注册信息
3) Web管理服务启动
Web服务可以正常进行访问了