Aller au contenu

Gestion de campagne

Création et gestion de campagnes de phishing : conception de modèles d'e-mails, configuration SMTP, création de pages de destination, clonage de sites, intégration de pixels de suivi et analyse des métriques de campagne.


Cycle de vie de la campagne

Chaque campagne de phishing suit une progression définie depuis la création jusqu'à la livraison :

stateDiagram-v2
    [*] --> draft: Create campaign
    draft --> sending: Send campaign
    sending --> sent: All emails delivered
    sending --> error: All sends failed

Aperçu du flux de travail :

  1. Créer une campagne – Définir le nom, l'identité de l'expéditeur, les paramètres SMTP et le modèle d'e-mail
  2. Configurer SMTP -- Choisissez le relais local SMTP ou le serveur SMTP externe
  3. Sélectionner un modèle : utilisez un modèle intégré, importez un fichier EML personnalisé ou concevez à partir de zéro.
  4. Importer des cibles – Téléchargez un fichier CSV avec les adresses e-mail, les noms et les entreprises cibles.
  5. Joindre des fichiers : joignez éventuellement des payloads ou des documents à l'e-mail de campagne.
  6. Aperçu de l'e-mail : affiche l'e-mail avec une substitution de variable pour vérifier son apparence.
  7. Envoyer la campagne -- Envoyez les e-mails de manière asynchrone via le relais
  8. Surveillez les métriques : suivez les ouvertures, les clics et les captures d'informations d'identification en temps réel.

Créer une campagne

Créez une nouvelle campagne de phishing avec POST /api/v1/phishing/campaigns.

Corps de la demande :

Champ Type Obligatoire Description
name chaîne Oui Nom de la campagne
template_id chaîne Oui ID de modèle intégré (password-reset, invoice, it-support) ou custom pour EML importé
from_email chaîne Oui Adresse email de l'expéditeur
from_name chaîne Non Nom d'affichage de l'expéditeur
smtp_host chaîne Non Hôte SMTP externe (vide = utiliser le relais SMTP local)
smtp_port int Non Port SMTP externe
smtp_username chaîne Non Nom d'utilisateur d'authentification SMTP
smtp_password chaîne Non Mot de passe d'authentification SMTP
smtp_tls bool Non Activer STARTTLS
landing_url chaîne Non URL de base pour l'infrastructure de suivi/page de destination
delay_min_ms int Non Délai minimum entre les e-mails (ms)
delay_max_ms int Non Délai maximum entre les e-mails (ms)
bounce_to chaîne Non Adresse de rebond pour les rapports de non-remise

Paramètres de retard

Utilisez delay_min_ms et delay_max_ms pour ajouter une gigue aléatoire entre les e-mails. Cela permet d’éviter la limitation du débit et rend le modèle d’envoi plus naturel. Une plage courante est de 5 000 à 15 000 ms (5 à 15 secondes).

curl -s -X POST https://stentor.app/api/v1/phishing/campaigns \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Q1 Password Reset Campaign",
    "template_id": "password-reset",
    "from_email": "[email protected]",
    "from_name": "IT Security Team",
    "landing_url": "https://10.0.0.50:8443",
    "delay_min_ms": 5000,
    "delay_max_ms": 15000
  }'
curl -s -X POST https://stentor.app/api/v1/phishing/campaigns \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Invoice Campaign",
    "template_id": "invoice",
    "from_email": "[email protected]",
    "from_name": "Billing Department",
    "smtp_host": "smtp.external-provider.com",
    "smtp_port": 587,
    "smtp_username": "[email protected]",
    "smtp_password": "app-password-here",
    "smtp_tls": true,
    "landing_url": "https://10.0.0.50:8443",
    "bounce_to": "[email protected]",
    "delay_min_ms": 10000,
    "delay_max_ms": 30000
  }'

Réponse : renvoie l'objet de campagne complet avec un id et un status: "draft" générés.


Configuration SMTP

Stentor prend en charge deux chemins de livraison SMTP : le serveur SMTP intégré (local) du relais ou un relais SMTP externe.

SMTP de relais local

Lorsque smtp_host est vide dans la configuration de la campagne, les emails sont acheminés via le serveur SMTP embarqué du relais. Le relais exécute un serveur emersion/go-smtp sur le port configuré.

Configuration :

  • Port - Défini via la variable d'environnement SMTP_PORT du relais
  • Authentification -- Aucune authentification requise pour la livraison locale (localhost uniquement)
  • STARTTLS -- Pris en charge avec les certificats TLS générés automatiquement ou fournis
  • Taille maximale du message : 10 Mo par e-mail
  • Destinataires maximum : 50 par message

Certificats TLS

Lorsque SMTP_ALLOW_INSECURE n'est pas défini, le relais génère automatiquement un certificat TLS pour la prise en charge de STARTTLS en utilisant la même infrastructure de certificat que le listener C2.

SMTP externe

Lorsque smtp_host est fourni dans la campagne, le relais se connecte à un serveur SMTP externe pour la livraison.

Flux de connexion :

  1. Connexion TCP à smtp_host:smtp_port
  2. Poignée de main EHLO
  3. Mise à niveau STARTTLS (si le serveur le prend en charge)
  4. Authentification PLAIN (si smtp_username est fourni)
  5. Séquence MAIL FROM / RCPT TO / DATA

Comportements clés :

  • Adresse de rebond -- Lorsque bounce_to est défini, il est utilisé comme expéditeur de l'enveloppe SMTP (MAIL FROM), tandis que from_email est utilisé dans l'en-tête From de l'e-mail. Cela sépare la remise du rapport de non-remise de l'identité visible de l'expéditeur.
  • Validation TLS -- La validation du certificat est ignorée (InsecureSkipVerify: true) pour des raisons de compatibilité avec divers serveurs SMTP et certificats auto-signés.

Comparaison

Caractéristique SMTP de relais local SMTP externe
Authentification Aucun (hôte local) PLAIN via STARTTLS
Configuration Zéro configuration Nécessite des informations d'identification
Contrôle de l'expéditeur Complet (n'importe quelle adresse) Limité par le fournisseur SPF/DKIM
Délivrabilité Dépend de la réputation IP du relais Hérite de la réputation du fournisseur
TLS Certificat généré automatiquement Certificat fourni par le serveur
Gestion des rebonds Direct au relais Adresse de rebond configurable
Limitation du débit Aucun (auto-hébergé) Sous réserve des limites du fournisseur

Modèles d'e-mails

Modèles intégrés

Stentor est livré avec trois modèles de courrier électronique prêts à l'emploi, rendus à l'aide de la bibliothèque de génération de courrier électronique hermes pour des courriers électroniques HTML réactifs et professionnels.

password-reset -- Demande de réinitialisation du mot de passe

E-mail de réinitialisation de mot de passe de type informatique d'entreprise. Simule une équipe de sécurité demandant à l'utilisateur de réinitialiser son mot de passe.

  • Sujet par défaut : Action Required: Reset Your {{.CompanyName}} Password
  • Appel à l'action : Bouton "Réinitialiser le mot de passe" (rouge, lien vers {{.ActionURL}})
  • Urgence : Le lien expire dans 24 heures

invoice -- Notification de facture

E-mail de notification financière/facturation. Simule une facture ou une demande de paiement.

  • Sujet par défaut : Invoice #{{.InvoiceNumber}} from {{.CompanyName}}
  • Appel à l'action : bouton "Afficher la facture" (vert, liens vers {{.ActionURL}})
  • Variables personnalisées : {{.InvoiceNumber}} (par défaut : INV-YYYYMMDD), {{.Amount}} (par défaut : $1,250.00)

it-support -- Vérification du support informatique

Demande de vérification du compte du service informatique. Crée une urgence en cas d'activité suspecte du compte.

  • Sujet par défaut : {{.CompanyName}} IT: Verify Your Account
  • Appel à l'action : bouton "Vérifier le compte" (bleu, liens vers {{.ActionURL}})
  • Urgence : L'absence de vérification dans les 48 heures peut entraîner la suspension du compte.

Variables du modèle

Tous les modèles intégrés prennent en charge ces variables, qui sont remplacées au moment du rendu :

Variable Description Exemple de valeur
{{.RecipientName}} Nom de la cible John Smith
{{.RecipientEmail}} Email de la cible [email protected]
{{.CompanyName}} Nom de l'entreprise pour l'image de marque Acme Corp.
{{.ActionURL}} Lien de phishing (page de destination) https://10.0.0.50:8443/click/abc12345
{{.TrackingPixelURL}} Pixel de suivi invisible https://10.0.0.50:8443/track/abc12345.gif

Suivi de l'injection de pixels

Tous les modèles injectent automatiquement un pixel de suivi transparent 1x1 (beacon <img>) avant le beacon de fermeture </body>. Cela déclenche un événement email_opened lorsque le client de messagerie du destinataire charge l'image.

Modèles personnalisés (importation EML)

Importez un modèle d'e-mail personnalisé à partir d'un fichier EML à l'aide de POST /api/v1/phishing/campaigns/:id/template/import.

Le point de terminaison accepte soit :

  • Téléchargement de formulaire en plusieurs parties -- Champ file avec le fichier EML
  • Corps JSON -- Champ eml_data contenant le contenu EML brut sous forme de chaîne

Comportement d'analyse EML :

  • Analyse le format de courrier électronique RFC 5322
  • Extrait la ligne d'objet (avec décodage de mot MIME)
  • Extrait le corps HTML et le corps du texte brut
  • Prend en charge les structures MIME multipart/mixed et multipart/alternative
  • Stocke le contenu extrait en tant que modèle personnalisé de la campagne

Variables de modèle personnalisé (substituées lors de l'envoi) :

Variable Description
{{.ToName}} Nom de la cible
{{.ToEmail}} Email de la cible
{{.FromName}} Nom d'affichage de l'expéditeur
{{.FromEmail}} Adresse email de l'expéditeur
{{.CompanyName}} Nom de l'entreprise pour l'image de marque
{{.TrackingURL}} URL du pixel de suivi
{{.LandingURL}} URL de la page de destination
curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/template/import" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "eml_data": "From: [email protected]\r\nTo: {{.ToEmail}}\r\nSubject: Important Update from {{.CompanyName}}\r\nMIME-Version: 1.0\r\nContent-Type: text/html\r\n\r\n<html><body><h1>Hello {{.ToName}}</h1><p>Please review this update.</p><a href=\"{{.LandingURL}}\">Click here</a></body></html>"
  }'
curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/template/import" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@/path/to/template.eml"

Réponse :

{
  "subject": "Important Update from {{.CompanyName}}",
  "has_html": true,
  "has_text": false
}

Aperçu du courrier électronique

Prévisualisez un e-mail rendu avant de l'envoyer avec POST /api/v1/phishing/campaigns/:id/preview.

curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/preview" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "target_email": "[email protected]",
    "target_name": "John Smith",
    "company_name": "Acme Corp"
  }'

La réponse inclut les versions rendues subject, html et text de l'e-mail avec toutes les variables remplacées.

Aperçu du modèle intégré

Les modèles intégrés (password-reset, invoice, it-support) sont rendus côté serveur par le relais à l'aide de la bibliothèque Hermes. L'aperçu de ces modèles renvoie un espace réservé indiquant l'ID du modèle, car le rendu complet nécessite une connexion de relais active. Les modèles personnalisés (importés par EML) s'affichent entièrement côté serveur.


Gestion des cibles

Importation de cibles

Importez des cibles via CSV avec POST /api/v1/phishing/campaigns/:id/targets/import.

Format CSV : email,name,company

  • La ligne d'en-tête est détectée automatiquement et ignorée (si elle contient « e-mail » ou « nom »)
  • Chaque cible reçoit un identifiant de suivi unique à 8 caractères (préfixe UUID)
  • Le statut commence par pending
  • Les lignes contenant des adresses e-mail vides ou invalides (@ manquant) sont ignorées en mode silencieux.
curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/targets/import" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "csv_data": "email,name,company\[email protected],John Smith,Target Corp\[email protected],Jane Doe,Target Corp\[email protected],Bob Wilson,Target Corp"
  }'

Réponse :

{
  "imported": 3
}

Liste des cibles

Récupérez toutes les cibles d'une campagne avec GET /api/v1/phishing/campaigns/:id/targets.

Champs PhishingTarget :

Champ Type Description
id UUID ID cible
email chaîne Adresse e-mail cible
name chaîne Nom de la cible
company chaîne Entreprise cible
tracking_id chaîne ID de suivi unique à 8 caractères
status chaîne pending, sent, opened, clicked, captured, error
sent_at horodatage Quand l'e-mail a été livré
opened_at horodatage Lorsque le pixel de suivi a été chargé
clicked_at horodatage Lorsque le lien de phishing a été cliqué
captured_at horodatage Quand les informations d'identification ont été soumises
error_message chaîne Détails de l'erreur (si le statut est error)

Fichiers joints

Joignez des fichiers aux e-mails de campagne pour la livraison de le payload ou l'ingénierie sociale.

Télécharger la pièce jointe

POST /api/v1/phishing/campaigns/:id/attachments -- multipart/form-data avec un champ file.

curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/attachments" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@/path/to/document.pdf"

Limites :

  • Maximum 10 Mo par fichier
  • Maximum 10 Mo au total par campagne (dans toutes les pièces jointes)
  • Le type de contenu est détecté automatiquement à partir du contenu du fichier (avec repli sur l'en-tête Content-Type du téléchargement)

Liste des pièces jointes

GET /api/v1/phishing/campaigns/:id/attachments -- renvoie les métadonnées des pièces jointes (nom de fichier, type de contenu, taille).

Supprimer la pièce jointe

DELETE /api/v1/phishing/campaigns/:id/attachments/:attachmentId : supprime une pièce jointe de la campagne.

Construction de l'e-mail : Les pièces jointes sont incluses sous forme de parties multipart/mixed MIME dans l'e-mail. Chaque pièce jointe est codée en Base64 avec les en-têtes Content-Disposition: attachment. Le corps de l'e-mail HTML devient la première partie MIME, suivie des pièces jointes.


Clonage de sites

Clonez des sites Web existants pour créer des pages de destination convaincantes pour la collecte d'informations d'identification ou la livraison de payloads.

Cloner un site Web

POST /api/v1/sites -- clone un site Web cible.

Le cloneur de site utilise Colly pour le web scraping et goquery pour la manipulation HTML :

  1. Récupère la page HTML cible
  2. Collecte tous les actifs référencés (CSS, JS, images, polices, favicon)
  3. Réécrit toutes les URL (href, src, attributs d'action) pour les diffuser à partir du chemin d'écoute
  4. Injecte éventuellement du JavaScript keylogger ou une iframe invisible

Limites :

  • Taille totale maximale du site : 10 Mo (HTML + tous les éléments)
  • Profondeur d'exploration : 1 (page cible uniquement, pas d'exploration approfondie)
  • Actifs du même domaine uniquement (les ressources CDN externes sont laissées telles quelles)

Types d'éléments pris en charge :

Catégorie Rallonges
Feuilles de style .css
Scripts .js
Images .png, .jpg, .jpeg, .gif, .svg
Polices .woff, .woff2, .ttf, .eot
Icônes .ico

Options d'injection

Injection d'enregistreur de frappe

Lorsqu'il est activé, un enregistreur de frappe JavaScript minimal (~ 400 octets minifiés) est injecté avant </body> :

  • Capture keypress événements sur la page
  • Tamponne les frappes pendant 500 ms (anti-rebond)
  • Exfiltration via le pixel d'image vers le point de terminaison /log (compatible CORS)
  • L'ID de suivi met en corrélation les frappes au clavier avec le site cloné spécifique
  • IIFE autonome pour éviter la pollution mondiale des espaces de noms

Injection iFrame

Lorsqu'elle est activée, une iframe invisible est injectée avant </body> :

  • Positionné hors écran (top: -9999px, left: -9999px)
  • Zéro opacité et zéro dimension
  • Charge silencieusement l'URL de payload spécifiée
  • Utile pour la livraison de payloads au volant aux côtés d'une page clonée d'apparence légitime

API de gestion de sites

Méthode Point de terminaison Description
POST /api/v1/sites Cloner un site Web
GET /api/v1/sites Lister tous les sites clonés
GET /api/v1/sites/:id Obtenez les détails du site cloné
DELETE /api/v1/sites/:id Supprimer un site cloné
GET /api/v1/sites/:id/keystrokes Obtenez des frappes capturées pour un site
GET /api/v1/keystrokes/captured Obtenez toutes les frappes capturées sur tous les sites

Pages de destination et capture d'informations d'identification

Les pages de destination sont servies par le serveur de suivi du relais et capturent les informations d'identification soumises par les cibles.

Modèles de pages de destination intégrés

Stentor comprend trois modèles de pages de destination qui imitent les portails de connexion courants :

microsoft -- Connexion Microsoft 365

  • Style : Police d'interface utilisateur Segoe, accent bleu (#0067b8), conteneur blanc propre
  • Champs : Email + Mot de passe
  • Éléments : "Vous ne pouvez pas accéder à votre compte ?" lien pour le réalisme

google -- Connexion aux comptes Google

  • Style : Police Google Sans / Roboto, couleurs Material Design, conteneur arrondi avec bordure
  • Champs : Email + Mot de passe
  • Éléments : Logo Google coloré, "E-mail oublié ?" lien, bouton "Suivant"

corporate -- Connexion d'entreprise générique

  • Style : Fond dégradé (#667eea à #764ba2), carte arrondie avec ombre portée
  • Champs : Nom d'utilisateur + Mot de passe
  • Personnalisation : Nom de l'entreprise et URL du logo configurables
  • Éléments : « Mot de passe oublié ? » lien

Format d'URL

/landing/{page_id}/{tracking_id}
  • GET affiche le formulaire de connexion
  • POST capture les informations d'identification soumises

Flux de capture des informations d'identification

sequenceDiagram
    participant Target
    participant Relay (Tracking)
    participant Backend
    participant Operator

    Target->>Relay (Tracking): Click link in email
    Note over Relay (Tracking): GET /click/{tracking_id}
    Relay (Tracking)->>Backend: link_clicked event
    Relay (Tracking)->>Target: 302 Redirect to landing page

    Target->>Relay (Tracking): Load landing page
    Note over Relay (Tracking): GET /landing/{page_id}/{tracking_id}
    Relay (Tracking)->>Target: Render login form

    Target->>Relay (Tracking): Submit credentials
    Note over Relay (Tracking): POST /landing/{page_id}/{tracking_id}
    Relay (Tracking)->>Backend: creds_captured event (username + password)

    alt Redirect URL configured
        Relay (Tracking)->>Target: 302 Redirect to configured URL
    else No redirect
        Relay (Tracking)->>Target: "Thank You" page
    end

    Backend->>Operator: Real-time UI update

Configuration de la page de destination

Options Description Par défaut
Modèle par défaut Modèle utilisé lorsque page_id est introuvable corporate
Nom de l'entreprise Nom de la marque affiché sur le modèle d'entreprise Your Company
Logo de l'entreprise URL du logo pour le modèle d'entreprise (aucun)
URL de redirection Où envoyer la cible après la capture des informations d'identification https://www.google.com

Extraction du nom d'utilisateur : Le gestionnaire de capture d'informations d'identification vérifie plusieurs noms de champs de formulaire courants dans l'ordre : username, email, user. Cela garantit que les informations d'identification sont capturées quel que soit le modèle de page de destination utilisé.


Pages de téléchargement en voiture

Diffusez de fausses pages de mise à jour logicielle qui incitent les cibles à télécharger des payloads.

Modèles

Trois modèles de pages drive-by sont disponibles :

ID du modèle Thème Description
chrome Mise à jour du navigateur Chrome Imite une notification de mise à jour du navigateur Chrome
windows Mise à jour Windows Imite une invite de mise à jour du système Windows
adobe Mise à jour Adobe Flash Imite une page de mise à jour Adobe Flash/Reader

Format d'URL

/update/{template_id}/{payload_id}

Paramètres de requête :

Paramètre Description Par défaut
auto Définir sur true pour le téléchargement automatique après le chargement de la page false
filename Remplacer le nom du fichier de téléchargement affiché Nom du fichier de payload d'origine

Flux de travail

  1. Hébergez un payload -- Utilisez la fonction HostPayload() du relais pour enregistrer un payload en mémoire (appelée via la commande WebSocket depuis le backend)
  2. Générer l'URL drive-by -- Construisez l'URL sous la forme /update/{template}/{payload_id} avec des paramètres de requête facultatifs
  3. Distribuez l'URL : incluez-la dans un e-mail de phishing, intégrez-la dans une iframe de site cloné ou utilisez-la comme cible de redirection.
# Example drive-by URL with auto-download
https://10.0.0.50:8443/update/chrome/abc123-def456?auto=true&filename=ChromeSetup.exe

Hébergement de payload

Les payloads sont stockées en mémoire sur le relais. Ils persistent uniquement pendant l'exécution du processus de relais. Le redémarrage du relais efface toutes les payloads hébergées.


Suivi et métriques

Le serveur de suivi du relais offre une visibilité en temps réel sur l'engagement de la campagne.

Suivi des points de terminaison

Point de terminaison Méthode Événement déclenché Description
/track/{tracking_id}.gif OBTENIR email_opened Renvoie un GIF transparent 1x1, déclenche un événement ouvert
/click/{tracking_id} OBTENIR link_clicked Déclenche un événement de clic, redirige vers la page de destination
/landing/{page_id}/{tracking_id} POSTER creds_captured Capture le nom d'utilisateur + le mot de passe de la soumission du formulaire
/payload/{payload_id} OBTENIR payload_downloaded Sert le fichier de payload hébergé

Propagation d'événements

Les événements circulent du serveur de suivi de relais via la connexion WebSocket vers le backend :

Relay (Tracking HTTP) --> WebSocket Event --> Backend PhishingService.UpdateTargetEvent() --> Database Update --> UI Real-time Update

Chaque événement comprend :

  • ID de suivi : correspond à une cible spécifique
  • Timestamp -- Heure UTC de l'événement
  • User-Agent -- Identification du navigateur de la cible
  • IP -- Adresse IP de la cible (avec prise en charge X-Forwarded-For / X-Real-IP)

Progression du statut cible

stateDiagram-v2
    [*] --> pending: Target imported
    pending --> sent: Email delivered
    sent --> opened: Tracking pixel loaded
    opened --> clicked: Link clicked
    clicked --> captured: Credentials submitted
    pending --> error: Send failed

Les statuts progressent uniquement : une fois qu'une cible atteint captured, les événements antérieurs (ouvertures, clics) sont déjà enregistrés avec des horodatages.

Événements de script de l'AIIC

Le service de phishing envoie des événements CNA compatibles Cobalt Strike à chaque étape du cycle de vie de la campagne :

Événement Arguments Description
sendmail_start $1 Campaign_id, $2 target_count, $3 attachment_path, $4 rebond_to, $5 smtp_server, $6 sujet, $7 template_id La campagne commence à envoyer
sendmail_pre $1 ID_campagne, $2 target_email Avant l'envoi de chaque e-mail
sendmail_post $1 Campaign_id, $2 target_email, $3 statut, $4 server_message Après une livraison réussie de l'e-mail
sendmail_error $1 Campaign_id, $2 target_email, $3 error_message Échec de l'envoi du courrier électronique
sendmail_done $1 identifiant_campagne Envoi de la campagne terminé
Exemple de crochet CNA
on sendmail_post {
    println("[Phishing] Email sent to " . $2 . " - Status: " . $3);
}

on sendmail_done {
    println("[Phishing] Campaign " . $1 . " complete");
}

Envoi d'une campagne

Lancez la livraison des e-mails avec POST /api/v1/phishing/campaigns/:id/send.

curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/send" \
  -H "Authorization: Bearer $TOKEN"

Comportement d'envoi :

  • L'état de la campagne passe à sending
  • Les e-mails sont envoyés de manière asynchrone via la connexion relais WebSocket
  • Le backend sélectionne le premier relais connecté pour la livraison
  • Délai aléatoire entre les e-mails (configurable via delay_min_ms / delay_max_ms)
  • Le statut de chaque cible est mis à jour individuellement au fur et à mesure que les e-mails sont envoyés (sent ou error)
  • Statut final de la campagne : sent (au moins une campagne réussie) ou error (toutes échouées)

Relais requis

Au moins un relais doit être connecté via WebSocket. Si aucun relais n'est disponible, la campagne passe immédiatement au statut error avec le message « aucun relais connecté ».

Exemple complet de bout en bout

Workflow complet depuis la création de la campagne jusqu'au suivi :

# 1. Create campaign
CAMPAIGN_ID=$(curl -s -X POST https://stentor.app/api/v1/phishing/campaigns \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Q1 Security Awareness Test",
    "template_id": "password-reset",
    "from_email": "[email protected]",
    "from_name": "IT Security",
    "landing_url": "https://10.0.0.50:8443",
    "delay_min_ms": 5000,
    "delay_max_ms": 15000
  }' | jq -r '.id')

echo "Campaign ID: $CAMPAIGN_ID"

# 2. Import targets
curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/targets/import" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "csv_data": "email,name,company\[email protected],John Smith,Target Corp\[email protected],Jane Doe,Target Corp\[email protected],Bob Wilson,Target Corp"
  }'

# 3. Preview email (optional)
curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/preview" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "target_email": "[email protected]",
    "target_name": "John Smith",
    "company_name": "Target Corp"
  }' | jq '.subject, .html[:200]'

# 4. Send campaign
curl -s -X POST "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/send" \
  -H "Authorization: Bearer $TOKEN"

# 5. Monitor campaign status
curl -s "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID" \
  -H "Authorization: Bearer $TOKEN" | jq '{status, total_targets, sent_count}'

# 6. Check target engagement
curl -s "https://stentor.app/api/v1/phishing/campaigns/$CAMPAIGN_ID/targets" \
  -H "Authorization: Bearer $TOKEN" | jq '.[] | {email, status, opened_at, clicked_at, captured_at}'

Références croisées

  • Référence de l'API REST -- Documentation complète sur les points de terminaison pour les API de phishing et de clonage de sites
  • Gestion des relais -- Configuration de l'infrastructure SMTP de relais
  • Hooks & Events -- Hooks d'événements CNA sendmail pour l'automatisation par script