在实际渗透过程中碰到api泄露以及类似若以cms监控等,可以对heapdump文件进行导出,通过分析,可以获取一些敏感信息,通过利用泄露的敏感信息可以获取一些有用的资料,有的甚至可以直接获取服务器权限。本文对heapdump利用的方法进行总结和介绍。
1.1HeapDump及HeapDump_tools 简介
1.HeapDump简介
HeapDump 是 Java 虚拟机(JVM)在某一时刻内存使用情况的快照,记录了 JVM 堆中所有对象的详细信息,包括对象信息(对象的类名、字段值、引用关系等)、类元数据(类加载器、类名、静态字段等)、垃圾回收根对象(线程栈、静态变量等可以直接被 JVM 访问的对象)及线程的调用栈和局部变量等信息。
HeapDump主要用来诊断内存泄漏、排查内存溢出(OOM)及性能优化。
2.headdump_tool简介
Heapdump_tool 是一个 开源的命令行工具,专门用于分析 Java 的 Heap Dump(堆转储)文件。它基于 jhat(JDK 自带的堆分析工具)实现,简化对堆转储文件的敏感信息提取和内存问题诊断。https://github.com/wyzxxz/heapdump_tool
1.1.2Heapdump_tool常见参数
1. 工具启动
java -jar heapdump_tool.jar [heapdump_file]
参数说明:heapdump_file:待分析的堆转储文件路径(支持 .hprof、.gz 等格式)。
2. 交互式查询命令
进入工具界面后,可通过以下命令查询数据:
命令格式 |
功能 |
|
搜索所有包含 的字符串(关键词查询)。 |
|
查找所有长度为 10 的字符串(如密码、Token)。 |
|
按类名模糊搜索(如 相关类的实例)。 |
|
通过对象 ID 查找具体对象信息(需已知目标对象的十六进制 ID)。 |
|
使用正则表达式匹配字符串(如匹配特定格式的密钥)。 |
|
直接提取 Shiro 框架的 Session ID 或加密密钥(针对 SpringBoot 应用)。 |
|
提取所有 URL 地址(如数据库连接字符串、API 端点)。 |
|
提取文件路径或文件名(如配置文件路径)。 |
|
提取 IP 地址(如数据库 IP、服务器地址)。 |
|
显示所有查询结果(默认过滤非 格式的数据)。 |
|
退出工具。 |
3. 高级参数(启动时指定)
java -jar heapdump_tool.jar [heapdump_file]
查询方式:
1. 关键词 例如 password
2. 字符长度 len=10 获取长度为10的所有key或者value值
3. 按顺序获取 num=1-100 获取顺序1-100的字符
4. class模糊搜索 class=xxx 获取class的instance数据信息
5. id查询 id=0xaaaaa 获取id为0xaaaaa的class或者object数据信息
4. re正则查询 re=xxx 自定义正则查询数据信息
6.获取url,file,ip
shirokey 获取shirokey的值
geturl 获取所有字符串中的url
getfile 获取所有字符串中的文件路径文件名
getip 获取所有字符串中的ip
1.1.3漏洞挖掘
利用未授权访问的接口(如 Spring Boot Actuator 的 /actuator/heapdump 端点)下载 Heap Dump 文件,在若以监控系统以及一些api系统中可以直接获取/actuator/heapdump文件。
1.Spring Boot 1.x 版本及Spring Boot 2.x 版本常见端点及功能
(1)Spring Boot 1.x 版本
在 Spring Boot 1.x 中,Actuator 的端点路径是直接从根路径 /
开始的,例如 /health
、/env
、/metrics
等。
端点 |
功能 |
|
显示所有 注解的配置类及其绑定的值。 |
|
显示 Spring 的 (环境变量和配置属性)。 |
|
显示应用程序的健康状态(如数据库连接、磁盘空间等)。 |
|
显示最近的 HTTP 请求跟踪信息(如请求方法、响应状态码)。 |
|
显示当前应用程序的监控指标(如内存使用、线程数、HTTP 请求计数等)。 |
|
显示所有 路径的整理列表(包括控制器和处理方法)。 |
|
显示 JVM 的线程堆栈信息。 |
|
下载整个 JVM 的堆转储文件(用于分析内存问题)。 |
|
提供 JMX-HTTP 桥接功能,允许通过 HTTP 访问 JMX Beans。 |
(2)Spring Boot 2.x 版本
在 Spring Boot 2.x 中,Actuator 的端点路径统一以 /actuator 为前缀,例如 /actuator/health、/actuator/env 等。这种设计更符合 RESTful 风格,并且便于区分 Actuator 端点与其他应用路径。
端点 |
功能 |
|
显示所有 注解的配置类及其绑定的值。 |
|
显示 Spring 的 (环境变量和配置属性)。 |
|
显示应用程序的健康状态(如数据库连接、磁盘空间等)。 |
|
显示最近的 HTTP 请求跟踪信息(如请求方法、响应状态码)。 |
|
显示当前应用程序的监控指标(如内存使用、线程数、HTTP 请求计数等)。 |
|
显示所有 路径的整理列表(包括控制器和处理方法)。 |
|
显示 JVM 的线程堆栈信息。 |
|
下载整个 JVM 的堆转储文件(用于分析内存问题)。 |
|
提供 JMX-HTTP 桥接功能,允许通过 HTTP 访问 JMX Beans。 |
2.直接访问api接口测试
例如访问https://**.api.***.com/api/actuator/heapdump,如图2-1所示,直接下载该文件。
图1 直接下载heapdump文件
3.敏感信息获取
(1)1.x获取
/configprops
/env
/health
/httptrace
/metrics
/mappings
/threaddump
/heapdump
/jolokia
(2)2.x版本获取
/actuator/configprops
/actuator/env
/actuator/health
/actuator/httptrace
/actuator/metrics
/actuator/mappings
/actuator/threaddump
/actuator/heapdump
/actuator/jolokia
如图2-2所示,泄露信息中包含密码等信息。
图2-2 泄露信息查看
1.1.4实际利用案例
1.下载heapdump文件分析
将heapdump_tool.jar及heapdump放在同一个目录,jdk为java8版本。执行命令:
java -jar heapdump_tool.jar heapdump
可以选择0和1两种模式,1是搜索全部数据,相对时间会长一些,如图2-3所示。
图2-3 搜索所有的信息
(1)搜索密码
当全部信息搜索完毕后,可以执行搜索关键字进行搜索,例如password,heapdump_tool会将包含password关键字的信息全部列出来,如图2-4所示。
获取密码:Yuanch@anGb0lUo#0Aa
(2)搜索oss AccessKey及SecretKey
3.获取ip地址
4.获取url地址
令总结
java -jar heapdump_tool.jar heapdump1
AccessKey、SecretKey
password
geturl
getip
getfile
原文始发于微信公众号(小兵搞安全):heapdump未经授权漏洞利用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论