背景
Actuator 是 Spring Boot 提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的 Spring beans 以及一些环境属性等。
为了保证 actuator 暴露的监控接口的安全性,需要添加安全控制的依赖spring-boot-start-security
依赖,访问应用监控端点时,都需要输入验证信息。Security 依赖,可以选择不加,不进行安全管理,但不建议这么做。
访问 /env
接口时,spring actuator 会将一些带有敏感关键词 (如 password、secret) 的属性名对应的属性值用 ******
号替换,以达到脱敏的效果。
在目标既不出网,/jolokia 接口又没有合适的 MBean 或者不支持 POST 请求的情况下,很多获取被星号脱敏的密码的明文的方法就失效了。
这时候就可以利用 Eclipse Memory Analyzer 工具来分析 /heapdump 或 /actuator/heapdump 接口下载的 jvm heap 信息,查找密码明文。
利用方法
1、访问如下路径如果有数据则说明存在漏洞
1 |
# Spring Boot 1.x版本访问/env |
2、下载jvm heapdump文件
1 |
# Spring Boot 1.x版本访问/heapdump |
3、使用Eclipse Memory Analyzer解析内存文件
Eclipse Memory Analyzer下载地址
https://www.eclipse.org/mat/downloads.php
1 |
select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password")) |
使用 Eclipse Memory Analyzer 直接打开下载的 heapdump 文件,点击 OQL 标签,在查询框中输入
1 |
select * from org.springframework.web.context.support.StandardServletEnvironment |
然后点击红色感叹号执行查询。
如下图, spring boot 1.x 版本 heapdump 查询结果,最终结果存储在 java.util.Hashtable$Entry 实例的键值对中:
所以也可以用
1 |
select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password")) |
来查询。
下图为 spring boot 2.x 版本 heapdump 查询结果,最终结果存储在 java.util.LinkedHashMap$Entry 实例的键值对中:
所以也可以用
1 |
select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password")) |
参考
http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html
FROM :b0urne.top | Author:b0urne
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论