jolokia架构 虽然jolokia是为了满足JSR-160的要求,但是他和JSR-160连接器有巨大的差异。 Jolokia植入模式(Agent mode) ? 上如展示了Jolokia 植入模式的体系结构,说明了与之有关的运行环境。 Jolokia植入模式是在本地基于http协议提供了一个使用Json作为数据格式的外部接口,此时Jolokia会桥接到本地的JMX MBeans接口。 Jolokia使用http服务扩展了JSR-160,因此需要针对Jolokia的运行进行一些额外的处理。 一个jolokia客户端发送常规的请求到jolokia代理服务,这个请求包含了额外的数据用于标记要查询的目标。所有的路由信息包含在请求信息中,使得代理服务无需特别的配置即可工作。
0x00 - About Jolokia Jolokia 是一个通过 HTTP 的 JMX 连接器,提供了类 RESTful 的操作方式,可以通过 POST JSON 的方式访问和修改 JMX 属性、执行 0x01 - Jolokia Security Issues 1. JNDI Injection Jolokia 支持一个叫做代理模式(Proxy Mode)的东西,是为了解决不能将 Jolokia Agent 部署在目标平台上的问题。具体架构如下: ? 0x02 - Tomcat with Jolokia 1. DoS 部署了 Jolokia 后,可以访问 /jolokia/list 查看可用的 MBean,通过翻阅可以发现 Tomcat + Jolokia 的情况下存在一些敏感操作,比如关闭服务: ?
-- jolokia jmx监控 --> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId > <version>1.5.0</version> </dependency> 之后启动springboot项目,可以看到jolokia的加载日志: ? 另外,如果所在项目使用了shiro或者其他框架进行了权限验证,那么需要对jolokia的API取消权限拦截。 jolokia的相关API请参见 : https://jolokia.org/reference/html/protocol.html 二 beats配置 elk采用beat收集数据,对于jolokia 采集了GC、Memory、Thread等三类数据,如果需要更多的数据,可以查询jolokia的相关文档,采集所需要的数据。
原文:Near real-time monitoring charts with Spring Boot Actuator, Jolokia and Grafana Spring Boot Actuator 另外,通过使用 Jolokia,MBeans以RESTful HTTP端点的方式暴露,/jolokia。 所以,相同的信息可以通过两个端点来获取:JMX MBean Metrics和Rest HTTP Jolokia端点。 Jolokia: Spring Boot 认可使用Jolokia来通过HTTP导出export JMX数据。你只需要在工程类路径中增加一些依赖项,一切都是开箱即用的。不需要任何额外的实现。 Telegraf: Telegraf支持通过整合Jolokia来集成JMX数据的收集。它有一个预制的输入插件,它是开箱即用的。不需要任何额外的实现。只需要做一些配置即可。
Jolokia的特点? 方法二:除了放到 Servlet 容器之外,Jolokia 也可以定义特殊的 Agent,比如实现 OSGi 或者内置 Jetty 服务器 方法三:Jolokia 也可以集成到 Web 应用中, jolokia-core jolokia-core 集成示例 SpringMVC 主要步骤: pom.xml 中增加 jolokia 依赖。 在 web.xml 中声明 jolokia servlet 启动和适配。 -- jolokia 核心组件 --> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core [[inputs.jolokia2_agent]] urls = ["http://agent:8080/jolokia"] [[inputs.jolokia2_agent.metric]]
for JMX Jolokia是一个JMX-HTTP桥,它提供了一种访问JMX beans的替代方法。 要使用Jolokia,请在 org.jolokia:jolokia-core 中包含依赖项。 例 如,使用Maven,您将添加以下依赖项: <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId > </dependency> 然后,可以通过向 management.endpoints.web.exposure.include 属性添加 jolokia 或 * 来公开Jolokia端点。 然后,您可以在管理HTTP服 务器上使用 /actuator/jolokia 来访问它。
-- JMX monitor --> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId 在类路径中存在的Jolokia库会触发Spring Boot的JolokiaAutoConfiguration,这个自动配置类会自动配置可以接受/jolokia请求的JolokiaMvcEndPoint ;也可以通过在application.properties中设置jolokia.config.系列的属性配置不同的Jolokia配置。 完整的Jolokia配置地址在:https://jolokia.org/reference/html/agents.html#agent-war-init-params。 如果你希望定制自己的Jolokia配置,则可以通过设置endpoints.jolokia.enabled=false*让Spring Boot应用忽略自身提供的配置。
55.3.1自定义Jolokia Jolokia有许多设置,您可以通过设置servlet参数来进行传统配置。使用Spring Boot,您可以使用 application.properties 文件。 为此,请 在参数前加 management.endpoint.jolokia.config. ,如以下示例所示: management.endpoint.jolokia.config.debug=true 55.3.2禁用Jolokia 如果您使用Jolokia但不希望Spring Boot配置它 ,请将 management.endpoint.jolokia.enabled 属性设置为 false ,如下所示: management.endpoint.jolokia.enabled=false
spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> <dependency spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> 配置 spring: boot:
官网介绍了2个开源工具来实现呈现报表的功能——Jolokia和Hawtio。 Jolokia代理 Jolokia 是按照JSR-160的要求实现JMX-HTTP桥接的工具。 按照官网的说法,有非常多的平台使用了Jolokia,并且Jolokia在处理远程连接时提供了更安全的支持。 下载完成后,需要嵌入到我们自己的应用中,像下面这样在java启动命令中增加以下参数来植入Jolokia代理: -javaagent:%jolokia_home%/jolokia-jvm-<version 来获取Jolokia暴露的接口数据。 、Path选择Jolokia。
/jolokia 通过 /jolokia/list 接口寻找可以利用的 MBean,触发相关 RCE 漏洞; /trace 一些 http 请求包访问跟踪信息,有可能发现有效的 cookie 或 /actuator/jolokia 接口 目标使用了 jolokia-core 依赖(版本要求暂未知) 利用方法: 步骤一:找到想要获取的属性名 GET 请求目标网站的 /env 或 /actuator logback JNDI RCE 利用条件: 目标网站存在 /jolokia 或 /actuator/jolokia 接口 目标使用了 jolokia-core 依赖(版本要求暂未知)并且环境中存在相关 漏洞环境: repository/springboot-jolokia-logback-rce 正常访问: http://127.0.0.1:9094/env 0x05:jolokia Realm JNDI RCE 利用条件: 目标网站存在 /jolokia 或 /actuator/jolokia 接口 目标使用了 jolokia-core 依赖(版本要求暂未知)并且环境中存在相关 MBean 目标可以请求攻击者的服务器
通过Jolokia公开JMX监控信息:默认情况下,Java S2I镜像将启用Jolokia,该Jolokia通过HTTP公开JMX统计信息和操作。这样可以实现更详细的应用程序监控功能。 默认情况下启用此功能,但可以通过将环境变量AB_JOLOKIA_OFF设置为true来禁用此功能。 [1] 请注意,由于WildFly Swarm和Jolokia的已知问题,您还应该单击Show advanced…,然后将一个环境变量添加到Deployment Configuration中,名称为 AB_JOLOKIA_OFF且值为true [2] Eclipse Vert.x的示例项目生成了两个JAR文件,因此我们需要通过单击Show advanced…来告知要使用哪个Java S2I镜像
这里我们重点关注env、jolokia、heapdump、trace四个端点即可。 前面FUZZ我们得知目标开放了/jolokia端点,我们可以据此进行读取脱敏数据或GETSHELL获取权限。 可能小伙伴会问,如果恰好没有开放/jolokia这个端点呢?确实在很多情况下,并不一定都会开放这个端点。 漏洞利用 那么上面说到通过/jolokia端点可以进行RCE,现在我们转变战略,先拿SHELL再进行审计。 https://github.com/LandGrey/SpringBootVulExploit 利用条件: •目标网站存在 /jolokia 或 /actuator/jolokia 接口 •目标使用了
如前所述,需要 Spring Boot Actuator,Jolokia 库用于更高级的功能,如 JMX MBeans 和日志级别管理。 <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> 要显示下图中可见的信息,例如版本、下面的 Git 提交详细信息,我们需要为每个应用程序添加两个 通过添加 Jolokia 依赖项,我们能够查看和更改日志记录部分中每个类别的日志级别。 我们可以为每个微服务实例收集配置详细信息。
springframework/boot/logging/logback/base.xml"/> <jmxConfigurator/> 然后加入依赖: <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> 然后就可以了: ? JMX-bean管理 加入这个依赖就可以了: <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId endpint: # tag::configuration-ui-hystrix[] spring.boot.admin.routes.endpoints: env,metrics,trace,dump,jolokia version> </dependency> 2、添加activiti endpoint: spring.boot.admin.routes.endpoints: env,metrics,trace,dump,jolokia
配置文件中添加endpoints节点 spring: boot: admin: routes: endpoints: env,metrics,trace,dump,jolokia clusters: muse location: Muse-Turbine routes: endpoints: env,metrics,trace,dump,jolokia 四、在spring boot admin上展示客户端的JMX信息 1、在客户端的pom.xml引入Jolokia包即可 <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> 2、效果图 ? clusters: muse location: Muse-Turbine routes: endpoints: env,metrics,trace,dump,jolokia
这里我们重点关注env、jolokia、heapdump、trace四个端点即可。 前面FUZZ我们得知目标开放了/jolokia端点,我们可以据此进行读取脱敏数据或GETSHELL获取权限。 可能小伙伴会问,如果恰好没有开放/jolokia这个端点呢?确实在很多情况下,并不一定都会开放这个端点。 漏洞利用 那么上面说到通过/jolokia端点可以进行RCE,现在我们转变战略,先拿SHELL再进行审计。 https://github.com/LandGrey/SpringBootVulExploit 利用条件: •目标网站存在 /jolokia 或 /actuator/jolokia 接口 •目标使用了
这里我们重点关注env、jolokia、heapdump、trace四个端点即可。 前面FUZZ我们得知目标开放了/jolokia端点,我们可以据此进行读取脱敏数据或GETSHELL获取权限。 可能小伙伴会问,如果恰好没有开放/jolokia这个端点呢?确实在很多情况下,并不一定都会开放这个端点。 漏洞利用 那么上面说到通过/jolokia端点可以进行RCE,现在我们转变战略,先拿SHELL再进行审计。 https://github.com/LandGrey/SpringBootVulExploit 利用条件: •目标网站存在 /jolokia 或 /actuator/jolokia 接口 •目标使用了
endpoints.trace.id=trace endpoints.trace.sensitive=true endpoints.trace.enabled=true # MVC ONLY ENDPOINTS endpoints.jolokia.path =jolokia endpoints.jolokia.sensitive=true endpoints.jolokia.enabled=true # when using Jolokia endpoints.error.path org.springboot' endpoints.jmx.unique-names=false endpoints.jmx.enabled=true endpoints.jmx.staticNames= # JOLOKIA (JolokiaProperties) jolokia.config.*= # See Jolokia manual # REMOTE SHELL shell.auth=simple # jaas,
spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> <dependency spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.jolokia </groupId> <artifactId>jolokia-core</artifactId> </dependency> 2、添加yml配置 spring: