搭建一个Drupal Core RCE(CVE-2019–6340 )漏洞的蜜罐

2024-03-06 06:48

本文主要是介绍搭建一个Drupal Core RCE(CVE-2019–6340 )漏洞的蜜罐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不久前,我开始了一个管理真实网络蜜罐的项目。最初我建立它是为了管理一些WordPress蜜罐,但在Drupalgeddon2出来后,使我不得不重新构建该项目。这意味着我需要相当长的一段时间才能最终发布它。现在,我终于能够分享我的努力成果了:https://gitlab.com/SecurityBender/webhoneypot-framework。

Webhoneypot框架是使用Python 3编写的,需要docker和docker-compose才能运行。你可以使用JSON和相应的docker-compose文件来配置蜜罐。docker-compose文件描述了用于蜜罐的容器及其设置,而JSON文件则用于配置框架如何检测攻击并获取蜜罐的快照。

JSON配置的基本结构如下所示:中国菜刀

{"docker_compose_file": "./docker-compose.yml","pre_start": "...","post_start": "...","snapshot_path": "./snapshots","snapshots": [...],"detections": [...]
}

docker_compose_file的选项非常简单。使用选项pre_start和post_start,用户可以在启动蜜罐后分别在启动前执行脚本。我通常使用它来调整Web根目录的文件权限和文件所有权。

该框架的主要功能是在检测到攻击后创建蜜罐的快照。目前,可以创建目录或MySQL数据库的快照。

要获取MySQL快照,应在快照下添加mysql_snapshot选项。这将会创建一个标准MySQL容器的MySQL转储(https://hub.docker.com/_/mysql):

{"type": "mysql_snapshot","mysql_container_name": "webhoneypot_mysql_1","mysql_user": "root","mysql_password": "Password123!","mysql_restore_path": "./mysql/config"
}

来自docker库的MySQL容器,允许通过将文件放入容器的/docker-entrypoint-initdb.d文件夹来恢复数据库转储。因此mysql_restore_path选项应指向该目录的挂载点。

另一个选项是使用folder_snapshot来创建目录快照:

{"type": "folder_snapshot","folder_path": "./apache/html"
},

这将创建指定文件夹的ZIP存档,并将其放在已配置的快照文件夹中。

为了检测攻击,webhoneypot框架目前仅支持folder_changed和file_contains。

检测方法folder_changed可以检测与初始快照相比的任意文件更改:奇热影视

{"type": "folder_changed","folder_path": "./apache/html","ignore_files": ["folder_to_ignore/"]
}

folder_path选项必须与folder_snapshot块中指定的选项匹配。为了减少干扰,可以忽略某些文件或文件夹。

第二个检测方法file_contains检测指定的文件是否包含特定的字符串或正则表达式:

{"type": "file_contains","file_path": "./nginx/logs/access.log","pattern": "pattern to search"
}

要运行该脚本,只需克隆存储库并运行webhoneypot.py:

$ git clone https://gitlab.com/SecurityBender/webhoneypot-framework.git && cd webhoneypot-framework
$ ./webhoneypot.py -h                                                                                             
usage: webhoneypot.py [-h] -c CONFIG option
Management script for docker-based web application honeypots
positional arguments:option                the honeypot option, can be[start|stop|init|update|reset]
optional arguments:-h, --help            show this help message and exit-c CONFIG, --config CONFIGthe honeypot configuration file

该脚本主要支持以下五个选项:

  • start:启动honeypot容器
  • 停止:停止蜜罐容器
  • init:初始化蜜罐(例如,第一次设置)并创建初始快照
  • 更新:更新蜜罐并创建新的初始快照
  • reset:快照蜜罐,检测更改并恢复初始快照

在野捕获 CVE-2019-6340

有了以上的基础,现在我们可以构建和配置Drupal蜜罐来尝试在野捕获CVE-2019-6340。CVE-2019-6340是Drupal core 中的RCE漏洞,它允许攻击者在主机系统上执行任意命令。

配置蜜罐

我已经为构建Drupalgeddon2蜜罐做了一个配置。你可以在GitLab上找到它。让我们克隆它并为CVE-2019-6340做准备。

$ git clone https://gitlab.com/SecurityBender/webhoneypot-drupal.git
$ cd webhoneypot-drupal

在目录中我们有多个目录和文件:

webhoneypot-drupal/
├── apache/
│   └── Dockerfile
├── nginx/
│   ├── config/
│   │   └── default.conf
│   └── Dockerfile
├── docker-compose.yml
├── drupal.json
└── drupal.sh

apache和nginx目录分别包含Apache和nginx容器的数据和配置文件。其中最重要的文件是docker-compose.yml和drupal.json。

docker-compose.yml包含了启动必要容器的所有信息:

version: '2'services:apache:build: apache/volumes:- ./apache/html:/var/www/html- ./apache/tmp:/tmpnetworks:- webhoneypotnginx:build: nginx/volumes:- ./nginx/config/default.conf:/etc/nginx/conf.d/default.conf:ro- ./nginx/logs:/var/log/nginxports:- "80:80"networks:- webhoneypotdepends_on:- apachenetworks:webhoneypot:driver: bridge

在此设置中,我们有一个Apache容器,它托管并运行Drupal和一个用作反向代理的nginx。我们将html和tmp目录挂载到Apache容器,以便从主机访问它们,并让我们拍摄快照以及恢复它们。出于同样的目的,我们还将日志目录挂载到了nginx容器。

主要配置在drupal.json中完成:

{"docker_compose_file": "./docker-compose.yml","pre_start": "","post_start": "./drupal.sh","snapshot_path": "./snapshots","snapshots": [{"type": "folder_snapshot","folder_path": "./apache/html"},{"type": "folder_snapshot","folder_path": "./apache/tmp"},{"type": "folder_snapshot","folder_path": "./nginx/logs"}],"detections": [{"type": "folder_changed","folder_path": "./apache/html","ignore_files": ["sites/default/files/php/twig/"]},{"type": "folder_changed","folder_path": "./apache/tmp","ignore_files": []},{"type": "file_contains","file_path": "./nginx/logs/access.log","pattern": "node/1\\?_format=hal_json"}]
}

首先,我们使用docker_compose_file指定用于通过docker-compose创建,启动和停止docker容器的文件。每次启动容器后,都会执行drupal.sh来调整./apache/html(Web根目录)目录的所有者和权限,并清除nginx访问日志。此外,我们将蜜罐配置为在每次重置后拍摄./apache/html,./apache/tmp和./nginx/logs目录的快照。我注意到很多drupalgeddon2都利用了/tmp中的drop文件,所以我添加了它。

最关键的是检测部分。你可能会看到我们想要检测./apache/html和./apache/tmp目录中的更改。检测到与初始快照不同的所有文件。因为Drupal将一些生成的文件存储在sites/default/files/php/twig/中,所以我们忽略对该目录的任何更改。检测的另一个选项是检查文件是否包含特定的正则表达式。在这种情况下,我们监控nginx访问日志中的典型的CVE-2019-6340 url。

运行蜜罐

配置蜜罐完成后,我们来获取易受攻击的Drupal版本(例如8.6.9),并将其解压缩到./apache/html目录中:

$ wget -q https://ftp.drupal.org/files/projects/drupal-8.6.9.zip
$ unzip drupal-8.6.9.zip -d ./apache/
$ mv ./apache/drupal-8.6.9 ./apache/html

现在让我们克隆Webhoneypot框架,并初始化Drupal蜜罐。使用./webhoneypot.py -c ../webhoneypot-drupal/drupal.json init初始化脚本,将启动并构建所需的容器。

$ ./webhoneypot.py -c ../webhoneypot-drupal/drupal.json init
2019-04-07 15:11:50,455 - DEBUG - Starting docker compose /opt/webhoneypot-drupal/docker-compose.yml ...
Creating network "webhoneypot-drupal_webhoneypot" with driver "bridge"
Building apache
[...]
Building nginx
[...]
Creating webhoneypot-drupal_apache_1 ... done
Creating webhoneypot-drupal_nginx_1  ... done
Press any key if honeypot setup is finished

初始启动成功,我们可以通过公共IP地址访问Drupal实例。配置(启用RESTful服务等) – 比我想象的更难 – 完成后我们按ENTER键,脚本将开始创建蜜罐的初始快照。

2019-04-07 15:23:17,604 - DEBUG - Creating snapshot "initial" ...
2019-04-07 15:23:17,621 - DEBUG - Create folder backup of "/opt/webhoneypot-drupal/apache/html" to "/opt/webhoneypot-drupal/snapshots/initial/_opt_webhoneypot-drupal_apache_html.zip" ...
2019-04-07 15:23:48,775 - DEBUG - Create folder backup of "/opt/webhoneypot-drupal/apache/tmp" to "/opt/webhoneypot-drupal/snapshots/initial/_opt_webhoneypot-drupal_apache_tmp.zip" ...
2019-04-07 15:23:48,787 - DEBUG - Create folder backup of "/opt/webhoneypot-drupal/nginx/logs" to "/opt/webhoneypot-drupal/snapshots/initial/_opt_webhoneypot-drupal_nginx_logs.zip" ...

测试蜜罐

一切运行良好,现在让我们来对它进行测试。我从@leonjza获取到了一个POC并运行了它:

$ python3 poc.py http://<my-ip>/ "id"     
CVE-2019-6340 Drupal 8 REST Services Unauthenticated RCE PoCby @leonjza
References:https://www.drupal.org/sa-core-2019-003https://www.ambionics.io/blog/drupal8-rce[warning] Caching heavily affects reliability of this exploit.
Nodes are used as they are discovered, but once they are done,
you will have to wait for cache expiry.
Targeting http://37.120.165.218/...
[+] Finding a usable node id...
[x] Node enum found a cached article at: 1, skipping
[+] Using node_id 2
[+] Target appears to be vulnerable!
uid=33(www-data) gid=33(www-data) groups=33(www-data)

POC成功被执行。现在让我们看看我们的检测是否正常:

$ ./webhoneypot.py -c ../webhoneypot-drupal/drupal.json reset
2019-04-07 17:04:11,767 - DEBUG - Creating snapshot "20190407_170411" ...
[...]
2019-04-07 17:04:48,115 - DEBUG - Stopping docker compose /opt/docker/webhoneypot-drupal/docker-compose.yml ...
Stopping webhoneypot-drupal_nginx_1  ... done
Stopping webhoneypot-drupal_apache_1 ... done
Removing webhoneypot-drupal_nginx_1  ... done
Removing webhoneypot-drupal_apache_1 ... done
Removing network webhoneypot-drupal_webhoneypot
2019-04-07 17:05:08,442 - INFO - Pattern "node/1\?_format=hal_json" detected in file!
2019-04-07 17:05:08,443 - DEBUG - Restoring snapshot "initial" ...
[...]

这就是一个现实世界的Drupal蜜罐,用于检测CVE-2019-6340攻击。

警告

一个被妥协的蜜罐可用于许多其他非法目的(例如加密货币挖矿,发送垃圾邮件,DoS等)。我强烈建议你们设置一个定期的cronjob(每15到30分钟)重置蜜罐。此外,你还可以通过限制容器的CPU时间,或通过主机防火墙来阻止某些传出连接。

这篇关于搭建一个Drupal Core RCE(CVE-2019–6340 )漏洞的蜜罐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779167

相关文章

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

JavaFX环境的搭建和一个简单的例子

之前在网上搜了很多与javaFX相关的资料,都说要在Eclepse上要安装sdk插件什么的,反正就是乱七八糟的一大片,最后还是没搞成功,所以我在这里写下我搭建javaFX成功的环境给大家做一个参考吧。希望能帮助到你们! 1.首先要保证你的jdk版本能够支持JavaFX的开发,jdk-7u25版本以上的都能支持,最好安装jdk8吧,因为jdk8对支持JavaFX有新的特性了,比如:3D等;

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen

CentOS 7 SVN的搭建和使用

https://subversion.apache.org/packages.html#centos 阿里云的ECS貌似已经自带了SVN [root@xxx ~]# svn --versionsvn, version 1.7.14 (r1542130)compiled Aug 23 2017, 20:43:38Copyright (C) 2013 The Apache Software Fo

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

搭建H1veCTF平台

An Easy / Quick / Cheap Integrated Platform H1ve是一款自研CTF平台,同时具备解题、攻防对抗模式。其中,解题赛部分对Web和Pwn题型,支持独立题目容器及动态Flag防作弊。攻防对抗赛部分支持AWD一键部署,并配备炫酷地可视化战况界面。 项目地址:https://github.com/D0g3-Lab/H1ve 更多请打开。。。