spring boot -- 如何在jvm堆信息中查找明文密码
在测试的时候发现网站图标为小绿叶,确定为Spring boot框架,然后访问env页面,会泄露服务器环境变量,服务,账号密码等信息。
在泄露的信息处可以看到dbconfig.dbs,数据访问链接等信息,确定为oracle数据库
username为gzdlpw、但是密码默认的是使用 * 号替代,然后发现/jolokia、/actuator/jolokia接口是无法访问的,也无法使用POST方法访问/env接口,但是存在/heapdump接口,可以下载JVM堆信息
访问http://xxxxxxx:8018/heapdump、下载JVM堆信息,可在堆信息中找到明文密码
使用Eclipse Memory Analyzer打开下载的JVM堆文件
点击OQL输入搜索语句,点击红色叹号,进行搜索
然后输入OQL语句:“select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))”,进行搜索
逐个查看KEY的值,只有当KEY的值为我们要找的属性值时,对应的密码才为我们需要的密码
如:KEY的值为“dbconfig.dbs[0].password”、与我们前面在env看到的属性值相同,即该密码为数据库密码
即:密码为:gzdl!321
spring boot 1.x版本的密码存在
java.util.Hashtable$Entry
实例的键值对中spring boot 2.x版本存储在
java.util.LinkedHashMap$Entry
实例的键值对中1 select * from org.springframework.web.context.support.StandardServletEnvironment 2 select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password")) 3 select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password"))
注:POST访问env端点修改属性,会破坏原有属性,影响网站系统正常使用
完结!!!