Skip to main content

mythic-implant-development

Provides guidance and documentation for building Mythic C2 framework agents/implants from scratch

跳到安装

来源信息

仓库
SpecterOps/skills
最近来源活动
2026年8月14日 01:16
检测到的 SKILL.md 语言
英语
星标
657
分支
72

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
22 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
mythic-implant-development
description
Provides guidance and documentation for building Mythic C2 framework agents/implants from scratch
license
MIT
metadata
{"author":"xpn","version":"0.1.0","category":"security"}
# Mythic Implant Development Skill ## When to Use Use this skill when developing a new agent (implant/payload) for the Mythic C2 framework. This includes: - "Build a new Mythic agent in Go/Rust/C/C#/Python" - "Create a Mythic implant that supports HTTP C2" - "Port this agent to work with Mythic" - "Add a new command to my Mythic payload type" ## When NOT to Use Do not use this skill for: - General Mythic server administration or installation - Developing standalone tools unrelated to Mythic - Working with other C2 frameworks (Cobalt Strike, Sliver, etc.) ## Initial Requirements Gathering **CRITICAL**: Before writing any code, you MUST ask the user the following clarification questions. Do not assume defaults. Each answer significantly impacts the architecture. 1. **C2 Channel**: What communication channel should the agent use? - Egress: HTTP, HTTPS, DNS, WebSocket, custom - P2P: TCP, SMB named pipes, custom - Multiple channels in a single agent? 2. **Target Platforms**: What operating systems will the agent support? - Windows, macOS, Linux, or a combination - Architecture: x64, ARM64, both 3. **Agent Language**: What language or framework should the agent be written in? - Go, C, C++, C#/.NET, Rust, Python, Nim, etc. - This is the language of the agent itself (runs on target) - The Mythic container definitions (server-side) can be in Python or GoLang independently of the agent language 4. **Commands**: What commands should the agent support initially? - Common starting set: shell execution, file upload/download, process listing, directory listing, change directory, exit - Any specialized capabilities needed? 5. **Encryption**: What key exchange / encryption model? - Plaintext (testing only) - Static AES256 pre-shared key - RSA encrypted key exchange (recommended for production) - Custom EKE via translation container 6. **Mythic Container Language**: Should the server-side definitions (commands, build logic) be written in Python or GoLang? ## OPSEC Requirements **OPSEC is the highest priority throughout all development.** Every piece of code produced must adhere to the following: ### Mandatory OPSEC Rules 1. **No hardcoded attributable strings** - Never embed tool names, author names, framework identifiers, or any string that would allow attribution to the agent, its developer, or the C2 framework. This includes: - User-Agent strings that identify the framework - Mutex names containing tool/framework names - Registry key names or values containing identifiable strings - Named pipe names with identifiable prefixes - Window class names or window titles 2. **No embedded debug messages** - Never include debug print statements, logging calls, or verbose error messages in production agent code. Debug output must be: - Gated behind a compile-time flag that is OFF by default - Completely stripped from release builds - Never contain function names, file paths, or developer-identifiable information 3. **String handling** - All strings that could be signatured should be: - Constructed at runtime where possible - Obfuscated or encrypted at rest in the binary - Never stored as plaintext string literals in the final binary 4. **Network indicators** - Minimize network-level signatures: - Randomize or make configurable: callback intervals, jitter, URI paths, headers - Do not use default or well-known URI patterns - Support configurable HTTP headers and request formatting 5. **Build artifacts** - Ensure clean builds: - Strip debug symbols in release builds - Remove or obfuscate Go build paths (if using Go) - Avoid leaving compiler metadata that reveals the build environment 6. **Mythic OPSEC hooks** - Implement `opsec_pre` and `opsec_post` checks on commands that create detectable artifacts (process creation, file writes, network connections). See [OPSEC Checking](./references/opsec-checking.md). ### When Generating Code - Always ask: "Would this string/pattern be signaturable?" - Always ask: "Does this leave unnecessary artifacts?" - If a user requests something that conflicts with OPSEC (e.g., hardcoded debug output), warn them explicitly and suggest the OPSEC-safe alternative. ## Development Workflow Follow these steps in order. Each step references documentation pages that should be loaded for detailed specifications. ### Step 1: Project Layout Create the Mythic-compatible project structure. This is critical - Mythic expects a specific folder layout for the container to sync properly. **Read**: [Project Layout](./references/project-layout.md) Key deliverables: - `Dockerfile` using appropriate Mythic base image - `main.py` or `main.go` entry point for the Mythic container - Agent source code directory - Proper folder naming (lowercase, no capitals - Docker limitation) The project should follow the External Agent template format: ``` your-agent/ Payload_Type/ your_agent_name/ Dockerfile main.py (or main.go + Makefile) your_agent_name/ mythic/ agent_functions/ builder.py (or agentfunctions/*.go) command1.py command2.py ... agent_code/ <your agent source code in whatever language> ``` ### Step 2: Build Dependencies Set up the build environment within the Docker container. **CRITICAL**: The `build()` function runs INSIDE the container. Docker is NOT available inside the container. All compilers and tools your agent needs must be installed in the Dockerfile. You cannot use `docker build`, `docker run`, or any Docker-in-Docker commands from the build function. - Select the appropriate Mythic base image for your container language: - `itsafeaturemythic/mythic_python_base:latest` - Python definitions - `itsafeaturemythic/mythic_go_base:latest` - Go definitions - `itsafeaturemythic/mythic_python_go:latest` - Python definitions + Go compiler - `itsafeaturemythic/mythic_go_macos:latest` - Go definitions + macOS SDK - `itsafeaturemythic/mythic_python_macos:latest` - Python definitions + macOS SDK - `itsafeaturemythic/mythic_go_dotnet:latest` - Go definitions + .NET SDK - Install any additional build tools in the Dockerfile via `RUN` commands (Rust toolchain, cross-compilers, MinGW, etc.) - For Go-based containers, create a `Makefile` with `build` and `run` targets - The agent code is compiled inside this container when the `build()` function calls compilers/tools via `subprocess` (Python) or `os/exec` (Go) ### Step 3: Agent-to-Mythic Communication This is the core of the agent. Implement the message protocol in the agent's language. **Read these references in order**: 1. [Agent Message Format](./references/agent-message-format.md) - The base wire format: `Base64(UUID + EncBlob(JSON))` 2. [Initial Checkin](./references/initial-checkin.md) - How the agent registers with Mythic 3. [Get Tasking](./references/get-tasking.md) - How the agent requests tasks 4. [Post Response](./references/post-response.md) - How the agent returns task output 5. [File Downloads](./references/file-downloads.md) - Agent -> Mythic file transfer 6. [File Uploads](./references/file-uploads.md) - Mythic -> Agent file transfer Implementation order within the agent: 1. **Message encoding/decoding** - Base64, JSON serialization, UUID handling 2. **Encryption layer** - AES256-CBC with PKCS7 padding, HMAC-SHA256 (if using encrypted comms). Format: `IV (16 bytes) + Ciphertext + HMAC` 3. **HTTP/transport layer** - The actual network communication matching the C2 profile 4. **Checkin** - First contact with Mythic, exchange payload UUID for callback UUID 5. **Key exchange** - If using RSA EKE: generate 4096-bit RSA keypair, send public key, receive AES session key 6. **Task loop** - `get_tasking` on interval, process commands, `post_response` with results 7. **File transfer** - Chunked upload/download protocol with file UUID tracking ### Step 4: Commands and Features Add the commands the user requested. Each command has two parts: - **Agent-side**: The code in the agent that executes the command - **Mythic-side**: The Python/Go definition that tells Mythic about the command **Read**: [Commands](./references/commands.md) and [Create Tasking](./references/create-tasking.md) For each command: 1. Define `CommandBase` / command struct with metadata (name, description, MITRE ATT&CK mapping, help text) 2. Define `TaskArguments` / argument struct with parameters 3. Implement `create_go_tasking` for any server-side preprocessing 4. Implement the agent-side execution logic 5. Add `opsec_pre`/`opsec_post` checks where the command creates detectable artifacts For additional features, consult: - [SOCKS](./references/socks.md) - SOCKS5 proxy tunneling through the agent - [Reverse Port Forward](./references/rpfwd.md) - Reverse port forwarding through the agent - [Translation Containers](./references/translation-containers.md) - Custom message formats / crypto - [P2P Connections](./references/p2p-connections.md) - Peer-to-peer mesh networking - [OPSEC Checking](./references/opsec-checking.md) - Pre/post task OPSEC gates ### Step 5: Mythic-Side Python/Go Scripts Create the server-side container code that defines the agent to Mythic. **Read**: [Payload Type Definition](./references/payload-type-definition.md) Key deliverables: 1. **Payload Type class** - Name, supported OS, C2 profiles, build parameters, file extension - **Python field names**: `name`, `supported_os`, `c2_profiles` (NOT `supported_c2_profiles`), `build_parameters`, `mythic_encrypts` - **Go struct fields**: `Name`, `SupportedOS`, `SupportedC2Profiles`, `BuildParameters`, `MythicEncryptsData` 2. **Build function** - Takes user-selected options and compiles/assembles the agent binary - Runs INSIDE the container - only tools installed in the Dockerfile are available - Read C2 profile parameters and stamp them into agent config - Call compilers via `subprocess` (Python) or `os/exec` (Go) - Handle command selection (if `supports_dynamic_loading`) - Return `BuildResponse` with the final payload bytes 3. **Command definitions** - One file per command with `CommandBase` and `TaskArguments` 4. **Build steps** - Define progress indicators for the build process See also: - [C2 Profile Definition](./references/c2-profile-definition.md) - If building a custom C2 profile - [Container Syncing](./references/container-syncing.md) - How containers register with Mythic ## Reference Index For detailed documentation on each topic, consult the following pages. Load only the pages you need to conserve context. **Full index**: [Reference Index](./references/index.md) ### Quick Reference | Topic | Reference | When to Use | |-------|-----------|-------------| | Project structure | [Project Layout](./references/project-layout.md) | Setting up the repo/container | | Agent definition | [Payload Type Definition](./references/payload-type-definition.md) | Defining the agent class and build | | Wire format | [Agent Message Format](./references/agent-message-format.md) | Implementing message encoding | | First contact | [Initial Checkin](./references/initial-checkin.md) | Implementing checkin + key exchange | | Fetch tasks | [Get Tasking](./references/get-tasking.md) | Implementing the task loop | | Return output | [Post Response](./references/post-response.md) | Sending task results | | Download files | [File Downloads](./references/file-downloads.md) | Agent -> Mythic file transfer | | Upload files | [File Uploads](./references/file-uploads.md) | Mythic -> Agent file transfer | | Command defs | [Commands](./references/commands.md) | Defining commands and parameters | | Task processing | [Create Tasking](./references/create-tasking.md) | Server-side task preprocessing | | OPSEC gates | [OPSEC Checking](./references/opsec-checking.md) | Pre/post task OPSEC checks | | Custom format | [Translation Containers](./references/translation-containers.md) | Non-JSON / custom crypto | | C2 profiles | [C2 Profile Definition](./references/c2-profile-definition.md) | Building a custom C2 profile | | SOCKS proxy | [SOCKS](./references/socks.md) | SOCKS5 tunneling through agent | | Reverse port fwd | [Reverse Port Forward](./references/rpfwd.md) | Reverse port forwarding through agent | | P2P mesh | [P2P Connections](./references/p2p-connections.md) | Peer-to-peer agent linking | | Sync lifecycle | [Container Syncing](./references/container-syncing.md) | Understanding container registration |
在 GitHub 查看