千家信息网

Struts2-057 两个版本RCE漏洞实例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章跟大家分析一下"Struts2-057 两个版本RCE漏洞实例分析"。内容详细易懂,对"Struts2-057 两个版本RCE漏洞实例分析"感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希
千家信息网最后更新 2026年10月31日Struts2-057 两个版本RCE漏洞实例分析

这篇文章跟大家分析一下"Struts2-057 两个版本RCE漏洞实例分析"。内容详细易懂,对"Struts2-057 两个版本RCE漏洞实例分析"感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习"Struts2-057 两个版本RCE漏洞实例分析"的知识吧。

前言

2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由Semmle Security Research team的安全研究员Man YueMo发现。

该漏洞是由于在Struts2开发框架中使用namespace功能定义XML配置时,namespace值未被设置且在上层动作配置(Action Configuration)中未设置或用通配符namespace,可能导致远程代码执行。同理,url标签未设置value和action值且上层动作未设置或用通配符namespace时也可能导致远程代码执行,经过笔者自建环境成功复现漏洞且可以执行命令回显,文末有你们想要的 !

漏洞利用

笔者搭的环境分别是Strust2 2.3.20版本和 Strust2 2.3.34版本,漏洞利用大致分为三种方式:数值计算、弹出计算器、 命令回显。

2.1 数值计算

数值计算相对最简单,在URL上指定 %{100+200} 就可以发生跳转,得到计算的结果


2.2 弹出计算器

2.3.20版本的POC如下:

2.3.3 4版本参考的POC如下:


2.3 命令回显

两个版本都是利用com.opensymphony.xwork2.dispatcher.HttpServletResponse对象去打印命令执行后的回显数据

2.3.20版本的POC如下:

2.3.34版本的POC如下:

攻击后效果如下图

漏洞分析

在分析漏洞之前,需要配置struts.xml文件,这个文件就是struts2的核心配置文件,大多数的时候增减配置都需要操控这里;

总共两处需要注意,第一处一定要配置struts.mapper.alwaysSelectFullNamespace = true ,否则不能触发漏洞,这个配置的目的是设定是否一直在最后一个斜线之前的任何位置选定NameSpace;第二处result标签返回的类型选择 " redirectAction 或 chain" , 只有这两个配置选项的值是可以将action转发或者重定向;关于type具体可以参考下图


说完了配置,开始动态分析。漏洞位于

struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class

this.namespace这个成员的值来自于getNamespace()方法,再通过getUriFromActionMapping()返回URI字符串;

通过getUriFromActionMapping获取的值赋给了tmpLocation变量,接着表达式进入setLocation方法

再通过super.execute方法调用了ServletActionResult ,而在execute方法体内跟进了conditionalParse方法,在这个方法内调用了ONGL执行的关键方法translateVariables。

获得的param值传入到translateVariables()方法内,最终在OnglTextPaser里导致了OGNL表达式执行。


再弹出计算器后获得lastFinalLocation的值为当前执行后的句柄,这个值作为响应跳转的action地址,也就是在浏览器中弹出计算器后在地址栏中出现的URI

到这里弹出计算器的分析到此为止,接下来看下基于命令执行回显结果的分析,基本上流程和上述一样,唯一不同之处lastFinalLocation返回的值是NULL,这也就引发出提交后没有做302的跳转,依旧是当前的action,并且返回的值是200

知道了原理后小同事用python实现了exp检测脚本,此脚本用途仅供学习研究;

防御措施

1. 将框架版本升级到官方最新版本;

2. 对于Web应用来说,尽量保证代码的安全性;

3. 对于IDS规则层面来说,数值计算和弹计算器返回的状态码都是302,并且Location跳转字段含有特征句柄字符串;如果是命令回显返回的200状态码,且有命令结果输出;

关于Struts2-057 两个版本RCE漏洞实例分析就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下网站!

漏洞 版本 分析 配置 方法 命令 两个 计算器 实例 实例分析 代码 数值 安全 文件 结果 学习 上层 内容 动作 句柄 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 北京路客互联网科技有限公司 科技创新与互联网经济 网络科技有限互联网 喔噻互联网科技 互联网科技英文 亿策互联网科技 广州互联网络科技有限公司 银川新华互联网科技学校地址 金融科技与互联网金融相同和不同 彤创互联网科技有限公司 昊天互联网科技有限公司 崇明区互联网教育科技售后服务 宜昌元轩互联网科技有限公司 每天都有哪些好的互联网科技 郑州欣桑互联网科技有限公司 吉林省码上互联网科技电话 互联网科技平台产品运营 西安左小互联网科技有限公司 前海云享互联网科技 凡科互联网科技 奇士达互联网科技 睿民互联网科技 海南购全球互联网科技 北京大学互联网科技怎么样 互联网科技项目计划书材料类 畅思互联网科技 互联网科技新闻 广东猫王互联网科技有限公司电话 互联网科技创新方面的资料
0