Springboot actuator 能做什么,不再这里详细介绍,这里主要讲actuator带来的安全问题。

1. 通过httptrace 越权

httptrace是该应用每一次被http访问的记录,包含每次request的cookie、请求参数、等。设想一下如果拿到用户请求的cookie,那么就可以登录该用户的账户进行任意操作。第一步,创建springboot 项目、pom引入actuator

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

第二步,在application.properties 中增加暴露所有端点配置,默认只暴露(/health)

management.endpoints.web.exposure.include=*

第三步,注入HttpTraceRepository Bean,httptrace的存储方式

@Configuration
public class APPConfig {@Bean@ConditionalOnMissingBean(HttpTraceRepository.class)public HttpTraceRepository traceRepository(){return new InMemoryHttpTraceRepository();}

}

看一下结果,暴露的有哪些端点,访问(http://127.0.0.1:9999/actuator/)


springboot 禁止server port springboot禁用trace请求_数据库

访问httptrace看一下有哪些信息http://127.0.0.1:9999/actuator/httptrace


springboot 禁止server port springboot禁用trace请求_开发语言_02

2. 通过heapdump 获取数据库密码,完成脱库

第一步,通过访问http://127.0.0.1:9999/actuator/env 查看应用配置信息


springboot 禁止server port springboot禁用trace请求_开发语言_03

Json format 一下,搜索datasource,可以看到数据库账号、链接字符串,密码被隐藏掉了。所有和密码相关的actuator 都会在输出的时候替换成***。

<img src=“) 第二步,通过配置文件不能看到密码,那就只能通过堆来看看能不能找到,因为我们所有的java对象都存在于堆上,这里可以看出来使用的使用阿里巴巴的的Druid连接池,所以数据库配置相关也应该在这个class 的实例上。通过http://127.0.0.1:9999/actuator/heapdump 会执行dump并下载,然后我们通过Jhat 来分析该dump文” style=“margin: auto” />

<img src=“) 访问http://127.0.0.1:7000/ 查看heapdump分析在页面control+f 搜索datasource DataSourceInitializationMod” style=“margin: auto” />