Struts2漏洞(Struct2 Vulnerability)是指Apache Struts2框架中存在的安全漏洞,这些漏洞可能导致远程命令执行、任意代码执行等严重安全问题,以下是关于Struts2漏洞的详细解答,包括原理、影响版本、解决方法以及具体示例:
一、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"/>来禁用它。
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表达式,当服务器处理这个请求时,会执行该表达式并返回结果,从而导致远程代码执行。
Struts2漏洞是一个需要高度重视的安全问题,通过了解其原理、影响范围以及解决方法,并采取相应的安全措施,可以有效地降低被攻击的风险。
小伙伴们,上文介绍struct2漏洞的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/88897.html