PAGES
← all tools
◆ Exploitation & C2

evilginx2

v3.3.0 open-source

Evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, bypassing 2-factor authentication.

Summary

evilginx2 is an open-source man-in-the-middle phishing framework that captures login credentials and session cookies to defeat two-factor authentication, and it costs nothing to use. It runs as a standalone Go binary on a server you control, implementing its own HTTP and DNS handling so it can sit between a victim's browser and the real login page, proxying traffic through phishlets configured for specific targets. It is built for red teamers and penetration testers running authorized phishing engagements rather than for defenders, and the project explicitly restricts legitimate use to assignments with written permission. A commercial successor, Evilginx Pro, now exists alongside it for those wanting maintained phishlets and evasion features. The open-source project dates to 2018 with 31 contributors, but activity has slowed to just 3 commits in the past year and no release in over two years.

Evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, bypassing 2-factor authentication.

How evilginx2 helps

Can a target's login page be reproduced closely enough to capture what they type into it?

proxies live traffic between the victim's browser and the real site using a phishlet configured for that target, forwarding requests both ways so the real content is served while credentials are captured in transit

Will a captured login survive the target's two-factor prompt?

passes the session cookies issued after the victim completes authentication back out through the proxy, so the operator holds a token that represents an already-authenticated session

Can this run without owning a nginx setup or a separate DNS server?

ships as a single Go binary with its own HTTP and DNS handling built in, so it can be pointed at a domain and terminate TLS itself rather than depending on external server infrastructure

Will a phished domain get flagged the moment someone probes it directly?

configuring an unauthorized-request response and enabling blacklisting on proxied hosts stops the framework from behaving differently for scanners than for real visitors, closing off one way it was previously fingerprinted

Can real certificates be used instead of relying on automatic issuance?

reads a certificate and private key pair placed under the site's hostname directory, so a custom TLS certificate can be loaded in place of the automatic LetsEncrypt retrieval

Will requests sitting behind a load balancer show the wrong source address in the logs?

recognizes the originating client IP forwarded by common reverse proxies, so the logged address reflects the actual visitor rather than the proxy in front of the server

all 26 features, with the evidence for each →

Languages

Not documented

Features

26 capabilities · 4 backed by code, an API document or a real run

Built from evilginx2's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

What evilginx2 offers you

  • Command-line interface7
  • JavaScript scripting support1
  • Scripting language support1
All capabilities 26 capabilities
Configuration directory management verified Reads from and writes to a configuration directory on disk, with the path configurable via a CLI flag. 4 releases · 3 other sources · first seen Jan 2019

Also counts toward: Command-line interface

release

  • Configuration file renamed from config.yaml to config.json; existing YAML configs must be converted or migrated to JSON format v3.0.0 · May 2023 · source · release history
  • Changed default configuration file from config.yaml to config.json, permanently changing the configuration format to JSON v3.0.0 · May 2023 · source · release history
  • Added lures, with which you can prepare custom phishing URLs with each having its own set of unique options (help lures for more info). 2.3.0 · Jan 2019 · source · release history
  • Added OpenGraph settings for lures, allowing to create enticing content for link previews. 2.3.0 · Jan 2019 · source · release history

docs

  • Man-in-the-middle phishing framework that captures login credentials and session cookies to bypass 2-factor authentication.

command line

we ran it

  • The tool loaded phishlets from the specified path and began reading its configuration, but immediately failed when it could not create its config directory at «home»/.evilginx due to a read-only… Aug 2026 · the full run
Custom POST argument handling shipped Allows phishlet configuration to capture custom POST arguments from credentials and inject them into proxied requests. 6 releases · first seen Nov 2018

release

  • Updates lures get-url <id> to support encrypted custom parameters in the phishing URL via inline syntax like param1=value1 param2="value2" 2.4.0 · Sep 2020 · source · release history
  • Adds import argument to lures get-url <id> import <params_file> to import custom parameters from text, csv, or json files 2.4.0 · Sep 2020 · source · release history
  • Adds export argument to lures get-url <id> export <export_file> <text|csv|json> to export generated phishing URLs to text, csv, or json formats 2.4.0 · Sep 2020 · source · release history
  • Custom parameters are no longer sent as separate options in lures; they are now encoded exclusively within the phishing URL, breaking any workflow that relied on sending them via lures command options. 2.4.0 · Sep 2020 · source · release history
  • Capture custom POST arguments in the credentials.custom field for each authentication attempt 2.2.0 · Nov 2018 · source · release history
  • Inject custom POST arguments into proxied requests using phishlet configuration 2.2.0 · Nov 2018 · source · release history
Phishlet loading verified Loads phishlet definitions from a directory path supplied via the -p flag at startup. 2 releases · 2 other sources · first seen Nov 2018

release

  • Injected Javascript can be customized with values of custom parameters, specified in lure options. 2.3.0 · Jan 2019 · source · release history
  • The name field is removed from phishlet YAML configuration; the phishlet name is now derived exclusively from the filename 2.2.0 · Nov 2018 · source · release history

we ran it

  • The tool printed its version 3.3.0 banner and two informational messages, then exited with an error stating a phishlets directory path must be supplied via the -p flag. Aug 2026 · the full run
  • The tool loaded phishlets from the specified path and began reading its configuration, but immediately failed when it could not create its config directory at «home»/.evilginx due to a read-only… Aug 2026 · the full run
Regular expression support in phishlets shipped Enables the use of regular expression capture groups within sub_filters definitions in phishlet YAML configurations. 4 releases · first seen Nov 2018

release

  • Added {orig_hostname} and {orig_domain} support for sub_filters phishlet setting v3.0.0 · May 2023 · source · release history
  • Added {basedomain} and {basedomain_regexp} support for sub_filters phishlet setting v3.0.0 · May 2023 · source · release history
  • Adds with_params option to the sub_filter configuration key to enable sub_filter only when a specific parameter is set in the phishing URL 2.4.0 · Sep 2020 · source · release history
  • Use regular expression capture groups within sub_filters definitions in phishlet YAML 2.2.0 · Nov 2018 · source · release history
Automated TLS certificate management shipped Utilizes a library to automatically retrieve and renew Let's Encrypt TLS certificates. 3 releases · first seen May 2023

release

  • Enables loading custom TLS certificates from fullchain.pem and privkey.pem in ~/.evilginx/crt/sites/<hostname>/ or .pem/.crt and .key pairs v3.3.0 · Apr 2024 · source · release history
  • Adds config autocert <on/off> setting to disable automated TLS certificate retrieval from LetsEncrypt v3.3.0 · Apr 2024 · source · release history
  • certmagic library now manages automated retrieval and renewal of Let's Encrypt TLS certificates v3.0.0 · May 2023 · source · release history
Per-lure hostname configuration shipped Enables setting customized hostnames for individual phishing lures to aid in evasion. 1 release · 2 other sources · first seen Sep 2020

Also counts toward: Command-line interface

release

  • Adds lures edit <id> hostname <hostname> command to set customized hostnames for every phishing lure 2.4.0 · Sep 2020 · source · release history

example

  • Create a new child phishlet from a template, using parameters for subdomain or domain. evilginx2 phishlet create <phishlet> v3.0.0 · May 2023 · source
  • Assign a unique hostname to a specific lure for evasion. lures edit <id> hostname evil-login.example.com 2.4.0 · Sep 2020 · source
Phishlet configuration structure updates shipped Implements structural changes to phishlet YAML files, including restructured formats. 3 releases · first seen Nov 2018

release

  • Renamed lure templates to lure redirectors due to name conflict with phishlet templates v3.0.0 · May 2023 · source · release history
  • Phishlet templates allow creating child phishlets with custom parameters (e.g., {param_name} replacement) v3.0.0 · May 2023 · source · release history
  • Phishlet YAML config file structure has been restructured, requiring an update to existing phishlet files 2.2.0 · Nov 2018 · source · release history
Version display verified Reports the current version of the tool via a CLI flag or startup banner. 2 other sources · first seen May 2023

command line

we ran it

  • The tool printed its version 3.3.0 banner and two informational messages, then exited with an error stating a phishlets directory path must be supplied via the -p flag. Aug 2026 · the full run
Post-capture redirect customization shipped Allows configuration of default unauthorized or post-session capture redirect URLs at both global and phishlet levels. 2 releases · first seen Aug 2023

release

  • Adds optional redirect_url value in phishlet config to define default post-capture redirect (overridable by lure). v3.2.0 · Aug 2023 · source · release history
  • phishlet unauth_url <phishlet> <url> overrides the global unauthorized redirect URL for specific phishlets. v3.2.0 · Aug 2023 · source · release history
Proxy routing shipped Routes evilginx2 traffic through SOCKS5 or HTTP(S) proxies. 1 release · 1 other source · first seen Sep 2020

Also counts toward: Command-line interface

release

  • Adds proxy command to route connections via SOCKS5 and HTTP(S) proxies 2.4.0 · Sep 2020 · source · release history

example

  • Route all evilginx2 traffic through a SOCKS5 proxy. proxy socks5://127.0.0.1:9050 2.4.0 · Sep 2020 · source
User-Agent filtering shipped Filters traffic based on User-Agent strings, including blocking non-browser traffic and applying whitelist regular expressions. 1 release · 1 other source · first seen Sep 2020

Also counts toward: Command-line interface

release

  • Adds lures edit <id> ua_filter <regexp> subcommand to reject requests when the visitor's User-Agent does not match a whitelist regular expression filter for a given lure 2.4.0 · Sep 2020 · source · release history

example

  • Block non-browser traffic by filtering on the User-Agent string. lures edit <id> ua_filter "Mozilla/5.0.*" 2.4.0 · Sep 2020 · source
Custom Javascript injection shipped Allows injecting custom JavaScript code into proxied phishing pages, with values customizable via lure options. 2 releases · first seen Jan 2019

Also counts toward: JavaScript scripting support, Scripting language support

release

  • Added ability to inject custom Javascript into proxied pages. 2.3.0 · Jan 2019 · source · release history
  • Injected Javascript can be customized with values of custom parameters, specified in lure options. 2.3.0 · Jan 2019 · source · release history
Custom TLS certificate support shipped Allows administrators to load custom TLS certificates from local PEM files instead of relying solely on automated Let's Encrypt retrieval. 1 release · first seen Apr 2024

release

  • Enables loading custom TLS certificates from fullchain.pem and privkey.pem in ~/.evilginx/crt/sites/<hostname>/ or .pem/.crt and .key pairs v3.3.0 · Apr 2024 · source · release history
GoPhish integration shipped Provides official integration with the GoPhish platform for managing phishing campaigns. 1 release · first seen Apr 2024

release

  • Adds official integration with the GoPhish fork (https://github.com/kgretzky/gophish) for phishing campaign management v3.3.0 · Apr 2024 · source · release history
Request interception and custom responses shipped Intercepts specific HTTP requests in a phishlet to return custom payloads or responses. 1 release · first seen Aug 2023

release

  • Adds intercept section in phishlets to intercept HTTP requests and return custom responses. v3.2.0 · Aug 2023 · source · release history
Sandbox evasion delay shipped Pauses execution briefly after token capture to prevent automated sandbox detection. 1 other source · first seen Aug 2023

example

  • Pause a lure briefly to prevent sandbox detection after token capture. lures pause <id> v3.2.0 · Aug 2023 · source
Client-side redirect mechanism shipped Uses injected JavaScript for redirection after session capture instead of HTTP Location headers. 1 release · first seen May 2023

release

  • Redirection after successful session capture changed from Location header to injected Javascript redirection v3.0.0 · May 2023 · source · release history
Cross-origin authentication token capture shipped Captures authentication tokens from HTTP response bodies and headers in addition to cookies. 1 release · first seen May 2023

release

  • Authentication tokens can be captured from response body and HTTP headers (not just cookies) v3.0.0 · May 2023 · source · release history
External IP advertisement configuration shipped Allows setting a distinct external IP address for phishing links while listening on a different internal interface. 1 release · first seen May 2023

release

  • Lure templates renamed to redirectors; references to lure templates in phishlets or documentation will break v3.0.0 · May 2023 · source · release history
IFrame embedding support shipped Allows phishing pages to be embedded within HTML iframes. 1 release · first seen May 2023

release

Phishlet details display shipped Provides a command to view detailed information about a specific phishlet configuration. 1 release · first seen May 2023

Also counts toward: Command-line interface

release

  • Added phishlet <phishlet> subcommand to show details of a specific phishlet v3.0.0 · May 2023 · source · release history
Phishlet inheritance and templating shipped Enables creation of child phishlets from template phishlets using parameter replacement. 1 release · first seen May 2023

Also counts toward: Command-line interface

release

  • Added phishlet create subcommand to create child phishlets from template phishlets v3.0.0 · May 2023 · source · release history
Custom parameter encoding in phishing URLs shipped Allows custom parameters to be encoded directly within the phishing URL syntax instead of being sent as separate lure options. 1 release · first seen Sep 2020

release

  • Custom parameters are no longer sent as separate options in lures; they are now encoded exclusively within the phishing URL, breaking any workflow that relied on sending them via lures command options. 2.4.0 · Sep 2020 · source · release history
HTML template customisation verified Accepts a custom directory path for HTML templates used during operation. 1 other source · first seen Sep 2020

command line

IP blacklisting shipped Provides automated blacklisting and blocking of IP addresses via a blacklist command. 1 release · first seen Sep 2020

Also counts toward: Command-line interface

release

  • Adds blacklist command for IP blacklist with automated blacklisting and blocking on unauthorized requests 2.4.0 · Sep 2020 · source · release history
Automated sub_filter generation shipped Enables the proxy to automatically generate required sub_filters for phishlets, simplifying creation. 1 release · first seen Jan 2019

release

  • Proxy can now create most of required sub_filters on its own, making it much easier to create new phishlets. 2.3.0 · Jan 2019 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for evilginx2, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail evilginx2 puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

Show

7 entries

  1. April 20241
  2. August 20231
  3. July 20231
  4. May 20231
  5. September 20201
  6. January 20191
  7. November 20181
    Show

    7 entries

    Project health

    Issue, contributor and maintainer activity in kgretzky/evilginx2, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 2 +1 vs prior 12 months
    2. Maintainers 0 +1 joined · −1 left, last 12 months
    3. Bus factor 0 committers behind half the commits
    4. Community-filed not measured of issues opened, last 12 months
    5. Median time to close not measured issues closed, last 12 months
    6. Open backlog not measured open issues today
    1. Issues opened / month not measured
    2. Open backlog not measured
    3. Contributors / month 0
    4. Commits / month 0
    5. Stars 15,654
    Issue themes, last 12 months not measured

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Articles

    2 articles · updated Nov 4, 2026

    Where evilginx2 turns up in what others publish: how-tos, attack reports that name it, and incident write-ups. A row says why it is here and quotes where the article names it; the link goes to the publisher.

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    None of its release's images build from a lockfile we can read.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →