【web安全】Spring Boot eureka xstream 反序列化

本文详细介绍了Spring Boot Eureka中的一个安全漏洞,该漏洞允许攻击者通过XStream反序列化实现远程代码执行(RCE)。文章讲解了漏洞的利用条件,包括目标可出网、特定版本的eureka-client以及存在的特定依赖。此外,还提供了漏洞利用步骤,包括设置恶意payload、监听服务和刷新配置,最终导致shell反弹。最后,文章提到了修复措施,如禁用/env接口或增加鉴权,并列举了其他可能被利用的接口。

一、漏洞概述

Eureka 是 Spring Cloud Netflix 模块的子模块,它是 Spring Cloud 对 Netflix Eureka 的二次封装,主要负责 Spring Cloud 的服务注册与发现功能,开发人员只需引入相关依赖和注解轻松将 Spring Boot 与 Eureka 进行整合。

安全人员(Michael Stepankin)发现,服务注册与发现功能可能被滥用,当 eureka.client.serviceUrl.defaultZone 属性被设置为恶意的外部 eureka server URL地址并/refresh 触发目标机器请求远程 URL,提前架设的 fake eureka server 就会返回恶意的 payload。目标机器解析 payload,触发 XStream 反序列化,造成 RCE 漏洞。

二、利用条件

1.目标可出网

2.目标使用的 eureka-client < 1.8.7(存在 spring-cloud-starter-netflix-eureka-client 依赖)

3.可用 POST 方式请求目标网站的 /env 接口,并设置zone属性

4.可用 POST 方式请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starter-actuator 依赖)

三、漏洞环境

Web服务器:Windows Server 2012, JDK8u131 (1.13.190.222)

VPS: Ubuntu 16.04.7 LTS (162.14.73.205)

四、正常访问

访问URL: http://1.13.190.222:64000/env , 得到一些json格式的敏感数据。

五、漏洞利用

【私信回复“资料”获取】
1、网络安全学习路线
2、电子书籍(白帽子)
3、安全大厂内部视频
4、100份src文档
5、常见安全面试题
6、ctf大赛经典题目解析
7、全套工具包
8、应急响应笔记

提前在VPS服务器准备相关文件和监听服务,利用VPS python起的fake server 串联调用执行代码。

WebFlux和WebClient是Spring框架中的非阻塞Web客户端库,它们通常用于构建高性能、异步的网络应用程序。当涉及到SOAP(简单对象访问协议)这种基于XML的通信时,由于其复杂性和对结构化的请求和响应要求,自定义序列化变得至关重要。 在WebClient中,你可以通过以下几个步骤来处理SOAP协议并自定义序列化: 1. **添加依赖**:首先需要添加支持SOAP的第三方库,如`spring-ws`或`cxf-reactive`。 ```groovy dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' implementation 'org.springframework.ws:spring-ws-starter' } ``` 2. **创建SoapMessageConverter**:你需要创建一个自定义的`MessageConverter`,它将SOAP消息转换为你所需的对象类型。例如,可以使用`XStream`或`JAXB`(Java Architecture for XML Binding)进行XML到Java对象的映射。 ```java @Bean public MessageConverter soapMessageConverter() { XStream xstream = new XStream(); // 配置XStream以解析SOAP消息 return new MappingJackson2XmlHttpMessageConverter(xstream); } ``` 3. **配置WebClient**:在WebClient的设置中,应用自定义的`MessageConverter`。 ```java @Bean public WebClient webClient(BeanFactory beanFactory) { List<HttpMessageConverter<?>> converters = new ArrayList<>(); converters.add(soapMessageConverter()); converters.addAll(beanFactory.getBean("httpMessageConverters", List.class)); return WebClient.builder() .messageConverters(converters) .build(); } ``` 4. **发送SOAP请求**:现在你可以使用WebClient发送SOAP请求了,比如: ```java Mono<ServerResponse> response = WebClient.create("https://your-soap-api.com") .retrieve() .bodyToMono(SoapResponse.class); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值