spring boot相关漏洞之零散笔记

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

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值