Springboot之Actuator信息泄露
Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等
主要是一些默认配置的暴露
在Spring Boot应用中,要实现监控的功能,只需要依赖组件spring-boot-starter-actuator。它提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能。当你的spring boot应用中引入依赖之后,将自动拥有审计、健康检查、Metrics监控功能
原生端点如下:
请求方法
端点
描述
GET
/actuator
查看有哪些 Actuator端点是开放的。
GET
/actuator/auditevent
auditevents端点提供有关应用程序审计事件的信息。
GET
/actuator/beans
beans端点提供有关应用程序 bean 的信息。
GET
/actuator/conditions
conditions端点提供有关配置和自动配置类条件评估的信息。
GET
/actuator/configprops
configprops端点提供有关应用程序@ConfigurationPropertiesbean的信息。
GET
/actuator/env
查看全部环境属性,可以看到 SpringBoot 载入哪些 properties,以及 properties 的值(会自动用*替换 key、password、secret 等关键字的 properties 的值)。
GET
/actuator/flyway
flyway端点提供有关 Flyway 执行的数据库迁移的信息。
GET
/actuator/health
端点提供有关应用程序运行状况的health详细信息。
GET
/actuator/heapdump
heapdump端点提供来自应用程序 JVM 的堆转储。(通过分析查看/env端点被*号替换到数据的具体值。)
GET
/actuator/httptrace
httptrace端点提供有关 HTTP 请求-响应交换的信息。(包括用户HTTP请求的Cookie数据,会造成Cookie泄露等)。
请求方法
端点
描述
GET
/actuator
查看有哪些 Actuator端点是开放的。
GET
/actuator/auditevent
auditevents端点提供有关应用程序审计事件的信息。
GET
/actuator/beans
beans端点提供有关应用程序 bean 的信息。
GET
/actuator/conditions
conditions端点提供有关配置和自动配置类条件评估的信息。
GET
/actuator/configprops
configprops端点提供有关应用程序@ConfigurationPropertiesbean的信息。
GET
/actuator/env
查看全部环境属性,可以看到 SpringBoot 载入哪些 properties,以及 properties 的值(会自动用*替换 key、password、secret 等关键字的 properties 的值)。
GET
/actuator/flyway
flyway端点提供有关 Flyway 执行的数据库迁移的信息。
GET
/actuator/health
端点提供有关应用程序运行状况的health详细信息。
GET
/actuator/heapdump
heapdump端点提供来自应用程序 JVM 的堆转储。(通过分析查看/env端点被*号替换到数据的具体值。)
GET
/actuator/httptrace
httptrace端点提供有关 HTTP 请求-响应交换的信息。(包括用户HTTP请求的Cookie数据,会造成Cookie泄露等)。
GET
/actuator/info
info端点提供有关应用程序的一般信息。
GET
/actuator/integrationgraph
integrationgraph端点公开了一个包含所有 Spring Integration 组件的图。
GET
/actuator/liquibase
liquibase端点提供有关 Liquibase 应用的数据库更改集的信息。
GET
/actuator/logfile
logfile端点提供对应用程序日志文件内容的访问。
GET
/actuator/loggers
loggers端点提供对应用程序记录器及其级别配置的访问。
GET
/actuator/mappings
mappings端点提供有关应用程序请求映射的信息。
GET
/actuator/metrics
metrics端点提供对应用程序指标的访问。
GET
/actuator/prometheus
端点以prometheusPrometheus 服务器抓取所需的格式提供 Spring Boot 应用程序的指标。
GET
/actuator/quartz
quartz端点提供有关由 Quartz 调度程序管理的作业和触发器的信息。
GET
/actuator/scheduledtasks
scheduledtasks端点提供有关应用程序计划任务的信息。
GET
/actuator/sessions
sessions端点提供有关由 Spring Session 管理的应用程序 HTTP 会话的信息。
GET
/actuator/startup
startup端点提供有关应用程序启动顺序的信息。
POST
/actuator/shutdown
shutdown端点用于关闭应用程序。
访问原生端点,获取基本配置信息
修复方法:
禁用heapdump端点,可以在配置文件中加入如下配置:
management.endpoint.heapdump.enabled=false
一是直接移除jolokia依赖,二是禁用jolokia端点
删除 spring-cloud-starter-netflix-eureka-client
依赖或者禁止POST请求访问env端点。
spring boot框架特征,绿树叶及出现4XX、5XX报错时,会出现带有Whitelabel Error Page字样的页面等
路由情况:
有些程序员会自定义 /manage 、 /management 、项目 App 相关名称为 spring 根路径
Spring Boot Actuator 1.x 版本默认内置路由的起始路径为 / ,2.x 版本则统一以 /actuator 为起始路径
Spring Boot Actuator 默认的内置路由名字,如 /env 有时候也会被程序员修改,比如修改成 /appenv
直接访问以下两个 swagger 相关路由,验证漏洞是否存在
/v2/api-docs
/swagger-ui.html
其他一些可能会遇到的 swagger、swagger codegen、swagger dubbo 等相关接口路由
/swagger
/api-docs
/api.html
/swagger-ui
/swagger/codes
/api/index.html
/api/v2/api-docs
/v2/swagger.json
/swagger-ui/html
/distv2/index.html
/swagger/index.html
/sw/swagger-ui.html
/api/swagger-ui.html
/static/swagger.json
/user/swagger-ui.html
/swagger-ui/index.html
/swagger-dubbo/api-docs
/template/swagger-ui.html
/swagger/static/index.html
/dubbo-provider/distv2/index.html
/spring-security-rest/api/swagger-ui.html
/spring-security-oauth-resource/swagger-ui.html
其中对寻找漏洞比较重要接口的有:
01./env 、 /actuator/env
GET 请求 /env 会直接泄露环境变量、内网地址、配置中的用户名等信息;当程序员的属性名命名不规范,例如 password 写成 psasword、pwd 时,会泄露密码明文;
同时有一定概率可以通过 POST 请求 /env 接口设置一些属性,间接触发相关 RCE 漏洞;同时有概率获得星号遮掩的密码、密钥等重要隐私信息的明文。
02./refresh 、 /actuator/refresh POST 请求 /env 接口设置属性后,可同时配合 POST 请求 /refresh 接口刷新属性变量来触发相 关 RCE 漏洞。
03./restart 、 /actuator/restart
暴露出此接口的情况较少;可以配合 POST请求 /env 接口设置属性后,再 POST 请 求 /restart 接口重启应用来触发相关 RCE 漏洞
04./jolokia 、 /actuator/jolokia
可以通过 /jolokia/list 接口寻找可以利用的 MBean,间接触发相关 RCE 漏洞、获得星号遮掩的重要隐私信息的明文等
05./trace 、 /actuator/httptrace
一些 http 请求包访问跟踪信息,有可能在其中发现内网应用系统的一些请求信息详情;以及有效 用户或管理员的 cookie、jwt token 等信息
一、Jolokia XXE任意文件读取
查看jolokia/list中存在的Mbeans,是否存在logback 库提供的reloadByURL方法
靶机上创建文件:logback.xml和ian.dtd
在文件目录下,使用python3开启web服务 python -m http.server 调用目标服务器访问
远程访问logback.xml文件
攻击机发起请求:
收到请求
成功利用xxe读取到etc/passwd文件内容
二、Spring Boot Actuators 反序列化
序列化(Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
反序列化:从存储区中读取该数据,并将其还原为对象的过程,成为反序列化。
三、远程代码执行
1、SpringBoot SpEL表达式注入漏洞(https://www.cnblogs.com/litlife/p/10183137.html)
这是2016年爆出的一个洞,利用条件是使用了springboot的默认错误页(Whitelabel Error Page),存在漏洞的页面在:/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration.java
2、mysql jdbc deserialization RCE
利用条件:
可以 POST 请求目标网站的 /env 接口设置属性
可以 POST 请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starter-actuator 依赖)
目标环境中存在 mysql-connector-java 依赖
目标可以请求攻击者的服务器(请求可出外网)
原理:
1、spring.datasource.url 属性被设置为外部恶意 mysql jdbc url 地址
2、refresh 刷新后设置了一个新的 spring.datasource.url 属性值
3、当网站进行数据库查询等操作时,会尝试使用恶意 mysql jdbc url 建立新的数据库连接
4、然后恶意 mysql server 就会在建立连接的合适阶段返回反序列化 payload 数据
5、目标依赖的 mysql-connector-java 就会反序列化设置好的 gadget,造成 RCE 漏洞
Apache Shiro
Apache Shiro是一种功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理,可用于保护任何应用程序的安全。
Shiro提供了应用程序安全性API来执行以下方面:
1)身份验证:证明用户身份,通常称为用户"登录";
2)授权:访问控制;
3)密码术:保护或隐藏数据以防窥视;
4)会话管理:每个用户的时间敏感状态。
上述四个方面也被称为应用程序安全性的四个基石。
在访问及登录时抓包,如果响应头 set-cookie 中显示 rememberMe=deleteMe ,说明使用了 Shiro 组件