相关推荐recommended
spring boot相关漏洞之零散笔记
作者:mmseoamin日期:2024-04-27

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 组件