IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【web安全】Spring boot heapdump获取敏感信息 -> 正文阅读

[Java知识库]【web安全】Spring boot heapdump获取敏感信息

一、概述

微服务是目前较为热门的技术,Spring boot 是 Spring 的一套快速配置脚手架,可以基于Spring boot 快速开发单个微服务,微服务的特点决定了功能模块分布式部署,在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递。

? 多个微服务下,微服务的监控显得尤为重要。Actuator组件为Spring Boot提供对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信以及Web请求的详细信息等。

? 如果Actuator使用不当或者一些不经意的疏忽,可能造成信息泄露等严重的安全隐患。/heapdump作为Actuator组件最为危险的Web接口,如Actuator配置不当,攻击者可无鉴权获取heapdump堆转储文件,分析heapdump堆转储文件进一步获取敏感信息。

? Actuator 用来对应用系统进行自省和监控的功能模块,其提供的执行器端点分为两类:

? 1.原生端点

? 2.用户自定义扩展端点

原生端点主要有:

HTTP 方法路径描述
GET/dump获取当前应用的所有线程dump情况。当出现内存占用过高等情况下,可以帮助分析线程的使用情况,帮助定位问题。
GET/heapdump堆转储文件
GET/env获取全部环境属性
GET/env/{name}根据名称获取特定的环境属性值
GET/autoconfig提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
GET/configprops描述配置属性(包含默认值)如何注入 Bean
GET/beans描述应用程序上下文里全部的 Bean,以及它们的关系
GET/health报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供
GET/info获取应用程序的定制信息,这些信息由 info 打头的属性提供
GET/mappings描述全部的 URI 路径,以及它们和控制器(包含 Actuator 端点)的映射关系
GET/metrics报告各种应用程序度量信息,比如内存用量和 HTTP 请求计数
GET/metrics/{name}报告指定名称的应用程序度量值
POST/shutdown关闭应用程序,要求 endpoints.shutdown.enabled 设置为 true(默认为 false)
GET/trace提供基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等)

? 搭建漏洞复现环境:

二、Actuator配置不当

【→所有资源关注我,私信回复“资料”获取←】
1、网络安全学习路线
2、电子书籍(白帽子)
3、安全大厂内部视频
4、100份src文档
5、常见安全面试题
6、ctf大赛经典题目解析
7、全套工具包
8、应急响应笔记

/heapdump作为Actuator组件最为危险的Web接口之一,如Actuator配置不当,攻击者可无鉴权获取heapdump堆转储文件,分析heapdump堆转储文件进一步获取敏感信息。 其中 /dump 可获取线程活动的快照, /heapdump 可获取堆转储文件。

? 堆转储文件,是Java进程在某个时间点上的内存快照。HeapDump记录有JVM中堆内存运行的情况,含Java对象、类以及线程栈以及本地变量等信息。

? 通过访问/dump 路径,返回线程活动的快照,可看到Springboot线程活动中存在RMI 监听。

访问/dump 路径,效果如下图所示:

通过访问/heapdump 路径,返回 hprof 堆转储文件压缩包。在JVisualVM 打开该堆转储文件.hprof ,将泄露站点内存信息,比如后台用户的账号密码。

访问/heapdump 路径,效果如下图所示:

三、识别版本

Springboot heapdump端点存在版本差异

? Spring boot 1.x版本,默认端点为/heapdump,下载的heapdump文件包含时间以及后缀hprof。

? Spring boot 2.x版本,默认端点为/Actuator/heapdump,需要将下载的heapdump文件加上.hprof后缀。

四、工具选择

分析堆转储文件工具有几个选择

? JVisualVM:JDK自带工具,供开发者用于监视,故障排除。

Eclipse MAT:Eclipse提供的一款Heap Dump分析工具,如使用Eclipse-UI内存崩溃,可使用MAT脚本解析大容量的heap dump。


IBM Heap Analyzer:IBM公司一款分析Heap Dump信息的工具,有效的列举堆的内存使用状况,帮助分析Java内存泄漏的原因。

五、OQL查询语言

因为堆转储文件里面含有大量信息,要准确找到我们想要的信息需要借助一些工具和一些查询技巧。

?? ?? ? Springboot OQL 对象查询语言是一种结构化查询语言,将类当作表、对象当作记录行、成员变量当作表中的字段。通过OQL可以方便快捷的查询一些需要的信息,加快检出需要的属性值。

版本差异

?? ?? ? Spring boot 1.x 版本 heapdump 查询结果存储在 java.util.Hashtable$Entry 实例键值对中:

?? ?? ? Spring boot 2.x 版本 heapdump 查询结果存储在 java.util.LinkedHashMap$Entry 实例键值对中:

?? ?? ? 利用password关键字检索,对应的 oql 查询语句

Eclipse MAT对应查询语句

?? ?? ? Spring boot 1.x:select * from java.util.Hashtable$Entry s WHERE (toString(s.key).contains("password"))

?? ?? ? Spring boot 2.x:select * from java.util.LinkedHashMap$Entry s WHERE (toString(s.key).contains("password"))

六、具体步骤

此次使用JDK自带JVisualVM工具,对Heap Dump进行分析,该工具位于<JDK_HOME>/bin/目录。

JDK自带工具,如下图所示:

双击打开JVisualVM工具。

其主界面,如下图所示:

?? ?? ? 通过JVisualVM加载heapdump文件,在概要栏目系统属性处,可看到部分敏感信息泄露。

部分敏感信息泄露,如下图所示:

切换至OQL控制台标签,在输入框输入如下语句,点击执行进行查询。

select s.value.toString() from java.util.Hashtable$Entry s where /password/.test(s.key.toString())

查询结果,如下图所示:

切换至类标签,在下方输入框限制检索条件java.util.Hashtable,点击结果中第一项java.util.Hashtable$Entry

查询结果,如下图所示:

切换不同的实例进行观察,在第411项实例发现后台管理员密码明文。

管理员密码明文,效果如下图所示:

在第409项实例中进一步可看到 MySQL数据库密码。

查看MySQL数据库密码,效果如下图所示:

在查找密码上,可结合网站?/env?或?/Actuator/env?接口,检索?关键词,使用被星号 遮掩对应的属性名作为OQL过滤条件。

查看遮挡属性值,效果如下图所示:

shiroKey

?? ?? ? 如目标网站使用Shiro安全框架,在过滤规则输?org.apache.shiro.web.mgt.CookieRememberMeManager?寻找?decryptionCipherKey字段,可获取key,进而rememberMe反序列化利用。

七、防控措施

在代码白盒审计时,对Springboot项目重点检测Actuator依赖,对安全依赖及配置进行复查,建议作为漏洞检出规则加入代码扫描器。

?? ?? ? 在网络安全风险自查中,将/heapdump?等敏感路径加入扫描器字典。

在使用Actuator时,不正确的使用或不经意的疏忽,都会造成严重的信息泄露等安全隐患。安全的做法是引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。

引入?security?依赖,打开安全限制,或禁用不需要接口,endpoints.env.enabled= false

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:19:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:45:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码