Spring boot heapdump获取敏感信息( 二 )


文章插图
 
Eclipse MAT:Eclipse提供的一款Heap Dump分析工具,如使用Eclipse-UI内存崩溃,可使用MAT脚本解析大容量的heap dump 。

Spring boot heapdump获取敏感信息

文章插图
 
IBM Heap Analyzer:IBM公司一款分析Heap Dump信息的工具,有效的列举堆的内存使用状况,帮助分析Java内存泄漏的原因 。
Spring boot heapdump获取敏感信息

文章插图
 
五、OQL查询语言因为堆转储文件里面含有大量信息,要准确找到我们想要的信息需要借助一些工具和一些查询技巧 。
? Springboot OQL 对象查询语言是一种结构化查询语言,将类当作表、对象当作记录行、成员变量当作表中的字段 。通过OQL可以方便快捷的查询一些需要的信息,加快检出需要的属性值 。
版本差异
? Spring boot 1.x 版本 heapdump 查询结果存储在 java.util.Hashtable$Entry 实例键值对中:
? Spring boot 2.x 版本 heapdump 查询结果存储在 java.util.LinkedHashMap$Entry 实例键值对中:
? 利用password关键字检索,对应的 oql 查询语句
Spring boot heapdump获取敏感信息

文章插图
 
Eclipse MAT对应查询语句
? Spring boot 1.x:select * from java.util.Hashtable$Entry s WHERE (toString(s.key).contains("password"))
? Spring boot 2.x:select * from java.util.LinkedHashMap$Entry s WHERE (toString(s.key).contains("password"))
六、具体步骤此次使用JDK自带JVisualVM工具,对Heap Dump进行分析,该工具位于<JDK_HOME>/bin/目录 。
JDK自带工具,如下图所示:
Spring boot heapdump获取敏感信息

文章插图
 
双击打开JVisualVM工具 。
其主界面,如下图所示:
 
? 通过JVisualVM加载heapdump文件,在概要栏目系统属性处,可看到部分敏感信息泄露 。
部分敏感信息泄露,如下图所示:
Spring boot heapdump获取敏感信息

文章插图
 
切换至OQL控制台标签,在输入框输入如下语句,点击执行进行查询 。
select s.value.toString() from java.util.Hashtable$Entry s where /password/.test(s.key.toString())
查询结果,如下图所示:
Spring boot heapdump获取敏感信息

文章插图
 
切换至类标签,在下方输入框限制检索条件java.util.Hashtable,点击结果中第一项java.util.Hashtable$Entry
查询结果,如下图所示:
Spring boot heapdump获取敏感信息

文章插图
 
切换不同的实例进行观察,在第411项实例发现后台管理员密码明文 。
管理员密码明文,效果如下图所示:
Spring boot heapdump获取敏感信息

文章插图
 
在第409项实例中进一步可看到 MySQL数据库密码 。
查看MySQL数据库密码,效果如下图所示:
Spring boot heapdump获取敏感信息

文章插图
 
在查找密码上,可结合网站 /env 或 /Actuator/env 接口,检索 


推荐阅读