应该是S2-048目前最详细的一篇了..

漏洞影响

Struts 2.3.x系列中的Showcase应用

使用了struts1 插件,并在使用ActionMessages时将客户端可控的参数拼接传递给new ActionMessage,如下图

插件介绍

Struts1插件主要是为了可以在Struts2应用程序中使用Struts1操作和ActionForms,插件提供了一个包装类org.apache.struts2.s1.Struts1Action来对Struts1的 Action 包装成为 Struts2中的Action,要在Struts 2应用程序中使用现有的Struts 1操作和ActionForms需要在对应的struts.xml中进行配置,如下图

触发流程

拿官网中漏洞公告提到的应用Showcase做演示,将程序导入到eclipse中方便分析。根据官网给出的关键字进行搜索,发现 org.apache.struts2.showcase.integration.SaveGangsterAction 满足漏洞触发条件。

根据对应的配置文件找到对应的action为/integration/saveGangster,将showcase在tomcat中跑起来,访问/integration/saveGangster,将断点设置在org.apache.struts2.s1.Struts1Action的execute方法中,发起一次请求来试试。

我们看到88行获取了一个Action对象,这个对象就是存在漏洞那个class

99行调用了存在漏洞的SaveGangsterAction的execute方法,并将我们的表单请求封装到了actionForm中

org.apache.struts2.showcase.integration.SaveGangsterAction的execute方法在45行在new ActionMessage对象时将表单的name参数拼接到了构造方法传递的参数中。通过org.apache.struts.action.Action.addMessages(HttpServletRequest request, ActionMessages messages)将请求与ActionMessages一起封装,使用了一个全局变量Globals.MESSAGE_KEY来做标识

在String org.apache.struts2.s1.Struts1Action.execute()的101行通过Globals.MESSAGE_KEY将这个ActionMessages获取了出来,进入后面的流程

108行调用了getText(msg.getKey()),将我们拼接后的参数后传入了getText(),最后在com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage(String key, Locale locale, ValueStack valueStack, Object[] args, String defaultMessage)方法的683行调用了TextParseUtil.translateVariables来执行了ognl表达式

Struts S2-048 RCE漏洞分析的更多相关文章

  1. Struts2-057/CVE-2018-11776两个版本RCE漏洞分析(含EXP)

    0x01 前言 2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由Sem ...

  2. Joomla 3.0.0 - 3.4.6 RCE漏洞分析记录

    0x00  前言 今天早上看到了国内几家安全媒体发了Joomla RCE漏洞的预警,漏洞利用的EXP也在Github公开了.我大致看了一眼描述,觉得是个挺有意思的漏洞,因此有了这篇分析的文章,其实这个 ...

  3. Sunlogin RCE漏洞分析和使用

    介绍   前两天网上曝出了关于向日葵远控工具(Sunlogin)Windows个人版的RCE漏洞POC.因为利用简单并且网上出现了公开的自动化扫描脚本,所以测试的人很多,也出现了一些真实攻击.漏洞的问 ...

  4. 向日葵远程RCE漏洞分析及漏洞利用脚本编写

    0x00 漏洞概述 向日葵是一款免费的,集远程控制电脑.手机.远程桌面连接.远程开机.远程管理.支持内网穿透等功能的一体化远程控制管理软件.如果想要手机远控电脑,或者电脑远控手机可以利用向日葵:如果是 ...

  5. Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

    0x00 漏洞描述 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003.windows2008.windows2008 R2.windows ...

  6. Spring Core rce漏洞分析(CVE-2022-22965)

    漏洞描述: Springmvc框架参数绑定功能,绑定了请求里的参数造成变量注入,攻击者可以实现任意文件写入,漏洞点spring-beans包中. 漏洞编号: CVE-2022-22965 影响范围: ...

  7. Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)

    简介 Nuxeo Platform是一款跨平台开源的企业级内容管理系统(CMS).nuxeo-jsf-ui组件处理facelet模板不当,当访问的facelet模板不存在时,相关的文件名会输出到错误页 ...

  8. Joomla3.4.6 RCE漏洞深度分析

    笔者<Qftm>原文发布:https://www.freebuf.com/vuls/216512.html *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 0×00 背景 10月9 ...

  9. Spring Cloud Gateway actuator组建对外暴露RCE问题漏洞分析

    Spring Cloud gateway是什么? Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关.网关作为流量的,在微服务系统中有着非常作 ...

随机推荐

  1. 【等价转换】—— min/max 的转换与互相转换

    0. min 与 max 的转换 {max(X,Y)=X+Y−min(X,Y)min(X,Y)=X+Y−max(X,Y)min(X,Y)+max(X,Y)=X+Y" role="p ...

  2. python 发送163邮件

    可能还需要使用 邮箱第三方客户端的授权码. 网易163免费邮箱相关服务器信息 from email import encoders from email.header import Header fr ...

  3. redis的LRU算法(二)

    前文再续,书接上一回.上次讲到redis的LRU算法,文章实在精妙,最近可能有机会用到其中的技巧,顺便将下半部翻译出来,实现的时候参考下. 搏击俱乐部的第一法则:用裸眼观测你的算法 Redis2.8的 ...

  4. JPA Example 基本使用使用实例

    一.相关接口方法     在继承JpaRepository接口后,自动拥有了按“实例”进行查询的诸多方法.这些方法主要在两个接口中定义,一是QueryByExampleExecutor,一个是JpaR ...

  5. c# 获取某进程占用的内存(任务管理器显示的内存一致)

    最近写了看门狗的winform程序,需求要求显示监测的进程所占的内存大小 找了好几个方法,都和任务管理器显示的内存不一致 最后找到了一个解决方法 PerformanceCounter pf1 = ne ...

  6. 不同系统、不同存储格式(textfile, parquet)数据的传递

    描述: 本地测试环境hive中有数据,存储格式为textfile,现在要上传到公司开发环境,存储格式为parquet, 如何实现??? tb_textfile表---> local file - ...

  7. 关于jstl中碰到的Property 'username' not found on type java.lang.String异常

    在jstl的forEach循环的时候总是有异常,刚开始以为是把类的属性名打错了,因为显示的是Property not found,但就算从类文件里面复制属性名过来依然显示的是Property not ...

  8. ES6的一些知识学习

    一.基础 ES6 - 类: class A{ constructor(name,color){ this.name = name; this.color = color; } toString(){ ...

  9. 【学习】C++多态机制

    多态:静态(早绑定) 在编译阶段和链接就能确定功能调用的函数.     动态(晚绑定) 在程序运行时根据需要的功能确定调用的函数. 实现晚绑定就要定义虚函数,使用虚函数则会用到基类指针. 继承基类虚成 ...

  10. 20164318 毛瀚逸-----EXP5 MSF基础应用

    1. 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (成功) 1.2 一个针对浏览器的攻击, ...