elreydetoda/container_registry

GitHub: elreydetoda/container_registry

Mythic C2 的第三方服务 payload,封装 skopeo 让红队在云原生安全评估中直接操作 OCI 容器镜像仓库。

Stars: 0 | Forks: 0

# 容器镜像仓库 - Mythic C2 第三方服务 Payload 这是一个 Mythic C2 集成,它通过封装 `skopeo` 二进制程序,允许用户通过 Mythic 的 Web UI 与 OCI 容器镜像仓库进行交互。此服务 payload 允许红队操作人员直接从 Mythic 执行容器镜像仓库操作,并特别支持将 [container_wrapper](https://github.com/elreydetoda/container_wrapper) payload 上传到镜像仓库。 ## 概述 此 payload 类型是一个**服务 payload**(类似于 BloodHound payload),它会在 Mythic 中创建一个用于与容器镜像仓库交互的回调。它封装了 `skopeo` 二进制程序,以提供类似于 skopeo 在命令行上所提供的功能,但已被直接集成到了 Mythic 的 Web 界面中。 ## 功能 - **通过 copy 命令将 container_wrapper payload 上传**到镜像仓库 - **检查容器镜像**以查看元数据和 manifest - 从镜像仓库中**删除镜像** - 使用 Docker Registry HTTP API V2 **列出仓库中的所有存储库** - 列出存储库的**所有标签** - 支持经过身份验证的和不安全的镜像仓库连接 - 自动回退到构建参数以获取凭据 - 已集成到 Mythic 的 Web UI 中 ## 安装 ### 使用 mythic-cli ``` # 从你的 Mythic 安装目录 ./mythic-cli install github https://github.com/elreydetoda/container_registry ``` ### 手动安装 1. 将此代码仓库克隆到您的 Mythic `InstalledServices` 目录中: ``` cd /opt/Mythic/InstalledServices git clone https://github.com/elreydetoda/container_registry ``` 2. 启动容器: ``` ./mythic-cli payload start container_registry ``` ## 前置条件 - 已安装 Mythic C2 Framework - Docker(用于容器化部署) - Skopeo 二进制程序(已包含在 Docker 容器中) - [container_wrapper](https://github.com/elreydetoda/container_wrapper) payload 类型(用于上传功能) ## 用法 ### 创建 Payload 1. 导航到 Mythic 的 Web UI 2. 进入 "Create Components" > "Create Payload" 3. 选择 "container_registry" 作为 payload 类型 4. 配置构建参数: - **BASE_HOST**:默认容器镜像仓库 URL(例如 `localhost:5000`、`docker.io`、`ghcr.io`、`quay.io`) - **USERNAME**:用于镜像仓库身份验证的可选默认用户名 - **PASSWORD**:用于镜像仓库身份验证的可选默认密码/token - **INSECURE**:允许不安全的(HTTP)镜像仓库连接 5. 创建 payload - 这将在 Mythic 中建立一个回调 ### 可用命令 #### copy 将一个 container_wrapper payload 上传到已配置的镜像仓库中。此命令专为与 [container_wrapper](https://github.com/elreydetoda/container_wrapper) payload 类型创建的容器镜像配合使用而设计。 **参数:** - `source`(Payload):通过动态下拉菜单从可用的 container_wrapper payload 中选择 - `destination_name`:带标签的目标镜像名称(例如 `alpine:latest`、`myapp:v1.0`) - `DEST_USERNAME`:目标镜像仓库用户名(可选,回退到构建参数) - `DEST_PASSWORD`:目标镜像仓库密码/token(可选,回退到构建参数) - `DEST_INSECURE`:允许不安全的目标连接(可选) **示例:** ``` { "source": "mycontainer.tar - My wrapped payload", "destination_name": "malware/backdoor:latest", "DEST_USERNAME": "myuser", "DEST_PASSWORD": "mytoken" } ``` **注意:**源 payload 会自动从 Mythic 的 payload 存储中以 OCI archive 的形式检索出来,并使用 `skopeo copy` 上传到镜像仓库。 #### inspect 检查已配置镜像仓库中的容器镜像。 **参数:** - `image_name`:带标签的镜像名称(例如 `alpine:latest`、`library/alpine:3.18`) - `USERNAME`:镜像仓库用户名(可选,回退到构建参数) - `PASSWORD`:镜像仓库密码/token(可选,回退到构建参数) - `INSECURE`:允许不安全的连接(可选,回退到构建参数) - `raw`:返回原始的 manifest 而不是格式化的输出(可选) **示例:** ``` { "image_name": "alpine:latest" } ``` **注意:**系统会自动使用 `BASE_HOST` 构建参数构造完整的镜像仓库 URL,因此您只需提供镜像名称即可。 #### delete 从已配置的镜像仓库中删除容器镜像。 **参数:** - `image_name`:带标签的镜像名称(例如 `myrepo/myimage:tag`) - `USERNAME`:镜像仓库用户名(可选,回退到构建参数) - `PASSWORD`:镜像仓库密码/token(可选,回退到构建参数) - `INSECURE`:允许不安全的连接(可选,回退到构建参数) **示例:** ``` { "image_name": "malware/backdoor:latest" } ``` #### list_catalog 使用 Docker Registry HTTP API V2 的 `/v2/_catalog` endpoint 列出镜像仓库中的所有存储库。 **参数:** - `BASE_HOST`:镜像仓库 URL(可选,回退到构建参数 - 例如 `registry-1.docker.io`、`ghcr.io`、`localhost:5000`) - `USERNAME`:镜像仓库用户名(可选,回退到构建参数) - `PASSWORD`:镜像仓库密码/token(可选,回退到构建参数) - `INSECURE`:允许不安全的连接/跳过 TLS 验证(可选,回退到构建参数) **示例:** ``` { "BASE_HOST": "myregistry.com:5000", "USERNAME": "myuser", "PASSWORD": "mytoken" } ``` **注意:**此命令使用 Python 的 `requests` 库直接向镜像仓库 API 发起 HTTP 调用,而不是使用 skopeo。 #### list_tags 列出已配置镜像仓库中某个存储库的所有标签。 **参数:** - `image_name`:存储库镜像名称(例如 `alpine`、`library/alpine`、`myrepo/myimage`) - `USERNAME`:镜像仓库用户名(可选,回退到构建参数) - `PASSWORD`:镜像仓库密码/token(可选,回退到构建参数) - `INSECURE`:允许不安全的连接(可选,回退到构建参数) **示例:** ``` { "image_name": "alpine" } ``` ## 架构 此 payload 遵循 Mythic 第三方服务 payload 模式: ``` container_registry/ ├── Payload_Type/ │ └── container_registry/ │ ├── container_registry/ │ │ ├── agent_functions/ │ │ │ ├── __init__.py # Auto-loader for commands │ │ │ ├── builder.py # Payload type definition │ │ │ ├── shared.py # Shared helper functions │ │ │ ├── copy.py # Upload container_wrapper payloads │ │ │ ├── inspect.py # Inspect images │ │ │ ├── delete.py # Delete images │ │ │ ├── list_catalog.py # List all repositories │ │ │ └── list_tags.py # List tags for repository │ │ └── __init__.py │ ├── main.py # Entry point │ └── Dockerfile # Container definition ├── config.json # Mythic configuration └── README.md # This file ``` ### 共享辅助函数 `shared.py` 模块提供了通用的实用工具: - `get_arg_or_build_value()`:检索参数值并自动回退到构建参数 - `get_registry_base_url()`:构造 HTTP/HTTPS 镜像仓库 URL - `get_registry_proto_url()`:为 skopeo 构造 `docker://` 协议 URL ### 命令参数回退 所有命令都支持自动回退到构建参数。如果命令参数为空或未提供,系统会自动使用构建配置中的值。这允许您在创建 payload 时配置一次默认凭据,并可以根据需要针对特定命令进行覆盖。 ## 开发历史 基于 git 提交历史: 1. **初始代码生成** - Claude AI 生成了基础的集成代码 2. **添加了 list_catalog 功能** - 直接通过 HTTP API 访问镜像仓库 catalog 3. **为简化访问进行手动修改** - 添加了共享辅助函数和参数回退逻辑 4. **适配 copy 功能** - 经修改可从 Mythic 的 payload 存储上传 container_wrapper payload 5. **重构** - 标准化了所有命令,以使用一致的模式和共享实用工具 6. **移除了 sync 命令** - 在进一步完成 QA 之前,已将其移至 `disabled_cmds` ## 参考 - [Mythic 官方文档](https://docs.mythic-c2.net/) - [Skopeo 官方文档](https://github.com/containers/skopeo) - [BloodHound Mythic 集成](https://github.com/MythicAgents/bloodhound/) - 服务 payload 模式的参考 - [Container Wrapper](https://github.com/elreydetoda/container_wrapper) - 从 payload 创建 OCI 镜像 - [Docker Registry HTTP API V2](https://distribution.github.io/distribution/spec/api/) - 镜像仓库 API 规范 ## 作者 @elreydetoda ## 许可证 MIT 许可证 - 详情请参阅 LICENSE 文件
标签:C2框架, Mythic, Web截图, 安全学习资源, 容器安全, 数据展示, 红队, 请求拦截, 逆向工具