引用参考【1】关于jmx 的攻击总结
对于JMX的利用主要利用的是本地存在的Gadget,如果本地不存在Gadget的话就无法利用成功。除非满足JMX MLet的利用条件,通过加载codebase上的Jar文件来执行任意代码。
除此之外,由于本身JMX用的RMI那一套东西,所以如果在合适的JDK版本下,我们可以直接攻击RMI,不过前提仍然是本地存在相关的利用链。
以上是针对JMX的通用攻击手法,存在特定MBean的前提下,还有其他的攻击方式
Tomcat
参考【3】,提出了以下攻击方式
- Users->User->”manager”->UserDatabase->Attributes 获取manager账号密码
- Catalina->Valve->localhost->AccessLogValve->Operations 设置log文件,些jsp shell到webapp目录
- Catalina->Manager->[ApplicationName]->Operations->listSessionIds() 获取session
参考【2】,提出了以下攻击方式
- Catalina->Users->createRole/createUser/addRole 创建admin账号,通过war实现shell
参考【4】,提出了以下攻击方式
- Tomcat:type=MBeanFactory createJNDIRealm 存在rmi
JBoss
参考【2】,提出了以下攻击方式
- jboss.system:service=MainDeployer,JBoss war包部署
Spring Boot
Spring-Boot-Actuator
参考【4】,提出了以下攻击方式
- Tomcat:type=MBeanFactory createJNDIRealm 存在rmi
Jolokia
Jolokia 是一个基于HTTP JSON格式的访问JMX MBean的工具。例如在Spring-Boot-Actuator中,未直接开放RMI服务,而是通过Jolokia方式提供JMX MBean的远程监控功能。
Jolokia 有两种模式
Proxy Mode,有jndi注入,可参考【2】
Agent Mode,安全问题主要发生在MBean上,各种web server危险的MBean,以及jolokia自身暴露的MBean
其他
- 通用com.sun.management:type=HotSpotDiagnostic
总结
攻击手法 | 攻击条件 |
---|---|
MBean 参数反序列化 | 1. 需要存在Gadget 2. 如果有鉴权,需要read权限 |
MLet | 1. 需要无鉴权 2. 目标机器可连外网 |
RMI本身 | 1. JDK版本限制 2. 需要存在Gadget |
特定MBean | 1. 存在特殊MBean 2. 特定MBean攻击的限制条件 |