S2-003 漏洞就出现在 com.opensymphony.xwork2.interceptor.ParametersInterceptor 拦截器处理时, doIntercept 方法对提交的参数对值栈中的数据进行赋值,同时进行解析,此时过滤不严导致可以通过 ognl 表达式操作值栈中 map/context 栈 的对象来执行方法,进而导致命令执行。 首先我们可以先看看 ognl 取出 context/map 栈中...
其实S2-003是S2-005的前身,他的POC即为S-005的缩小版,因为S2-003之后官方偷偷修改安全配置,默认让SecurityMemberAccess(管理ognl权限的类)的allowStaticMethodAccess为false,这里简单把S2-005的POC去掉&('\u0023_memberAccess.allowStaticMethodAccess\u003dtrue')(bla)(bla)这句话 ?('\u0023context[\'xwork.Method...
深入探讨Struts2系列漏洞,特别是S2-003和S2-005,需要从参数拦截器的处理流程开始。参数拦截器,即ParametersInterceptor,负责接收并赋值提交的参数,以及对请求参数进行解析。这个过程中,如果不严格过滤,攻击者可以利用OGNL表达式来操控栈中map或context对象,进而实现命令执行。OGNL表达式可以用来从栈中获取对...
接下来会继续对下一个参数进行解析,通过S2-003与S2-005的分析中我们得知,如果能够通过ParameterInterceptor的相关验证逻辑,那么是会对参数名进行一次OGNL表达式解析的,S2-003与S2-005的漏洞也出于此,后续的修复方案是增加了静态方法相关的禁用以及一个用于验证参数名的正则。 但是在S2-009中我们可以通过top['message']...
0x05 漏洞总结 通过本篇的分析我们可以了解到S2-003与S2-005的核心在于ParametersInterceptor在对请求中的参数进行解析时会对key进行OGNL的表达式解析,并且过滤不严谨,可以通过编码绕过。 S2-003与S2-005算是Struts2框架的通用问题,其不需要依赖于某个特定的写法,即不属于安全开发规范中,所以影响范围相比于S2-001会更...
一、 漏洞简介 Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品: Struts 1和Struts 2。 ApacheStruts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)。该漏洞是...
Struts 2 漏洞专题 | S2-003 漏洞简介# OGNL除其他功能外,还提供了广泛的表达式评估功能。 该漏洞使恶意用户可以绕过ParametersInterceptor内置的'#'使用保护,从而能够操纵服务器端上下文对象。 因此,例如,要将#session.user设置为“ 0wn3d”,可以使用以下参数名称:...
S2-009是S2-003与S2-005的补丁绕过,当时的补丁是增加了正则以及相关的限制(这些限制可以通过执行OGNL表达式进行修改),主要的防御还是正则。 这次的问题还是出现在ParameterInterceptor这个拦截器上,其漏洞原理类似于二次注入,先将Payload注入到上下文中,取出来时通过某个特定语法就可以执行之前设置过的Payload。
S2-009是S2-003与S2-005的补丁绕过,当时的补丁是增加了正则以及相关的限制(这些限制可以通过执行OGNL表达式进行修改),主要的防御还是正则。 这次的问题还是出现在ParameterInterceptor这个拦截器上,其漏洞原理类似于二次注入,先将Payload注入到上下文中,取出来时通过某个特定语法就可以执行之前设置过的Payload。 影响版本:...
Struts2 系列漏洞 - S2-003、S2-005 #一、前言 前面一篇文章也有提到 struts2 在进入 action 进行逻辑处理前(以及逻辑处理后),会进入 18 个拦截器栈中对请求进行必要的处理(如果没有自定义拦截器的话,可以在 struts-default.xml 中找到相应的拦截器栈,如下下图【这里只有 17 个拦截器 233 】)。下图为 struts2...