一、spring boot

日常测试或攻防演练中像shiro,fastjson等漏洞已经越来越少了,但是随着spring boot框架的广泛使用,spring boot带来的安全问题也越来越多,本文仅介绍未授权现在heapdump获取数据库口令,达到连接数据库的目的。其他spring boot安全漏洞请参考https://xz.aliyun.com/t/7811

Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。具体参考:https://blog.csdn.net/hehmxy/article/details/89114116

二、未授权访问

spring boot未授权访问产生的安全问题还是比较严重的,env泄露等问题甚至可造成RCE。

在某次测试过程中扫描目录发现heapdump文件可下载,通过mat工具对heapdump文件进行分析,可获取内存中保存的敏感信息。

image.png

访问该文件后即可下载

image.png

三、相关工具及语法

Eclipse Memory Analyzer是一种快速且功能丰富的Java堆分析器,可进行查找内存泄漏并减少内存消耗。

下载链接如下:https://www.eclipse.org/mat/

四、OQL

OQL是用于查询Java堆的类SQL查询语言。OQL允许过滤/选择从Java堆中获取的信息。虽然HAT已经支持预定义的查询,例如“显示类X的所有实例”,但OQL增加了更多的灵活性。OQL基于JavaScript表达式语言。

五、分析heapdump

将heapdump文件拖入mat,mat对文件进行分析后,应该是这个样子的

image.png

但是此处要注意一个坑,dump文件建议解压在一个不用的目录里,要不然会分析一堆文件回来。

image.png

使用此处的OOL按钮进行查询

image.png

语法:

select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))

或者:

select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("想查询属性所带的关键字"))         //1.x
select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password"))          //2.x
image.png

即可查询出内存文件里所包含的数据库账号密码,如果IP地址运行外联即可利用。