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 :
- 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
- Configurer SMTP -- Choisissez le relais local SMTP ou le serveur SMTP externe
- Sélectionner un modèle : utilisez un modèle intégré, importez un fichier EML personnalisé ou concevez à partir de zéro.
- Importer des cibles – Téléchargez un fichier CSV avec les adresses e-mail, les noms et les entreprises cibles.
- Joindre des fichiers : joignez éventuellement des payloads ou des documents à l'e-mail de campagne.
- Aperçu de l'e-mail : affiche l'e-mail avec une substitution de variable pour vérifier son apparence.
- Envoyer la campagne -- Envoyez les e-mails de manière asynchrone via le relais
- 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_PORTdu 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 :
- Connexion TCP à
smtp_host:smtp_port - Poignée de main EHLO
- Mise à niveau STARTTLS (si le serveur le prend en charge)
- Authentification PLAIN (si
smtp_usernameest fourni) - Séquence MAIL FROM / RCPT TO / DATA
Comportements clés :
- Adresse de rebond -- Lorsque
bounce_toest défini, il est utilisé comme expéditeur de l'enveloppe SMTP (MAIL FROM), tandis quefrom_emailest 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
fileavec le fichier EML - Corps JSON -- Champ
eml_datacontenant 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/mixedetmultipart/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>"
}'
Réponse :
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 :
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 :
- Récupère la page HTML cible
- Collecte tous les actifs référencés (CSS, JS, images, polices, favicon)
- Réécrit toutes les URL (href, src, attributs d'action) pour les diffuser à partir du chemin d'écoute
- 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¶
- 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¶
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¶
- 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) - 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 - 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
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 (
sentouerror) - Statut final de la campagne :
sent(au moins une campagne réussie) ouerror(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