Apache Struts2 - 任意文件上传漏洞 - CVE-2024-53677
0x01:漏洞简介
Apache Struts 是美国 Apache 基金会的一个开源项目,是一套用于创建企业级 Java Web 应用的开源 MVC 框架(将软件分为模型(Model)、视图(View)和控制器(Controller)三部分)。
CVE-2024-53677 是一个在 Apache Struts 框架中发现的严重漏洞,可能允许攻击者远程执行任意代码。漏洞的根本原因是文件上传逻辑存在缺陷,攻击者可以利用该缺陷进行路径穿越和恶意文件上传。
0x02:影响范围
注:未启用 FileUploadInterceptor 组件的应用程序不受此漏洞影响。
-
2.0.0 <= Apache Struts <= 2.3.37
-
2.5.0 <= Apache Struts <= 2.5.33
-
6.0.0 <= Apache Struts <= 6.3.0.2
0x03:环境搭建
环境准备
靶机环境:CentOS 7 - IP 172.16.0.101
攻击机环境:Kali Linux - IP 172.16.0.103
0x0301:靶机环境搭建
靶机:CentOS 7 服务器配置概览
Docker 环境:ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)_灯塔arl-CSDN博客
本次靶场的搭建采用 Docker 进行搭建,CentOS 7 安装 Docker 的流程可以参考上面提供的链接。
当安装好 Docker 后,依次输入下面的命令获取 CVE-2024-53677 的实验环境:
git clone https://github.com/c4oocO/CVE-2024-53677-Docker.git # 拉取项目cd CVE-2024-53677-Docker # 进入文件夹中

然后输入下面的命令根据 Dockerfile 文件构建一个镜像(这里需要挂代理):
# build 过程中先开代理,报错后关闭代理再 builddocker build --ulimit nofile=122880:122880 -m 3G -t cve-2024-53677 .

然后输入下面的命令,创建容器运行 CVE-2024-53677 镜像:
docker run -p 8080:8080 --ulimit nofile=122880:122880 -m 3G --rm -it cve-2024-53677

运行完容器后,我们到 Kali Linux 中,访问靶机的 8080 端口,验证一下环境是否搭建成功:

如上,当看到上面的内容,就证明靶机环境启动好了,等待一会就可以进入漏洞环境了。
0x0302:攻击机环境搭建
攻击机:Kali Linux 配置概览
漏洞 POC:CVE-2024-53677 - POC.zip
攻击机就不用配置啥环境了,把 CVE-2024-53677 的漏洞 POC 下载下去即可。
# POC 用法python CVE-2024-53677.py -u http://172.16.0.101:8080/upload.action -filename ../shell.jsp -file shell.jsp -type s# -u => 文件上传点的完整的 URL# -filename => 我们上传后的文件在靶场中的位置# -file => 我们本地要上传的文件的位置# -type s => 代表只上传单个文件
0x04:漏洞复现
漏洞复现比较 Easy,但是这里有一个魔鬼细节,我们初始访问靶场长下面这样嘛:

我们这里需要点击 “Browse” 按钮,随机上传一个文件,来让这个靶场初始化后才可以继续漏洞的复现(笔者尝试过了,盲猜是一开始没有 upload 文件夹,必须得传入一个东西后才自动生成):

初始化靶场后,记得我们刚刚下载的那个 POC 嘛,POC 包里还有一个叫 shell.jsp 的文件,这是一个后门木马文件,待会我们就要将这个木马利用 struts2 的漏洞上传上去:

在 Kali Linux 中输入下面的命令,使用 POC 上传 shell.jsp 文件到靶场中:
python CVE-2024-53677.py -u http://172.16.0.101:8080/upload.action -filename ../shell.jsp -file shell.jsp -type s

如上,POC 结果显示上传成功,并且返回的 img 标签中还包含了我们木马的位置,我们将这个路径拼接到靶场的 URL 中即可访问 shell.jsp 文件:
http://172.16.0.101:8080/uploads/../shell.jsp

如上,成功访问,这个 shell.jsp 的利用方法如下,我们通过传入如下参数,即可在靶机执行任意命令:
?action=cmd&cmd=whoami


0x05:原理分析
Struts2 中有一个值栈的功能,“值栈” 顾名思义,是一个 “栈” 类型的数据,用来存储一些程序运行的时候需要用到的值。
在 Struts2 中,当我们访问一个 Action 的时候,它就会创建该 Action 类的实例并将它推送到值栈的顶部。比如我们文件上传的时候,访问的 upload.action,当我们访问它的时候,Struts 就会实例化它并将它放到栈的顶部。因此,通过找到栈的顶部数据,我们就能够访问到它。
同时,Struts 又把文件绑定到了 Action 中,因此,如果攻击者通过值栈顶部的数据,修改文件的属性,就可以实现控制文件名达到目录遍历的效果。(目录遍历漏洞可以让攻击者控制文件上传的地方,比如站点根目录下,此时攻击者访问恶意程序,就会导致恶意程序直接在靶机服务器中执行)
0x06:修复方案
安全更新:更新 Apache Struts 到 6.4.0 以上版本即可修复该漏洞。
下载链接:Download a Release
加固建议
针对系统文件上传模块进行严格的身份认证和权限控制,避免匿名用户和未授权的访问。
将文件上传目录和其他可写目录权限设置为不可执行,禁止 web 容器解析这些目录下的文件。
在保存用户上传的文件时不直接使用原文件名,用随机生成的文件名替代以避免被攻击者操纵。
使用对象存储或网络存储的方式,保存用户上传的文件。
加强 web 应用的监控和日志记录,重点监测路径穿越和文件上传相关流量。
相关文章:
Apache Struts2 - 任意文件上传漏洞 - CVE-2024-53677
0x01:漏洞简介 Apache Struts 是美国 Apache 基金会的一个开源项目,是一套用于创建企业级 Java Web 应用的开源 MVC 框架(将软件分为模型(Model)、视图(View)和控制器(Controller&a…...
传统混合专家模型MoE架构详解以及python示例(DeepSeek-V3之基础)
我们已经了解到DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。而DeepSeekMoE架构的底层模型采用了混合专家模型(Mixture of Experts,MoE)架构。所以我们先了解一下传统混合专家模型MoE架构。 一、传统混合专家模…...
Tomcat如何处理Http请求
Tomcat处理HTTP请求的流程是一个复杂但有序的过程,涉及多个组件的协同工作。以下是对Tomcat处理HTTP请求流程的详细讲解: 一、接收请求 监听端口:Tomcat通过配置的Connector组件监听特定的端口(默认是8080)ÿ…...
安全筑基,智能赋能:BeeWorks IM引领企业协同新纪元
在数字经济高速发展的今天,企业通讯系统已从单纯的信息传递工具演变为支撑业务创新的核心平台。传统通讯工具在安全性、智能化、协同性等方面的不足,严重制约着企业的数字化转型进程。BeeWorks IM系统以其创新的技术架构和智能化功能,正在重新…...
AlmaLinux使用Ansible自动部署k8s集群
一、环境准备 节点规划(最低要求) 1台Master节点(4核/8GB内存)2台Worker节点(2核/4GB内存)1台Ansible控制机(可复用Master节点) 系统配置 # 所有节点执行 sudo hostnamectl set-hos…...
solidworks零件的绘制学习
1、拉伸凸台拉伸切除可以在一个零件中打孔,如下图: 2、旋转凸台配合旋转切除; 3、薄壁特征:在拉伸凸台,旋转凸台中都有;在一个面中画完草图,然后选择拉伸凸台或旋转凸台,里面就会出…...
DeepSeek-V3模型底层架构的核心技术一(多Token预测(MTP)技术)
一、DeepSeek-V3的框架结构 DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。这些创新使得模型在处理长序列、平衡计算负载以及生成连贯文本方面表现出色。 1. 基础架构 DeepSeek-V3的基础架构仍然基于Transformer框…...
llama.cpp部署 DeepSeek-R1 模型
一、llama.cpp 介绍 使用纯 C/C推理 Meta 的LLaMA模型(及其他模型)。主要目标llama.cpp是在各种硬件(本地和云端)上以最少的设置和最先进的性能实现 LLM 推理。纯 C/C 实现,无任何依赖项Apple 芯片是一流的——通过 A…...
Spring源码分析のBean创建流程(上)
文章目录 前言一、preInstantiateSingletons1.1、getMergedLocalBeanDefinition1.2、isFactoryBean 二、getBean 前言 原生Spring在refresh方法中,会在finishBeanFactoryInitialization:preInstantiateSingletons方法中直接创建所有非懒加载的单例Bean。…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_time_update函数
定义在 src\core\ngx_times.c 中 ngx_time_init 函数后面 void ngx_time_update(void) {u_char *p0, *p1, *p2, *p3, *p4;ngx_tm_t tm, gmt;time_t sec;ngx_uint_t msec;ngx_time_t *tp;struct timeval tv;if (!ngx_trylock(&ngx…...
DeepSeek笔记(二):DeepSeek局域网访问
如果有多台电脑,可以通过远程访问,实现在局域网环境下多台电脑共享使用DeepSeek模型。在本笔记中,首先介绍设置局域网多台电脑访问DeepSeek-R1模型。 一、启动Ollama局域网访问 1.配置环境变量 此处本人的操作系统是Windows11,…...
基于大数据的全国热门旅游景点数据分析系统的设计与实现
【大数据】基于大数据的全国热门旅游景点数据分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统主要包括登录注册、系统首页、图表分析、数据管理和个人信息五大功能模…...
【Unity3D】Jenkins Pipeline流水线自动构建Apk
目录 一、准备阶段 二、创建Pipeline流水线项目 三、注意事项 四、扩展 1、Pipeline添加SVN更新项目Stage阶段 一、准备阶段 1、安装tomcat 10.0.5 Index of apache-local/tomcat/tomcat-10 2、安装jdk 17 Java Archive Downloads - Java SE 17.0.13 and later 3、…...
10G EPON光模块
一、10G EPON对称光模块 工作模式:上行突发接收、下行连续发射。 工作原理:当需要发送信号时,系统信号通过光模块的电接口把信号传送到驱动芯片,芯片处理后,驱动激光器发出调制光信号,经光纤发到远端&…...
Edge浏览器翻译|自动翻译设置
文章目录 Edge浏览器翻译|自动翻译设置右键翻译显示原文 Edge浏览器翻译|自动翻译设置 在 Microsoft Edge 浏览器中使用 Microsoft Translator - Microsoft 支持 进入浏览器设置,从首选语言列表中移除多余的语言设置 网站将以受支持语言列表中的第一种语言进行显示。若要重新…...
基于微信小程序的场地预约设计与实现
第3章 系统设计 3.1系统设计目标 本系统的实现可以帮助体育馆场地信息的管理。帮助管理员对注册用户管理以及用户预约管理。同时可以帮助用户进行场地预约。本系统可以实现用户足不出户预约到需要的场地,为用户提供场地信息了解的平台。 3.2系统功能结构图 本系统的…...
腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型
在之前的文章中已经和大家介绍过腾讯HunYuan-3D 1.0,感兴趣的小伙伴可以点击下面链接阅读~ HunYuan-3D 是首个开源高质3D-DiT生成大模型,几何与纹理解藕生成,一键将创意具象化。 2.0模型架构图及介绍 2.0模型将几何和纹理生成解耦࿰…...
计算机性能与网络体系结构探讨 —— 基于《计算机网络》谢希仁第八版
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...
C# 控制台相关 API 与随机数API
C# 控制台相关 API 与随机数API 控制台输入输出 功能说明 Console.WriteLine(string): 输出字符串并换行Console.Write(string, string): 输出字符串不换行Console.ReadLine(): 等待用户输入并返回字符串Console.ReadKey(bool).KeyChar: 读取按键,指定是否显示输…...
Git的常用命令及常见问题处理方法
目录 一、介绍二、常用 Git 命令1. 配置用户信息2. 初始化仓库3. 克隆远程仓库4. 查看状态5. 添加文件到暂存区6. 提交更改7. 查看提交历史8. 查看文件差异9. 查看分支10. 切换分支11. 合并分支12. 处理冲突13. 远程操作14. 标签管理15. 撤销操作 三、常见问题处理方法1. 无法推…...
基于vue3实现的课堂点名程序
设计思路 采用vue3实现的课堂点名程序,模拟课堂座位布局,点击开始点名按钮后,一朵鲜花在座位间传递,直到点击结束点名按钮,鲜花停留的座位被点名。 课堂点名 座位组件 seat.vue <script setup>//组合式APIimpo…...
kkFileView二开之pdf转图片接口
kkFileView二开之Pdf转图片接口 kkFileView二开系列文章:1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 kkFileView二开系列文章&#x…...
神经网络常见激活函数 9-CELU函数
文章目录 CELU函数导函数函数和导函数图像优缺点pytorch中的CELU函数tensorflow 中的CELU函数 CELU 连续可微指数线性单元:CELU(Continuously Differentiable Exponential Linear Unit),是一种连续可导的激活函数,结合了 ELU 和 …...
什么是网关?网关有什么作用?API网关的主要功能,SpringCloud可以选择有哪些API网关?什么是限流算法?网关如何实现限流?一篇文章读懂网关的前世今生
1、什么是网关? API网关(API Gateway)是一种中间层服务器,用于集中管理,保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点,提供了一组统一的接口管理和控制API的访问。 2、网关示意图 3…...
OpenCV机器学习(1)人工神经网络 - 多层感知器类cv::ml::ANN_MLP
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::ANN_MLP 是 OpenCV 库中的一部分,用于实现人工神经网络 - 多层感知器(Artificial Neural Network - Multi-Layer…...
DeepSeek告别服务器繁忙
原文地址:http://shen.iwiki.fun/2025/02/09/free-deepseek/ 博客地址:http://shen.iwiki.fun 一、申请API 1、硅基流动 免费额度:14元 注:平台 2000 万 Tokens 特指 Qwen2.5-14B-Instruct 模型单价下的数量,实际到账…...
线性代数中的正交和标准正交向量
在线性代数中,理解正交向量和正交向量至关重要,尤其是对于机器学习中的应用。这篇博文将简化这些概念,而不会太深入地深入研究复杂的数学。 正交向量 如果两个向量的点积等于零,则认为这两个向量是正交的。但点积到底是什么呢&am…...
从安装软件到flask框架搭建可视化大屏(一)——创建一个flask页面,零基础也可以学会
1.第一步:安装软件 Flask是一个轻量级Web应用框架,用python代码编写,简单方便应用。 如何安装pycharm_pycharm只能安装在c盘吗-CSDN博客 Pycharm分为专业版和社区版,是python的主流工具 如何安装Anaconda_如何安装anacoda csdn-…...
python opencv基础使用总结
1.安装opencv库:pip install opencv-python 2.基础使用范例 import cv2 #图片的基本操作#1.读取一张图片 参数 1:图片的文件名如果图片放在当前文件夹下,直接写文件名就行,如lena.jpg否则需要给出绝对路径,如D:\Ope…...
【已解决】TypeError: AsyncConnectionPool.__init__(), new install bug, httpx==0.24.1
1,参考社区链接,首先降低gradio版本,降低到4以下,但是也不能降太低,也不能太高,要适中,推荐版本3.39.0 pip install gradio3.39.0 2,下载正确的httpx版本 参考社区链接࿰…...
