Struct2漏洞是什么?它如何影响我们的系统安全?

Struts2漏洞(Struct2 Vulnerability)是指Apache Struts2框架中存在的安全漏洞,这些漏洞可能导致远程命令执行、任意代码执行等严重安全问题,以下是关于Struts2漏洞的详细解答,包括原理、影响版本、解决方法以及具体示例:

Struct2漏洞是什么?它如何影响我们的系统安全?插图1

一、Struts2漏洞

漏洞编号 漏洞名称 漏洞描述 影响版本
S2-001 CVE-2007-4556 用户提交表单数据时,后端会将用户之前提交的参数值使用OGNL表达式解析,从而可能引发远程代码执行。 WebWork 2.1 (with altSyntax enabled) WebWork 2.2.5, Struts 2.0.0 Struts 2.0.8
S2-003 无CVE编号 Struts2解析参数名称使用了OGNL表达式,构建恶意OGNL表达式会造成注入。 Struts 2.0.0 Struts 2.1.8.1
S2-005 无CVE编号 同S2-003,通过OGNL表达式注入实现攻击。 无明确版本信息
S2-007 无CVE编号 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-008 CVE-2012-0391 通过特定方式构造OGNL表达式,实现远程代码执行。 无明确版本信息
S2-009 CVE-2011-3923 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-012 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-013/S2-014 无CVE编号 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-015 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-016 CVE-2013-2251 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-019 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-032 CVE-2016-3081 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-037 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-045 CVE-2017-5638 通过特定方式构造OGNL表达式,实现远程代码执行。 无明确版本信息
S2-045-1 无CVE编号 同S2-045,通过OGNL表达式实现攻击。 无明确版本信息
S2-045-3 无CVE编号 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-045-bypass 无CVE编号 绕过S2-045的安全限制,实现攻击。 无明确版本信息
S2-046 无CVE编号 同S2-045,通过OGNL表达式实现攻击。 无明确版本信息
S2-046-bypass 无CVE编号 绕过S2-046的安全限制,实现攻击。 无明确版本信息
S2-048 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-052 无CVE编号 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-053 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-057 无CVE编号 同上,利用OGNL表达式进行攻击。 无明确版本信息
S2-059 CVE-2019-0230 由于Apache Struts框架在强制执行时对某些标签属性值执行二次OGNL解析,导致远程代码执行。 Struts 2.0.0 – Struts 2.5.20
S2-DevMode 无CVE编号 开启开发模式后引入的安全风险。 无明确版本信息
S2-061 无CVE编号 同上,通过OGNL表达式实现攻击。 无明确版本信息
S2-062 CVE-2021-31805 同上,利用OGNL表达式进行攻击。 无明确版本信息

二、Struts2漏洞原理

Struts2漏洞的原理主要源于其对OGNL(Object Graphic Navigation Language)表达式的支持,OGNL是一种功能强大的表达式语言,允许开发者通过简单的语法访问和操作对象的任意属性和方法,这种灵活性也被攻击者利用,通过构造恶意的OGNL表达式来实现远程代码执行或任意代码执行。

当Struts2应用程序接收到包含恶意OGNL表达式的HTTP请求时,如果应用程序没有正确过滤或限制这些表达式的执行,就会导致攻击者能够在目标服务器上执行任意代码,进而窃取数据、破坏系统或进行其他恶意活动。

三、解决方法

为了防范Struts2漏洞的攻击,可以采取以下措施:

1、升级Struts2版本:确保使用的Struts2框架版本是最新的,或者至少是已经修复了已知漏洞的版本。

2、禁用动态表达式评估:如果不需要动态表达式评估功能,可以在struts.xml配置文件中设置<struts><constant name="struts.ognl.allowExpressionEvaluation" value="false"/>来禁用它。

Struct2漏洞是什么?它如何影响我们的系统安全?插图3

3、输入验证与过滤:对所有用户输入的数据进行严格的验证和过滤,防止恶意数据的注入。

4、使用防火墙与入侵检测系统:部署防火墙和入侵检测系统(IDS),监控并阻止可疑的网络活动和攻击行为。

5、定期安全审计与漏洞扫描:定期对Web应用程序进行安全审计和漏洞扫描,及时发现并修复潜在的安全漏洞。

四、具体示例

以S2-059漏洞为例,该漏洞是由于Apache Struts框架在强制执行时对某些标签属性值执行二次OGNL解析导致的,攻击者可以通过构造特定的HTTP请求来利用此漏洞执行任意代码。

GET /example/test?id=%{(#container=#context['com.opensymphony.xwork2.ActionContext.container'])(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))(#res=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream()))} HTTP/1.1
Host: target.com

这个请求中的id参数包含了恶意的OGNL表达式,当服务器处理这个请求时,会执行该表达式并返回结果,从而导致远程代码执行。

Struct2漏洞是什么?它如何影响我们的系统安全?插图5

Struts2漏洞是一个需要高度重视的安全问题,通过了解其原理、影响范围以及解决方法,并采取相应的安全措施,可以有效地降低被攻击的风险。

小伙伴们,上文介绍struct2漏洞的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/88897.html

小末小末
上一篇 2024年11月2日 16:13
下一篇 2024年11月2日 16:55

相关推荐