
Dépassement de tampon classique basé sur la pile dans War FTP Daemon 1.65 démontrant une exécution de code à distance à l'ancienne via des commandes FTP malformées.
Débordement de tampon classique basé sur la pile dans War FTP Daemon 1.65 démontrant l'exécution de code à distance à l'ancienne via des commandes FTP malformées.
Ce dépôt fait partie du matériel que j'utilise lorsque j'enseigne l'exploitation des corruptions mémoire (en plus de mon travail régulier, j'enseigne également dans différents cours de cybersécurité où j'aide à former la prochaine génération d'ingénieurs en rétro-ingénierie).
CVE-2007-1567 est un cas que j'utilise juste après avoir présenté les bases des écrasements EIP vanilles. L'exploitation est propre et directe, mais elle comporte un détail qui la rend légèrement plus intéressante qu'un exercice initial typique : un mauvais caractère supplémentaire que le protocole FTP introduit et que les étudiants doivent identifier et prendre en compte lors de la construction de leur shellcode. C'est une petite contrainte, mais suffisante pour faire réfléchir les étudiants plutôt que de simplement copier une technique déjà utilisée.
War FTP Daemon 1.65 est un serveur FTP Windows hérité de la fin des années 1990. La vulnérabilité réside dans le gestionnaire de commande USER, qui utilise sprintf pour copier une entrée contrôlée par l'utilisateur dans un tampon de pile de taille fixe sans valider sa longueur. Ce qui rend ce cas utile pour l'enseignement :
War FTP Daemon est un serveur FTP Windows écrit à l'origine à la fin des années 1990. Il écoute sur le port TCP 21 et traite les commandes FTP standard. La vulnérabilité se trouve dans le gestionnaire de commande USER, qui traite le nom d'utilisateur envoyé par un client connecté en utilisant sprintf sans validation de longueur.
Détails techniques clés :
War FTP Daemon traite la commande USER en passant le nom d'utilisateur fourni à sprintf, qui le copie dans un tampon de pile de taille fixe sans vérifier sa longueur. Une version simplifiée de la logique vulnérable ressemble à ceci :
char buffer[256];
sprintf(buffer, "%sCRLF", username);
Envoyer une chaîne suffisamment longue comme argument USER provoque la copie au-delà de la fin du tampon, corrompant la pile jusqu'à ce que l'adresse de retour sauvegardée soit écrasée. Lorsque la fonction retourne, le CPU charge la valeur contrôlée par l'attaquant depuis la pile dans EIP et y saute.
Le crash peut être reproduit en envoyant un argument USER surdimensionné via FTP. Aucune authentification n'est requise. Exemple en 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()
Lorsqu'il est exécuté sous un débogueur, le crash montre EIP écrasé avec des données contrôlées par l'attaquant :
EIP = 41414141
confirmant que l'adresse de retour sauvegardée a été corrompue par le débordement.
L'objectif de ce dépôt n'est pas seulement de démontrer le crash, mais de parcourir le processus d'exploitation complet étape par étape, du fuzzing à un shell inverse fonctionnel.
Pour garder le README principal propre, les notes d'exploitation détaillées, les scripts et les étapes du débogueur sont placés dans le dossier Vulnerability 📂 de ce dépôt.
Vous y trouverez le flux de travail complet utilisé pour exploiter cette CVE, comprenant :