
Buffer overflow classico basato sullo stack in War FTP Daemon 1.65 che dimostra l'esecuzione remota di codice all'antica tramite comandi FTP malformati.
Classico buffer overflow basato su stack in War FTP Daemon 1.65 che mostra l'esecuzione remota di codice all'antica tramite comandi FTP malformati.
Questo repository fa parte del materiale che utilizzo quando insegno lo sfruttamento della corruzione della memoria (oltre al mio lavoro regolare, insegno anche in diversi corsi di cybersecurity dove aiuto a formare la prossima generazione di reverse engineer).
CVE-2007-1567 è un caso che utilizzo subito dopo aver introdotto le basi delle sovrascritture vanilla di EIP. Lo sfruttamento è pulito e diretto, ma ha un dettaglio che lo rende leggermente più interessante di un tipico primo esercizio: un carattere proibito extra che il protocollo FTP introduce e che gli studenti devono identificare e considerare quando costruiscono il loro shellcode. È un piccolo vincolo, ma sufficiente per far pensare gli studenti piuttosto che limitarsi a copiare una tecnica già utilizzata.
War FTP Daemon 1.65 è un server FTP Windows legacy della fine degli anni '90. La vulnerabilità si trova nel gestore del comando USER, che usa sprintf per copiare l'input controllato dall'utente in un buffer dello stack di dimensione fissa senza convalidarne la lunghezza. Ciò che rende questo caso utile per l'insegnamento:
War FTP Daemon è un server FTP Windows originariamente scritto alla fine degli anni '90. Ascolta sulla porta TCP 21 e gestisce i comandi FTP standard. La vulnerabilità si trova nel gestore del comando USER, che elabora il nome utente inviato da un client in connessione usando sprintf senza convalida della lunghezza.
Dettagli tecnici chiave:
War FTP Daemon elabora il comando USER passando il nome utente fornito a sprintf, che lo copia in un buffer dello stack di dimensione fissa senza controllarne la lunghezza. Una versione semplificata della logica vulnerabile è simile a questa:
char buffer[256];
sprintf(buffer, "%sCRLF", username);
Inviare una stringa sufficientemente lunga come argomento USER fa sì che la copia scriva oltre la fine del buffer, corrompendo lo stack fino a sovrascrivere l'indirizzo di ritorno salvato. Quando la funzione ritorna, la CPU carica il valore controllato dall'attaccante dallo stack in EIP e vi salta.
Il crash può essere riprodotto inviando un argomento USER sovradimensionato tramite FTP. Non è richiesta autenticazione. Esempio usando Python:
import socket
HOST = '127.0.0.1'
PORT = 21
payload = b"A" * 700
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER " + payload + b"\r\n")
s.close()
Quando eseguito sotto un debugger, il crash mostra EIP sovrascritto con dati controllati dall'utente:
EIP = 41414141
confermando che l'indirizzo di ritorno salvato è stato corrotto dall'overflow.
L'obiettivo di questo repository non è solo dimostrare il crash, ma guidare attraverso l'intero processo di sfruttamento passo dopo passo, dal fuzzing a una reverse shell funzionante.
Per mantenere pulito il README principale, le note dettagliate di sfruttamento, gli script e i passaggi del debugger sono inseriti nella cartella Vulnerability 📂 di questo repository.
Lì troverai il workflow completo utilizzato per sfruttare questa CVE, inclusi: