本系列文章将详细分析 Java 流行框架 Struts2 的历史漏洞,今后关于 Struts2 新的漏洞分析,也将更新于 Struts2-Vuln 项目上。该系列仅是笔者初学 Java代码审计 的一些记录,也希望能够帮助到想学习 Java代码审计 的朋友 。如有任何问题,欢迎 issue 。分析文章均来自 个人博客 ,转载请注明出处。
漏洞概要
Struts2-007是一个目录遍历漏洞。
影响版本: Struts 2.0.0 - Struts 2.2.3 。更多详情可参考官方通告:https://cwiki.apache.org/confluence/display/WW/S2-007
漏洞环境
Apache Tomcat/8.5.47+struts-2.0.8
下载地址:http://archive.apache.org/dist/struts/binaries/struts-2.0.8-all.zip
https://github.com/vulhub/vulhub/tree/master/struts2/s2-007
漏洞分析
在 Struts2 中,可以将 HTTP 请求数据注入到实际业务 Action 的属性中。而这些属性可以是任意类型的数据,通
漏洞修复
下图右边为官方修复后的代码(左图struts-core-2.0.8,右图为struts-core-2.0.12),
参考
https://cwiki.apache.org/confluence/display/WW/S2-007
http://www.java2s.com/Code/Jar/x/Downloadxwork206jar.htm
Struts2漏洞目录
S2-001 - 远程代码利用表单验证错误
S2-002 - <s:url>和<s:a>标记上的跨站点脚本(XSS)漏洞
S2-003 - XWork ParameterInterceptors旁路允许OGNL语句执行
S2-004 - 提供静态内容时的目录遍历漏洞
S2-005 - XWork ParameterInterceptors旁路允许远程命令执行
S2-006 - XWork中的多个跨站点脚本(XSS)生成错误页面
S2-007 - 当出现转换错误时,用户输入被评估为OGNL表达式
S2-008 - Struts2中的多个关键漏洞
S2-009 - ParameterInterceptor漏洞允许远程命令执行
S2-010 - 当使用Struts 2令牌机制进行CSRF保护时,可能会因滥用已知会话属性而绕过令牌检查
S2-011 - 长请求参数名称可能会显着提高DOS攻击的有效性
S2-012 - 展示应用程序漏洞允许远程命令执行
S2-013 - URL和锚标记的includeParams属性中存在的漏洞允许远程命令执行
S2-014 - 强制参数包含在URL和锚标记中引入的漏洞允许远程命令执行,会话访问和操作以及XSS攻击
S2-015 - 通配符匹配机制引入的漏洞或OGNL表达式的双重评估允许远程命令执行。
S2-016 - 通过操作前缀为“action:”/“redirect:”/“redirectAction:”的参数引入的漏洞允许远程命令执行
S2-017 - 通过操作前缀为“redirect:”/“redirectAction:”的参数引入的漏洞允许打开重定向
S2-018 - Apache Struts2中的访问控制漏洞
S2-019 - 默认情况下禁用动态方法调用
S2-020 - 将Commons FileUpload升级到版本1.3.1(避免DoS攻击)并添加’class’以排除ParametersInterceptor中的params(避免ClassLoader操作)
S2-021 - 改进了ParametersInterceptor和CookieInterceptor中被排除的参数,以避免ClassLoader操作
S2-022 - 在CookieInterceptor中扩展排除的params以避免操纵Struts的内部
S2-023 - 令牌的生成值可以预测
S2-024 - 错误的excludeParams会覆盖DefaultExcludedPatternsChecker中定义的那些
S2-025 - 调试模式和公开的JSP文件中的跨站点脚本漏洞
S2-026 - 特殊顶级对象可用于访问Struts的内部
S2-027 - TextParseUtil.translateVariables不过滤恶意OGNL表达式
S2-028 - 使用具有损坏的URLDecoder实现的JRE可能会导致基于Struts 2的Web应用程序中的XSS漏洞。
S2-029 - 在标记属性中对原始用户输入进行评估时,强制双OGNL评估可能导致远程代码执行。
S2-030 - I18NInterceptor中可能的XSS漏洞
S2-031 - XSLTResult可用于解析任意样式表
S2-032 - 启用动态方法调用时,可以通过方法:前缀执行远程执行代码。
S2-033 - 使用REST插件时可以执行远程执行代码!启用动态方法调用时的运算符。
S2-034 - OGNL缓存中毒可能导致DoS漏洞
S2-035 - 动作名称清理容易出错
S2-036 - 在标签属性中对原始用户输入进行评估时,强制双OGNL评估可能导致远程代码执行(类似于S2-029)
S2-037 - 使用REST插件时可以执行远程执行代码。
S2-038 - 可以绕过令牌验证并执行CSRF攻击
S2-039 - Getter作为行动方法导致安全绕过
S2-040 - 使用现有默认操作方法输入验证绕过。
S2-041 - 使用URLValidator时可能发生DoS攻击
S2-042 - “公约”插件中可能的路径遍历
S2-043 - 在生产中使用Config Browser插件
S2-044 - 使用URLValidator时可能发生DoS攻击
S2-045 - 基于Jakarta Multipart解析器执行文件上载时可能的远程执行代码。
S2-046 - 基于Jakarta Multipart解析器执行文件上传时可能的RCE(类似于S2-045)
S2-047 - 使用URLValidator时可能发生DoS攻击(类似于S2-044)
S2-048 - Struts 2.3.x系列中Struts 1插件示例中的Struts Showcase应用程序中可能的RCE
S2-049 - DoS攻击可用于Spring安全操作
S2-050 - 使用URLValidator时的正则表达式拒绝服务(类似于S2-044和S2-047)
S2-051 - 远程攻击者可能在使用Struts REST插件时通过发送精心设计的xml请求来创建DoS攻击
S2-052 - 使用带有XStream处理程序的Struts REST插件处理XML有效负载时可能发生的远程代码执行攻击
S2-053 - 在Freemarker标记中使用无意表达而不是字符串文字时可能发生的远程执行代码攻击
S2-054 - 使用Struts REST插件时,可以使用精心设计的JSON请求执行DoS攻击
S2-055 - Jackson JSON库中的RCE漏洞
S2-056 - 使用Struts REST插件时,可以使用精心设计的XML请求执行DoS攻击
S2-057 - 当alwaysSelectFullNamespace为true(由用户或插件如Convention Plugin)时可能执行远程代码执行,然后:结果使用没有命名空间,同时,其上层包没有或通配符名称空间,类似于结果,当使用没有值和动作集的url标记时,它的上层包没有或通配符命名空间。