以下演示展示了通过 SSH 部署 Redcloud,然后部署 Metasploit。接着查看 Traefik 和附加到 Metasploit 的实时卷。最后,检查 Web 终端中 Metasploit 的数据库是否正常,删除容器,然后终止 Redcloud。
设置:```bash
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
部署:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloud 使用 PyYAML 来打印可用模板列表。它默认安装在大多数系统上。
如果没有,只需运行:```bash
pip install -r requirements.txt
Redcloud 有 3 种不同的部署方式:
1. **本地部署**
2. **远程部署,使用 ssh**。需要将你的公钥添加到目标的 `authorized_keys` 文件中。
3. **远程部署,使用 docker-machine**。运行 `eval (docker-machine env deploy_target)` 命令以预加载 docker-machine 的环境,然后运行 `redcloud.py`。Redcloud 会自动检测你的 docker-machine,并高亮与 docker-machine 部署相关的菜单项。
___
<h4 align="center">
<b>模板</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Redcloud 模板">
</p>
___
**简要说明:**
`redcloud.py` 部署一个 [Portainer](https://www.portainer.io/) 堆栈,**预加载了许多供你攻击行动使用的工具模板**,基于 Docker 运行。部署完成后,通过 [Web 界面](#screenshots) 控制 Redcloud。使用 [Traefik](https://traefik.io/) 作为反向代理。可使用系统自带的 `ssh` 或 `docker-machine` 轻松远程部署到你的目标服务器。
* :rocket: 是否曾想过只需点击几下就能在云中启动一个 Kali?
* :package: 想在工具、技术和阶段之间建立清晰的隔离?
* :ambulance: 监控你的扫描和 C2 的健康状况?
* :fire: 跳过设置钓鱼活动的系统管理工作,更快地获取权限?
* :smiling_imp: 好奇如何构建*理想的攻击基础设施?
使用 Web UI 监控、管理并**与每个容器交互**。使用流畅的 Web 终端,就像使用自己的终端一样。通过 Portainer 简洁的 UI 创建卷、网络和端口转发。
借助数据中心级互联网的力量,部署并处理所有你喜爱的工具和技术 :rocket:
___
*在接下来的部分,我们将更深入地探讨 Redcloud 的设计理念。不过你也可以直接上手,无需深入了解。*
___
* :book: **目录**
- [简介](#introduction)
- [特性](#features)
- [快速开始](#quick-start)
- [细节](#details)
- [Redcloud 架构](#redcloud-architecture)
- [部署工作流](#deployment-workflow)
- [网络](#networks)
- [卷](#volumes)
- [从终端访问容器](#accessing-containers-from-the-terminal)
- [访问文件](#accessing-files)
- [SSL 证书](#ssl-certificates)
- [停止 Redcloud](#stopping-redcloud)
- [Portainer 应用模板](#portainer-app-templates)
- [Traefik 反向代理](#traefik-reverse-proxy)
- [Redcloud 安全注意事项](#redcloud-security-considerations)
- [经过测试的部署候选方案](#tested-deployment-candidates)
- [故障排除](#troubleshooting)
- [用例](#use-cases)
- [截图](#screenshots)
- [贡献指南](#contribution-guideline)
- [托管 Redcloud](#hosting-redcloud)
- [灵感与致谢](#inspirations--shout-outs)
___
## 细节
### Redcloud 架构
* `redcloud.py`:使用 Docker 和 Portainer 启动/停止 Web 界面和应用模板。
* `portainer`:Portainer Web 界面。
* `traefik`:Traefik 反向代理容器,用于 Web 界面、API 和文件容器。某些模板已预先配置路由以方便使用。参见 `templates.yml`。
* `templates`:提供应用模板的 python3 `http.server` 容器。位于“内部”网络中。
* `cert_gen`:生成 SSL 证书的 [omgwtfssl](https://github.com/paulczar/omgwtfssl) 容器,采用常见最佳实践。
* https://your-server-ip/portainer:部署后的 Redcloud Web 界面。
* https://your-server-ip/files:Redcloud 的 `redcloud_files` 卷。你还可以访问 `redcloud_log` 容器内容,受与 Traefik 相同的 `.htpasswd` 保护。默认凭据:`admin:Redcloud`
* https://your-server-ip/api:Traefik 反向代理健康监控页面。显示路由、后端、返回码的实时统计信息。如果通过 Traefik 配置了反向回调植入数据,也会显示这些信息。
### 部署工作流
**Redcloud 部署工作流如下:**
1. 克隆/下载 Redcloud 仓库。
2. 运行 `redcloud.py`。
3. 从菜单中选择部署候选方案(本地、ssh、docker-machine)。
4. `redcloud.py` 自动执行:
* 检查目标机器上是否存在 `docker` 和 `docker-compose`。
* 如果缺失,则安装 `docker` 和 `docker-compose`。
* 使用 `docker-compose` 在目标上部署 Web 堆栈。
5. 部署完成后,`redcloud.py` 会输出 URL。前往 https://your-deploy-machine-ip/portainer。
6. 从 Web 界面设置用户名/密码。
7. 选择端点(列表中唯一的一个)。
8. 点击左侧菜单中的“应用模板”以访问模板 :rocket:
**应用模板部署工作流如下:**
1. 选择模板。
2. 如果你希望添加额外选项,选择“+ 显示高级选项”。
3. 根据需要添加端口映射、网络选项和卷映射。
4. 选择“部署容器”。
5. Portainer 将启动容器。如果需要拉取镜像,可能需要几分钟。如果你的服务器位于数据中心,此步骤会非常快。
6. 容器应已运行 :rocket:
7. Portainer 将重定向到“容器”页面。在那里,你可以:
a. 查看容器实时日志。
b. 检查容器详细信息(`docker inspect`)。
c. 查看容器实时统计信息(内存/CPU/网络/进程)。
d. 使用 Web shell 与容器交互。
e. 根据应用模板选择使用 `bash` 或 `sh`。从下拉菜单中相应选择。
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Redcloud 菜单">
</p>
### 网络
Redcloud 让你轻松试验网络和容器。
你可以创建使用不同驱动程序的额外网络,并按需将容器附加到这些网络。Redcloud 自带两个网络:`redcloud_default` 和 `redcloud_inside`。
### 卷
你可以通过共享卷在容器之间共享数据。Redcloud 自带 3 个卷:
* `certs`:包含由 [omgwtfssl](https://github.com/paulczar/omgwtfssl) 生成的证书的容器。
* `files`:标准文件共享卷。目前,当你浏览 https://your-server-ip/files 时,文件可用,并由 Traefik 反向代理容器直接从 `files` 卷提供。典型用例是将该卷附加到 Metasploit 容器,直接将有效载荷生成到 `files` 卷中。现在你可以通过 Traefik 的文件服务器路由直接提供你新鲜的有效载荷。
* `logs`:用于日志,也通过文件服务器提供。访问需要基本身份验证。默认为 `admin:Redcloud`。
### 从终端访问容器
如果你希望留在终端中与已部署的容器交互,使用 Docker 非常容易。需注意以下几点:
* 大多数容器有 `bash`,但有些使用 `sh`
* 所有 Redcloud 应用模板的容器名称以 `red_` 开头,例如 `red_msf-postgresql`
* 使用 Docker,你可以使用 `docker exec` 或 `attach` 与容器交互
* 推荐使用 `exec`,因为它会创建一个新进程
* `attach` 会直接连接到正在运行的进程,可能导致容器终止
* 如果 Redcloud 运行在:
* 本地或使用 `docker-machine`,直接在本地 shell 中输入命令即可
* 使用 `ssh`,首先 SSH 进入你的部署目标,然后运行以下命令
要开始与所需的已部署容器交互:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
如果你看到以下消息,说明bash未安装。在这种情况下,只需将/bin/bash替换为/bin/sh:```bash
docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: "/bin/bash": stat /bin/bash: no such file or directory": unknown
docker exec -it red_container-name /bin/sh
使用 `docker attach`,只需运行:```bash
> docker attach red_container-name
如果使用 attach,容器需要以 交互模式 启动,才能进入交互式 shell。
将浏览器指向 https://你的-redcloud-ip/files。
更多信息请参考 files 卷。
Redcloud 在部署时会生成一个新的 未签名 SSL 证书。
证书由 omgwtfssl 生成,实现了大多数最佳实践。
生成后:
默认情况下,它会将生成的证书转储到 /certs 目录,并同时以标准 YAML 格式输出到标准输出,使其易于在 Ansible 或其他使用 YAML 的工具中使用。
证书存储在一个名为 certs 的共享 Docker 卷中。如果在部署时在“+ 高级设置”中指定,你的容器可以访问此卷。Traefik 反向代理容器直接从其配置文件中获取证书。如果你想用自己的证书替换这些证书,只需替换此卷中的证书即可。
这也意味着你可以将生成的证书共享到其他容器中,例如 Empire 或 Metasploit 用于反向回调,或用于钓鱼活动。
大多数与 SSL 相关的配置可以在 traefik/traefik.toml 或 docker-compose.yml 文件中找到。
你可以直接从菜单停止 Redcloud。
在停止 Redcloud 之前,需要手动停止已部署的应用模板。 你可以使用 Portainer 的 web 界面或 docker rm -f 容器名称 来停止它们。
如果你想强制停止运行 Redcloud 的 Portainer 容器,只需在 redcloud/ 文件夹内运行 docker-compose kill。
本地 和 docker-machine 停止选项相同,因此它们被合并到同一个选项中。
Redcloud 使用 Portainer 来编排和与 Docker 引擎交互。Portainer 本身是一个很棒的项目,可以远程管理 Docker 部署。Portainer 还包含一个非常方便的模板系统,这是我们 Redcloud 部署的主要组件。
模板可以在 ./templates/templates.yml 中找到。Portainer 从一个专用容器(templates)获取模板文件。
Traefik 是一个出色的“云原生边缘路由器”。它取代了之前的 NGINX 反向代理设置。
部署期间会构建一个 Traefik 镜像,使用位于 traefik/Dockerfile 的 Dockerfile。它添加了一个包含 admin:Redcloud 凭据的 .htpasswd 文件。
默认情况下,部署会生成以下路由:
https://你的服务器-ip/portainerhttps://你的服务器-ip/fileshttps://你的服务器-ip/api身份验证基于 .htaccess 数据。
通过 Traefik API web 界面,你可以查看已部署的路由、监控健康状态以及实时指标。非常整洁。
你可以通过以下方式添加额外的标签,告诉 Traefik 将流量路由到哪里:
traefik/traefik.toml 文件docker-compose.yml 文件templates.yml 文件更多信息请参见官方文档。

Redcloud 部署时使用自签名 https 证书,并通过它代理所有与 web 控制台的交互。
然而,默认网络会暴露你的容器端口到外部世界。
你可以:
labels 以使用 Traefik 创建路由。请参阅 docker-compose.yml 文件获取灵感。此外:
docker 和 docker-machine 安装需要 root 权限。你可以按照官方文档降低权限要求。redcloud.py 使用 icanhazip.com 获取 Redcloud 的公网 IP 地址。| 部署目标 | 状态 |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Strech | ✔️ |
python --version 检查你的默认 python 版本。Redcloud 需要 python 3+。python3 而不是 python。redcloud.py 要求部署候选环境在其 .ssh/authorized_keys 中有公钥,并利用用户的公钥进行无密码认证。这是大多数 VPS 工作流程的默认配置。eval 命令即可。docker 和 docker-machine 安装需要 root 权限。你可以按照官方文档降低权限要求。rm -rf /opt/portainer/datapython3-distutils 包:apt-get install python3-distutils。portainer 将无法使用其默认卷位置 /opt/。要解决此问题,请打开 docker-compose.yml 文件,将 /opt/portainer/data:/data 替换为具有写入权限的文件夹,例如:/tmp/portainer/:/data,并在运行 Redcloud 之前创建 /tmp/portainer 目录。/files/ URI 即时提供。/files/ URI 获取日志。
msfconsole
欢迎任何帮助。这是一个副项目,因此可能缺少一些螺丝钉。最重要的是:
你可以在任何运行 Docker 的 Unix 服务器上托管 Redcloud。
Redcloud 旨在用于云环境,例如带有 ssh 的简单 VPS,甚至是 AWS EC2、GCP 等。
许多云提供商提供免费额度以便你熟悉其服务。许多列表和教程介绍了从主要供应商获得免费托管额度的方法。这个列表是一个很好的起点。
关于部署方法,我个人更喜欢使用 docker-machine,因为一旦你设置好云提供商的驱动程序,生成新机器并管理它们就会变得非常容易。如果你更喜欢使用 ssh,请务必查看 evilsocket 的 shellz 项目来管理你的密钥和配置文件。
Red Team Infrastructure Wiki - bluscreenofjeff
Automated Red Team Infrastructure Guide - rastamouse
Safe Red Team Infrastructure - Tim MalcomVetter
Red Baron - Coalfire Research
Rapid Attack Infrastructure - Obscurity Labs
Decker - Steven Aldinger
hideNsneak - Mike Hodges
最后,如果你希望看到你的工具被集成,请在 Twitter 上联系我。这个项目是在我的业余时间维护的。请关注 dev 分支以获取即将推出的功能。
Redcloud 最初是为了更方便地为信息安全学生部署培训环境而开发的。
如果你想关注此项目的更新: