Apache Struts2 远程命令执行漏洞(S2-052)

一、漏洞概述

       S2-052 是 Apache Struts2 框架中一个高危的远程代码执行漏洞(CVE-2017-9805),由安全研究人员于 2017 年发现并公开。该漏洞源于 Struts2 的 REST 插件在使用 XStream 组件处理 XML 反序列化时,未对用户输入的 XML 数据进行严格过滤,导致攻击者可构造恶意 XML 请求,在目标服务器上执行任意命令,获取系统权限。

二、漏洞成因

  1. XStream 反序列化缺陷
           Struts2 的 REST 插件通过 XStreamHandler 处理 XML 格式的请求数据,但未对反序列化过程中的类类型进行限制。攻击者可利用 XStream 的动态加载机制,通过恶意 XML 触发反射调用,执行系统命令。

  2. 关键触发点

    • javax.imageio.spi.FilterIterator:恶意 XML 中通过该类的 next() 方法调用 Filter 的 filter(),进而触发反射。
    • javax.imageio.ImageIO$ContainsFilter:通过反射调用 java.lang.ProcessBuilder.start(),执行系统命令。
  3. 攻击链示例
           恶意 XML 请求中构造多层嵌套对象,最终调用 ProcessBuilder.start(),例如:

    <map><entry><jdk.nashorn.internal.objects.NativeString><value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"><dataHandler><dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"><is class="javax.crypto.CipherInputStream"><cipher class="javax.crypto.NullCipher"><serviceIterator class="javax.imageio.spi.FilterIterator"><iter class="javax.imageio.spi.FilterIterator"><next class="java.lang.ProcessBuilder"><command><string>calc.exe</string> <!-- 示例命令:弹出计算器 --></command></next></iter><filter class="javax.imageio.ImageIO$ContainsFilter"><method><class>java.lang.ProcessBuilder</class><name>start</name></method></filter></serviceIterator></cipher></is></dataSource></dataHandler></value></jdk.nashorn.internal.objects.NativeString></entry>
    </map>

三、影响范围

受影响版本:Struts 2.3.x 系列:2.3.0 - 2.3.33、Struts 2.5.x 系列:2.5.0 - 2.5.12

不受影响版本:Struts 2.3.34 及以上、Struts 2.5.13 及以上

四、攻击场景与危害

  1. 攻击条件
    • 目标系统使用受影响的 Struts2 版本。
    • 启用了 REST 插件(默认可能未启用,但部分应用会显式配置)。
    • 攻击者可构造恶意 XML 请求(如通过 Burp Suite 修改请求头和请求体)。
  2. 危害等级:高危(CVSS 评分 9.8/10)
    • 远程代码执行:攻击者可直接执行系统命令,获取服务器控制权。
    • 数据泄露:通过命令执行读取敏感文件或数据库信息。
    • 内网渗透:以受感染服务器为跳板,进一步攻击内网其他系统。

五、检测与复现

  1. 检测方法
    • 版本检查:通过应用日志或管理界面确认 Struts2 版本。
    • 请求模拟:使用 Burp Suite 发送 Content-Type: application/xml 的请求,观察是否返回 500 错误(可能触发漏洞)。
  2. 复现步骤(示例)
    • 环境搭建:使用 Docker 启动存在漏洞的 Struts2 应用(如 vulhub/struts2/s2-052)。
    • 构造请求
      1. 访问目标 URL(如 http://target/orders/3/edit)。
      2. 拦截请求,修改 Content-Type 为 application/xml
      3. 替换请求体为恶意 XML(如上述示例)。
    • 验证结果:若服务器返回 500 错误且目标系统执行了命令(如弹出计算器),则漏洞存在。

六、修复与防护建议

  1. 升级框架:立即升级至 Struts2 2.3.34 或 2.5.13 及以上版本。
  2. 临时缓解措施
    • 禁用 REST 插件:若无需 REST 功能,可在 struts.xml 中移除相关配置。
    • 限制 XML 处理:通过自定义 XStreamPermissionProvider 限制允许反序列化的类。
  3. 输入验证与过滤:对用户输入的 XML 数据进行严格校验,禁止特殊字符或恶意语法。
  4. 安全防护工具
    • 部署 WAF(Web 应用防火墙),拦截包含恶意 XML 特征的请求。
    • 使用 RASP(运行时应用自我保护) 技术监控异常行为。

七、历史案例与影响

2017 年大规模攻击:漏洞公开后,互联网上出现大量利用代码,导致全球数千台服务器被入侵。

企业级应用风险:金融、电商等行业的 Struts2 应用若未及时修复,可能面临数据泄露或业务中断。

 结语    

超级努力

追求极致

!!!

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

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

相关文章

RS触发器Multisim电路仿真——硬件工程师笔记

目录 1 RS触发器基础知识 1.1 工作原理 1.2 电路结构 1.3 特点 1.4 应用 1.5 设计考虑 1.6 总结 2 与非门实现基本RS触发器 2.1 电路结构 2.2 工作原理 2.3 特点 2.4 总结 3 或非门实现基本RS触发器 3.1 电路结构 3.2 工作原理 3.3 特点 3.4 总结 4 与非门实…

提示技术系列(12)——程序辅助语言模型

什么是提示技术&#xff1f; 提示技术是实现提示工程目标的具体技术手段&#xff0c;是提示工程中的“工具库”。 什么又是提示工程&#xff1f; 提示工程是指通过设计、优化和迭代输入到大语言模型&#xff08;LLM&#xff09;的提示&#xff08;Prompt&#xff09;&#xff…

明远智睿H618:开启多场景智慧生活新时代

在数字化浪潮的推动下&#xff0c;智能设备正深刻地改变着我们的生活方式。明远智睿H618以其强大的功能和卓越的性能&#xff0c;在家庭娱乐、商业展示、教育培训和智能家居控制等多个领域展现出巨大的应用潜力&#xff0c;开启了多场景智慧生活的新时代。 家庭娱乐&#xff1…

探秘展销编辑器:相较于传统展销的卓越优势与甄选指南​

在竞争激烈的商业环境中&#xff0c;企业期望通过展销活动提升品牌知名度、推广产品和拓展市场&#xff0c;但传统展销方式存在诸多难题。一是场地限制&#xff0c;优质场地稀缺、租金贵、档期紧&#xff0c;场地空间和布局也不一定合适;二是展示形式单一&#xff0c;多为静态展…

第31篇:块设备与字符设备管理深度解析(基于OpenEuler 24.03)

块设备与字符设备管理深度解析&#xff08;基于OpenEuler 24.03&#xff09; 文章目录 块设备与字符设备管理深度解析&#xff08;基于OpenEuler 24.03&#xff09;一、设备基础概念体系1.1 块设备的核心特性与分类1.2 字符设备的流式数据模型1.3 设备标识系统&#xff1a;主设…

Django Channels WebSocket实时通信实战:从聊天功能到消息推送

引言 在Web开发中&#xff0c;实时通信功能&#xff08;如在线聊天、实时通知、数据推送&#xff09;已成为许多应用的核心需求。传统的HTTP协议由于其请求-响应模式的限制&#xff0c;无法高效实现实时通信。WebSocket作为一种全双工通信协议&#xff0c;为实时Web应用提供了…

day52 神经网络调参指南

目录 随机种子 内参的初始化 神经网络调参指南 参数的分类 调参顺序 初始化参数 batchsize的选择 学习率调整 激活函数的选择 损失函数的选择 模型架构中的参数 正则化系数 其他补充 随机种子 import torch import torch.nn as nn# 定义简单的线性模型&#xf…

.NET9 实现斐波那契数列(FibonacciSequence)性能测试

在 .NET 平台上实现 斐波那契数列 并使用 BenchmarkDotNet 进行性能测试&#xff0c;是评估不同算法实现方式性能表现的一种高效且标准化的方法。通过该方式&#xff0c;可以对比递归、迭代、记忆化递归以及结合高性能优化技术&#xff08;如 Span<T>、Memory<T> 和…

三、docker软件安装:gitlab,nexus,mysql8,redis,nacos,nginx

目录 1.gitlab安装 2.nexus安装 (1)下载启动 (2)设置中央仓库远程地址 (3)配置maven的settings.xml 3.mysql8安装 4.redis安装 5.nacos安装 6.nginx安装 1.gitlab安装 #创建目录 cd /usr/local/ mkdir docker cd docker/ mkdir gitlab_docker cd gitlab_docker…

【与AI+】SAP WEBGUI集成开发与SAP INTERNET服务的关系

前言&#xff1a;这是我的水水专栏第五篇文章&#xff0c;这个专栏呢&#xff0c;是放一些我向AI提问的问题&#xff0c;以及AI的回答。因为感觉真的好方便哈哈哈~ 我不是很确定我的专栏文章内容是否涉及版权&#xff0c;以及也不确定这些整合过的文字是否涉嫌抄袭&#xff0c…

浅谈几种js设计模式

JavaScript设计模式是开发中常用的一种解决方案&#xff0c;它们帮助开发者以一种更结构化、更易维护的方式编写代码。本文将深入介绍几种常见的JavaScript设计模式&#xff0c;包括单例模式、工厂模式、观察者模式和策略模式。 一、单例模式&#xff08;Singleton Pattern&am…

手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程

目录 一、虚拟 DOM 的核心概念 二、虚拟 DOM 到真实 DOM 的流程 三、手写虚拟 DOM 到真实 DOM 的实现 1. 定义虚拟 DOM 的结构&#xff08;VNode&#xff09; 2. 创建虚拟 DOM 转真实 DOM 的函数 3. 挂载虚拟 DOM 到页面 4. 更新虚拟 DOM 的过程&#xff08;Diff 算法简化…

jmm--volatile

指令重排基础概念 在现代处理器和编译器为了提高程序执行效率&#xff0c;会对指令进行优化&#xff0c;其中一种优化方式就是指令重排序。在单线程环境下&#xff0c;指令重排序不会影响最终执行结果&#xff0c;因为处理器和编译器会保证重排序后的执行结果与按照代码顺序执行…

【硬件开发】滤波电容的选择:原理、计算与多电压值应用实践

滤波电容的选择&#xff1a;原理、计算与多电压值应用实践 1. 引言 在现代电子系统中&#xff0c;稳定的电源供应是保证电路可靠运行的基础。然而&#xff0c;电源线上往往不可避免地存在各种噪声和纹波&#xff0c;这些干扰可能源自电源本身&#xff08;如整流后的脉动直流&…

【seismic unix数据生成-unif2】

Seismic Unix简介 Seismic Unix&#xff08;SU&#xff09;是由科罗拉多矿业学院&#xff08;Colorado School of Mines&#xff09;开发的开源地震数据处理软件包&#xff0c;专为地震勘探数据分析和研究设计。它提供了一系列命令行工具&#xff0c;支持从数据加载、处理到可…

【逆向思考 并集查找】P2391 白雪皑皑|省选-

本文涉及知识点 C并集查找 P2391 白雪皑皑 题目背景 “柴门闻犬吠&#xff0c;风雪夜归人”&#xff0c;冬天&#xff0c;不期而至。千里冰封&#xff0c;万里雪飘。空中刮起了鸭毛大雪。雪花纷纷&#xff0c;降落人间。 美能量星球&#xff08;pty 在 spore 上的一个殖民地…

一文讲清楚React中setState的使用方法和机制

文章目录 一文讲清楚React中setState的使用方法和机制1. setState是什么2. setState方法详解2.1 setState参数详解2.2 setState同步异步问题2.2.1 setState异步更新2.2.2 setState同步更新 一文讲清楚React中setState的使用方法和机制 1. setState是什么 React中&#xff0c;…

01_软件卓越之道:功能性与需求满足

引言 在软件的世界里&#xff0c;功能性是产品与用户之间的第一桥梁。一个软件即使拥有华丽的界面和极致的性能&#xff0c;如果不能解决用户的核心需求&#xff0c;也终将被市场淘汰。本文将深入探讨如何确保软件的功能性与用户需求完美契合。 1. 需求理解&#xff1a;从模糊…

StarRocks × Tableau 连接器完整使用指南 | 高效数据分析从连接开始

一、导语&#xff1a;为什么选择 StarRocks Tableau 连接器&#xff1f; 在当今数据驱动的商业环境中&#xff0c;企业不仅需要一个能够处理海量数据的高性能分析数据库&#xff0c;还需要一个直观、强大的可视化工具来解读数据背后的故事。StarRocks 作为新一代极速全场景 MP…

基于 SpringBoot+VueJS 助农生鲜销售系统设计与实现7000字论文实现

摘要本论文设计并实现了一个基于 SpringBoot 和 VueJS 的助农生鲜销售系统。系统采用前后端分离架构&#xff0c;前端使用 VueJS 框架实现用户界面&#xff0c;后端使用 SpringBoot 框架构建服务&#xff0c;通过 MyBatis 实现数据持久化。系统实现了农产品展示、在线购物、订单…