https://github.com/LandGrey/SpringBootVulExploit
利用条件:
可正常 GET 请求目标 /heapdump 或 /actuator/heapdump 接口
利用方法:
步骤一: 找到想要获取的属性名
GET 请求目标网站的 /env 或 /actuator/env 接口,搜索 ****** 关键词,找到想要获取的被星号 * 遮掩的属性值对应的属性名。步骤二: 下载 jvm heap 信息
下载的 heapdump 文件大小通常在 50M—500M 之间,有时候也可能会大于 2GGET 请求目标的 /heapdump 或 /actuator/heapdump 接口,下载应用实时的 JVM 堆信息
步骤三: 使用 MAT 获得 jvm heap 中的密码明文
参考 文章 方法,使用 Eclipse Memory Analyzer 工具的 OQL 语句 select * from org.springframework.web.context.support.StandardServletEnvironment, 辅助快速过滤分析,获得密码明文
https://www.eclipse.org/mat/downloads.php
参考https://landgrey.me/blog/16/
注:下载的.hprof.gz解压后在Memory Analyzer中可能会报错:
An internal error occurred during: “Parsing heap dump from ‘C:\Users\Desktop\111\heapdump2020-08-07-15-11-live860479381145369758.hprof'”.
java.lang.ArrayIndexOutOfBoundsException
此时重新下载heapdump即可。
拓展阅读(点评/知识):
使用 MAT 查找 spring heapdump 中的密码明文
一. 前言
访问 /env
接口时,spring actuator 会将一些带有敏感关键词 (如 password、secret) 的属性名对应的属性值用 ******
号替换,以达到脱敏的效果。
在目标既不出网,/jolokia
接口又没有合适的 MBean 或者不支持 POST 请求的情况下,很多获取被星号脱敏的密码的明文的方法就失效了。
这时候就可以利用 Eclipse Memory Analyzer 工具来分析 /heapdump
或 /actuator/heapdump
接口下载的 jvm heap 信息,查找密码明文。
二. 查找方法
使用 Eclipse Memory Analyzer 直接打开下载的 heapdump 文件,点击 OQL 标签,在查询框中输入
select * from org.springframework.web.context.support.StandardServletEnvironment
然后点击红色感叹号执行查询。
- 如下图, spring boot 1.x 版本 heapdump 查询结果,最终结果存储在
java.util.Hashtable$Entry
实例的键值对中:
所以也可以用
select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
来查询。
- 下图为 spring boot 2.x 版本 heapdump 查询结果,最终结果存储在
java.util.LinkedHashMap$Entry
实例的键值对中:
所以也可以用
select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password"))
来查询。
参考文章:
本文标题: | spring boot 获取被星号脱敏的密码的明文の方法四-测试 |
本文链接: (转载请附上本文链接) | https://vulsee.com/archives/vulsee_2020/0807_11841.html |