返回

揭秘 Apache Struts2 的远程命令执漏洞 (S2-015): 深度复现及修复秘诀

见解分享

Apache Struts2 远程代 Exec 漏洞 (S2-015) 复现及修复指南

漏洞概述

漏洞探秘:复现 S2-015 漏洞

场景设定:

  • 安装了 Apache Struts2 2.3.14.2 及其 strutss2-java-plugin:2.3.14.2 组件的 Web 应用

复现流程:

  1. 构造恶意 OGnl

    • 构造一个恶意的 OGnl (Object-Graph Navigation Language)表达式,该表达式可以调用 Java 方法并执任意代。
  2. 构造 CSRF 攻击链接

    • 将构造的 OGnl 表达式嵌入一个 CSRF (跨站请求伪) 攻击链接中,该链接指向目标 Web 应用。
  3. 诱导受害者执动作

    • 诱导受害者在一个不信任的网站上执包含恶意 OGnl 的 CSRF 链接,触发远程代执漏洞。

漏洞攻防:修复 S2-015 漏洞

修复措施:

  • 升级 Apache Struts2 库

    • 将 Apache Struts2 组件升级到最新版本,该版本已修复 S2-015 漏洞。
  • 启用严格表达式语言验证

    • 通过 web.xml 配置启用严格的 OGnl 验证,以阻止未经验证的 OGnl。
  • 限制 OGnl 访问

    • 通过 struts.xml 配置,限制对 OGnl 的访问,以防止攻击者调用危险的方法。
  • 部署 Web 应用防火墙 (WAF)

    • 部署 WAF 以检测和阻止恶意 OGnl 请求。

进阶探索:沙箱绕过攻击

S2-015 漏洞最初旨在限制不受信任的 OGnl 的执。然而,攻击者开发了沙箱绕过攻击,允许他们在受限的环境中执代。

沙箱绕过攻击方法:

  • 使用 OGnl 解析器

    • 利用 OGnl 解析器绕过沙箱限制,在受限的上下文中访问 Java 对象。
  • 重定义核心类

    • 重定义 Struts2 的核心类,例如 #findValue,以绕过沙箱检查。
  • 使用黑魔法攻击

    • 利用不常见的 Java 功能或库来绕过沙箱限制,例如 Java 序列化或 JNDI。

总结

掌握 Apache Struts2 远程代执漏洞 (S2-015) 的复现和修复技巧,可有效抵御漏洞威胁,确保 Web 应用的安。

行动指南:

  • 立即升级 Apache Struts2 组件。
  • 部署防火墙和启用严格的 OGnl 验证。
  • 提高对沙箱绕过攻击的意识,并采取措施加以防御。