分析
目录
-
1. Springboot信息泄露
1.1 可能泄露路由列表
1.2 heapdump
2 实际环境
2.1 Springboot信息泄露测试
2.2 heapdump读取
2.2 heapdump分析
1. Springboot信息泄露
1.1 可能泄露路由列表
/api-docs
/v2/api-docs
/swagger-ui.html
/api.html
/sw/swagger-ui.html
/api/swagger-ui.html
/template/swagger-ui.html
/spring-security-rest/api/swagger-ui.html
/spring-security-oauth-resource/swagger-ui.html
/mappings
/actuator/mappings
/metrics
/actuator/metrics
/beans
/actuator/beans
/configprops
/actuator/configprops
/actuator
/auditevents
/autoconfig
/caches
/conditions
/docs
/dump
/env
/flyway
/health
/heapdump
/httptrace
/info
/intergrationgraph
/jolokia
/logfile
/loggers
/liquibase
/prometheus
/refresh
/scheduledtasks
/sessions
/shutdown
/trace
/threaddump
/actuator/auditevents
/actuator/health
/actuator/conditions
/actuator/env
/actuator/info
/actuator/loggers
/actuator/heapdump
/actuator/threaddump
/actuator/scheduledtasks
/actuator/httptrace
/actuator/jolokia
/actuator/hystrix.stream
/trace
:显示最近的http包信息,可能泄露当前系统存活的Cookie信息。
/env
:应用的环境信息,包含Profile、系统环境变量和应用的properties信息,可能泄露明文密码与接口信息。
/jolokia
:RCE漏洞
/heapdump
:JVM内存信息,分析出明文密码
1.2 heapdump
Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。
可以使用 JVisualVM
:JDK自带工具,供开发者用于监视,故障排除。
2 实际环境
2.1 Springboot信息泄露测试
Burpsuite Intruder模块扫描
2.2 heapdump读取
2.2 heapdump分析
因为堆转储文件里面含有大量信息,要准确找到我们想要的信息需要借助一些工具和一些查询技巧。
Springboot OQL 对象查询语言是一种结构化查询语言,将类当作表、对象当作记录行、成员变量当作表中的字段。通过OQL可以方便快捷的查询一些需要的信息,加快检出需要的属性值。
版本差异
Spring boot 1.x 版本 heapdump 查询结果存储在 java.util.Hashtable$Entry 实例键值对中:
Spring boot 2.x 版本 heapdump 查询结果存储在 java.util.LinkedHashMap$Entry 实例键值对中:
利用password关键字检索,对应的 oql 查询语句
此次使用JDK自带JVisualVM
工具,对Heap Dump进行分析,该工具位于<JDK_HOME>/bin/
目录。
JDK自带工具,如下图所示:
双击打开JVisualVM
工具。
其主界面,如下图所示:
通过JVisualVM
加载heapdump
文件,在概要栏目系统属性处,可看到部分敏感信息泄露。
部分敏感信息泄露,如下图所示:
切换至OQL控制台标签,在输入框输入如下语句,点击执行进行查询。
select s.value.toString() from java.util.Hashtable$Entry s where /password/.test(s.key.toString())
查询结果,如下图所示:
切换至类标签,在下方输入框限制检索条件java.util.Hashtable
,点击结果中第一项java.util.Hashtable$Entry
查询结果,如下图所示:
切换不同的实例进行观察,在第411项实例发现后台管理员密码明文。
管理员密码明文,效果如下图所示:
在第409项实例中进一步可看到 MySQL数据库密码。
查看MySQL数据库密码,效果如下图所示:
在查找密码上,可结合网站 /env
或 /Actuator/env
接口,检索 关键词,使用被星号 遮掩对应的属性名作为OQL过滤条件。
查看遮挡属性值,效果如下图所示:
shiroKey
如目标网站使用Shiro安全框架,在过滤规则输⼊org.apache.shiro.web.mgt.CookieRememberMeManager
寻找 decryptionCipherKey
字段,可获取key,进而rememberMe
反序列化利用。
结尾:防控措施
在代码白盒审计时,对Springboot
项目重点检测Actuator
依赖,对安全依赖及配置进行复查,建议作为漏洞检出规则加入代码扫描器。
在网络安全风险自查中,将/heapdump
等敏感路径加入扫描器字典。
在使用Actuator
时,不正确的使用或不经意的疏忽,都会造成严重的信息泄露等安全隐患。安全的做法是引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator
管理端口并配置不对外网开放。
引入 security
依赖,打开安全限制,或禁用不需要接口,endpoints.env.enabled= false