Java代码审计之Struts2-007(五)

本系列文章将详细分析 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标记时,它的上层包没有或通配符命名空间。

文章作者: Mochazz
文章链接: https://mochazz.github.io/2020/07/01/Java代码审计之Struts2-008/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mochazz's blog