- 网络安全
- 应用安全
【免费下载链接】monkey
Infection Monkey - An open-source adversary emulation platform
本文是 Infection Monkey 系列教程的第 0 篇(对应仓库文档 docs/content/tutorials/first-steps.md),目标是带你在一台 Linux 主机上,用 Docker 快速搭建一个隔离、可随意折腾的"沙箱"实验环境:一个包含 Monkey Island 控制端(C2)、MongoDB 数据库和一台故意留有弱点的目标容器。读完本文,你将掌握 Infection Monkey 服务器环境的启动/关闭方法、如何通过浏览器访问 Monkey Island Web 界面,以及如何完成首次用户注册并进入 Getting Started 引导页——这些是继续完成后续"Hello, Monkey"漏洞利用实操教程的基础。
说明:本文基于仓库中提供的教程镜像与 docker-compose 编排文件 展开。教程环境为了便于学习与探索,其配置可能经过特殊定制,不适用于生产环境。若要在真实环境中部署官方正式版本,请参考仓库的 Setup 安装章节(如 Docker 部署文档)。
本教程的目标与适用场景
在开始使用 Infection Monkey 之前,你需要一个可以放心"捣乱"的实验环境。官方教程系列约定使用 Docker 搭建的沙箱,它的价值在于:
- 完全隔离:Monkey 在扫描和利用漏洞时不会波及你的真实网络;
- 一键复现:所有组件(控制端、数据库、靶机)都以容器形式声明在同一个 docker-compose.yaml 中,任何机器上都能得到一致的结果;
- 即用即弃:实验结束后执行
docker compose down即可整体拆除,不会在宿主机上留下运行残留。
后续的 Tutorial 1: Hello, Monkey(配置并实际利用一个 SSH 弱口令漏洞)将完全建立在本教程搭建的环境之上,因此请务必先完成本教程的环境准备与注册步骤。
前置条件:Docker 与 Docker Compose
本教程只要求宿主机安装两个工具:
dockerdocker-compose(或新版 Docker 自带的docker compose子命令)
你可以用下面的命令确认版本是否可用:
docker --version docker compose version由于沙箱中的monkey-island容器只支持 Linux(详见 Docker 部署文档),本教程适用于 Linux 主机;Windows/macOS 上的 Docker Desktop 不在此教程支持范围内。
沙箱环境的组成:三个容器各司其职
运行docker compose up后,你将得到 3 个容器。它们的角色如下:
| 容器名 | 镜像 | 作用 |
|---|---|---|
monkey-island | infectionmonkey/monkey-island:e7c59c79d | Infection Monkey 的命令与控制服务器(C2),提供 Web 界面与 API |
mongo | mongo:6.0 | MongoDB 数据库,Monkey Island 用它持久化配置、事件与凭证等数据 |
hello | infectionmonkey/ssh1 | 一台故意配置了弱口令 SSH 服务的"漏洞容器",供后续教程作为攻击目标 |
这三个服务在 docker-compose.yaml 中的关键配置如下:
version: '3' services: mongo: container_name: mongo hostname: mongo image: mongo:6.0 ports: - 27017:27017 volumes: - monkey-tutorial-db:/data/db monkey-island: container_name: monkey-island hostname: monkey-island image: infectionmonkey/monkey-island:e7c59c79d environment: - MONKEY_MONGO_URL=mongodb://mongo:27017/monkey_island_test ports: - 5000:5000 depends_on: - mongo hello: container_name: hello hostname: hello image: infectionmonkey/ssh1 command: '/usr/sbin/sshd -D && sh -c "trap : TERM INT; tail -f /dev/null & wait"' volumes: monkey-tutorial-db:几个值得注意的细节:
MONKEY_MONGO_URL环境变量决定了 Monkey Island 连接哪个 MongoDB。这里指向同网络的mongo容器(mongodb://mongo:27017/monkey_island_test),数据库名为monkey_island_test(教程专用)。从源码 monkey/monkey_island/cc/mongo_consts.py 可以看到,Monkey Island 默认读取该环境变量,未设置时才回退到mongodb://localhost:27017/monkey_island——这正是本教程用环境变量覆盖默认连接的原因。- 端口映射:
monkey-island把 HTTPS 端口 5000 暴露给宿主机(https://localhost:5000),mongo暴露 27017 便于调试。 - 命名卷
monkey-tutorial-db:MongoDB 的数据目录/data/db挂载到命名卷上,即使执行docker compose down后再次启动,数据仍会保留。 depends_on: mongo:保证 Monkey Island 在 MongoDB 就绪之后才启动,避免连接失败。
"hello" 容器是怎么变"弱"的
hello容器对应的镜像由仓库中的 ssh1.dockerfile 构建。该 Dockerfile 揭示了它的"漏洞"来源:
- 基于
ubuntu:jammy安装openssh-server; - 通过
sed显式开启密码认证(PasswordAuthentication yes); - 创建了用户名为
user、密码为password的账户(openssl passwd -1 password)。
也就是说,它是一台运行着 SSH 服务、且带有公开弱凭据user/password的靶机。这个凭据会在 Tutorial 1: Hello, Monkey 中作为 Infection Monkey 的爆破凭证使用。
启动沙箱环境
1. 获取编排文件
下载本教程配套的 docker-compose.yml 到本地目录:
wget <仓库中该文件的地址> -O docker-compose.yml # 或者直接从仓库页面复制该文件内容保存为 docker-compose.yml2. 启动全部容器
进入存放docker-compose.yml的目录,执行:
docker compose up首次运行时 Docker 会自动拉取mongo:6.0、infectionmonkey/monkey-island:e7c59c79d和infectionmonkey/ssh1三个镜像,然后按依赖顺序启动容器。若想在后台运行(不占用当前终端),可改用docker compose up -d。
3. 验证容器状态
启动完成后,确认 3 个容器都在运行:
docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"正常输出类似:
CONTAINER ID NAMES STATUS 737b67cc344c monkey-island Up 7 seconds fbd91aacc8ea mongo Up 7 seconds b1c9ac1d3b81 hello Up 7 seconds4. 关闭沙箱
实验结束后,回到docker-compose.yml所在目录执行以下命令即可整体关闭并移除容器网络(命名卷中的数据会保留):
docker compose down访问 Monkey Island Web 界面
环境运行起来后,用浏览器打开https://localhost:5000。首次访问时,浏览器通常会弹出"自签名证书"警告——因为 Monkey Island 默认使用自签名 SSL 证书(关于正式环境如何替换为企业级证书,可参考 Docker 部署文档 中"Start Monkey Island with user-provided certificate"一节)。
警告页看起来类似下图。对于本教程的沙箱环境,可以放心忽略该警告:点击Advanced,然后点击Proceed to localhost (unsafe)继续访问。
提示:这是 Chrome 等浏览器的正常安全机制。Monkey Island 自带的默认证书未被系统信任,所以浏览器会拦截;在隔离的沙箱环境中可以安全地放行。
注册你的第一个用户
由于这是第一次访问这台 Monkey Island 实例,系统会要求你注册一个用户。在注册界面中:
- 填写一个Username(用户名);
- 填写一个Password(密码);
- 点击黄色的Let's go!按钮提交。
从源码看,这个流程由认证服务中的Register资源实现(见 monkey/monkey_island/cc/services/authentication_service/flask_resources/register.py):
- 后端先检查
needs_registration():Monkey Island 只允许注册一个用户,若已存在用户,再次注册会返回 HTTP 409 Conflict; - 然后对用户名与密码做格式校验(非空、符合 flask-security 规则),校验失败返回 400;
- 校验通过后调用 flask-security 的
register()完成注册,并在成功时把认证令牌(含有效期token_ttl_sec)写入响应,实现"注册即登录"。
所以注册完成后,你会自动登录并直接进入Getting Started(入门引导)页面。
Getting Started 页面是后续所有操作的起点,主要提供三个入口:
- Run Monkey:使用当前配置运行 Monkey(对应侧边栏
1. Run Monkey); - Configure Monkey:编辑攻击目标、添加凭证、选择漏洞利用模块(Exploiter)等(对应侧边栏
Configuration); - Read more:了解更多项目信息。
至此,你的 Infection Monkey 沙箱环境已搭建完毕:控制端在线、数据库就绪、靶机待命、账号已注册。
回顾:你学到了什么
- 学会了用 Docker 编排文件一键创建 Infection Monkey 实验沙箱(Monkey Island + MongoDB + 漏洞靶机
hello); - 学会了用
docker container ls验证容器运行状态、用docker compose down关闭环境; - 学会了访问 Monkey Island Web 界面(
https://localhost:5000)并处理自签名证书警告; - 完成了首次用户注册,并了解了其背后的单用户约束与"注册即登录"机制(源码依据:register.py)。
下一步
有了可用的沙箱环境后,你可以继续:
- 进入Tutorial 1: Hello, Monkey,学习如何配置 Infection Monkey 去利用
hello容器上的 SSH 弱口令漏洞——这是系列教程的核心实操; - 若要在其他平台(Linux 原生、Windows、云主机等)安装正式版 Infection Monkey,请参考仓库的 Setup 安装章节;
- 查看 Getting Started 使用指南,了解插件安装、运行方式与感染地图等基础用法。
- 网络安全
- 应用安全
【免费下载链接】monkey
Infection Monkey - An open-source adversary emulation platform
相关推荐
Infection Monkey 开发环境搭建指南:Agent 与 Monkey Island 从零配置
Infection Monkey 开发环境搭建指南:Agent 与 Monkey Island 从零配置 Infection Monkey 是一个开源的 adv
网络安全应用安全Cal.diy 如何用 yarn dx 搭建本地开发环境并完成首次登录
Cal.diy 如何用 yarn dx 搭建本地开发环境并完成首次登录 如果你想在本地跑起一份 Cal.diy(Cal.com 的开源社区版,MIT 许可、无企
后端前端企业应用HIXL 昇腾单边通信库技术指南:核心架构、零拷贝机制与端到端实战
HIXL 昇腾单边通信库技术指南:核心架构、零拷贝机制与端到端实战 HIXL(Huawei Xfer Library)是昇腾(Ascend)平台上一款面向集群场
网络安全应用安全
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考