S2-003 漏洞就出现在 com.opensymphony.xwork2.interceptor.ParametersInterceptor 拦截器处理时, doIntercept 方法对提交的参数对值栈中的数据进行赋值,同时进行解析,此时过滤不严导致可以通过 ognl 表达式操作值栈中 map/context 栈 的对象来执行方法,进而导致命令执行。 首先我们可以先看看 ognl 取出 context/map 栈中...
0x05 漏洞总结 通过本篇的分析我们可以了解到S2-003与S2-005的核心在于ParametersInterceptor在对请求中的参数进行解析时会对key进行OGNL的表达式解析,并且过滤不严谨,可以通过编码绕过。 S2-003与S2-005算是Struts2框架的通用问题,其不需要依赖于某个特定的写法,即不属于安全开发规范中,所以影响范围相比于S2-001会更...
S2-003 漏洞就出现在 com.opensymphony.xwork2.interceptor.ParametersInterceptor 拦截器处理时, doIntercept 方法对提交的参数对值栈中的数据进行赋值,同时进行解析,此时过滤不严导致可以通过 ognl 表达式操作值栈中 map/context 栈 的对象来执行方法,进而导致命令执行。 首先我们可以先看看 ognl 取出 context/map 栈中...
五、 POC: 其实S2-003是S2-005的前身,他的POC即为S-005的缩小版,因为S2-003之后官方偷偷修改安全配置,默认让SecurityMemberAccess(管理ognl权限的类)的allowStaticMethodAccess为false,这里简单把S2-005的POC去掉&('\u0023_memberAccess.allowStaticMethodAccess\u003dtrue')(bla)(bla)这句话 ?('\u0023context[\'...
深入探讨Struts2系列漏洞,特别是S2-003和S2-005,需要从参数拦截器的处理流程开始。参数拦截器,即ParametersInterceptor,负责接收并赋值提交的参数,以及对请求参数进行解析。这个过程中,如果不严格过滤,攻击者可以利用OGNL表达式来操控栈中map或context对象,进而实现命令执行。OGNL表达式可以用来从栈中获取...
Struts2漏洞之S2-016漏洞分析与exp编写 有:S2-003,S2-005,S2-007,S2-008,S2-009,S2-012~S2-016,下面逐一简要说明。 一、S2-003 受影响版本:低于Struts 2.0.12 struts2会将http的每个参数名解析为ongl语句执行(可理解为java代码)。ongl表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,...
0x00 漏洞概述 S2-009是S2-003与S2-005的补丁绕过,当时的补丁是增加了正则以及相关的限制(这些限制可以通过执行OGNL表达式进行修改),主要的防御还是正则。 这次的问题还是出现在ParameterInterceptor这个拦截器上,其漏洞原理类似于二次注入,先将Payload注入到上下文中,取出来时通过某个特定语法就可以执行之前设置过的Payloa...
Struts2 漏洞分析系列 - S2-009/003与005的补丁绕过 0x00 漏洞概述 S2-009是S2-003与S2-005的补丁绕过,当时的补丁是增加了正则以及相关的限制(这些限制可以通过执行OGNL表达式进行修改),主要的防御还是正则。 这次的问题还是出现在ParameterInterceptor这个拦截器上,其漏洞原理类似于二次注入,先将Payload注入到上下文中...
Struts 2 漏洞专题 | S2-003 漏洞简介# OGNL除其他功能外,还提供了广泛的表达式评估功能。 该漏洞使恶意用户可以绕过ParametersInterceptor内置的'#'使用保护,从而能够操纵服务器端上下文对象。 因此,例如,要将#session.user设置为“ 0wn3d”,可以使用以下参数名称:...
Struts2的代码执行问题最早要追溯到2010年,当时来自Google安全Team的Meder Kydyraliev发现可以通过用unicde编码的形式绕过参数拦截器对特殊字符“#”的过滤,造成代码执行问题,官方漏洞编号S2-003,我们可以在struts2官方的漏洞公告中看到如下文字,如图: 官方给出了利用代码,但是对却忽视了这个漏洞的威力,因为官方看到Meder...