Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2002-1120 — Débordement de tampon (stack-based buffer overflow) classique dans Savant Web Server 3.1 démontrant une corruption de mémoire à distance du début des années 2000 via une requête HTTP forgée. | Kitploit
Outils/GitHubGitHub/themalwareguardian/cve-2002-1120
Analyse des VulnérabilitésExploitationRétro-ingénierieShellcodeDébogueursSécurité WebFuzzingTests d'IntrusionApprentissage et Éducation
Développement de Charges Utiles
Exploitation de Binaires
GitHubthemalwareguardian/cve-2002-1120

CVE-2002-1120

Débordement de tampon (stack-based buffer overflow) classique dans Savant Web Server 3.1 démontrant une corruption de mémoire à distance du début des années 2000 via une requête HTTP forgée.

Voir le dépôt
14il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

🐞 CVE-2002-1120: Savant Web Server 3.1 - Débordement de tampon basé sur la pile (Egghunter)

Débordement de tampon classique basé sur la pile dans Savant Web Server 3.1 démontrant une corruption mémoire distante du début des années 2000 via une requête HTTP malveillante (une vulnérabilité de 2002 qui exige plus d'un débutant que la plupart des CVEs de débordement de tampon de 2025).




📑 Table des matières

  • Pourquoi ce dépôt existe
  • Pourquoi cette vulnérabilité est intéressante
  • Contexte et logiciel concerné
  • À propos de la vulnérabilité
  • Déclenchement du plantage
  • Exploitation



🎓 Pourquoi ce dépôt existe

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 habituel, j'enseigne également dans différents cours de cybersécurité où j'aide à former la prochaine génération de rétro-ingénieurs). Quand j'aborde les débordements de tampon basés sur la pile en classe, je travaille sur des cas réels plutôt que sur des exemples jouets, et ce CVE est l'un de ceux auxquels je reviens spécifiquement lorsque je veux challenger des étudiants qui ont déjà une certaine expérience avec les écrasements de base d'EIP.

La raison en est que l'année dans un identifiant CVE ne vous dit rien sur la difficulté de l'exploitation. La plupart des étudiants supposent que les CVEs plus anciens doivent être plus simples : un débordement direct, un JMP ESP, terminé. Celui-ci prouve le contraire. Certains CVEs que j'enseigne de 2025 sont fondamentalement plus basiques que celui-ci, parce que la classe de vulnérabilité est plus simple ou les contraintes sont moindres. CVE-2002-1120 nécessite de comprendre des choses que certaines exploits modernes n'exigent pas : pourquoi certains opcodes ne peuvent pas être utilisés dans certaines parties de la requête, comment fabriquer un saut conditionnel qui se déclenche toujours quand le saut inconditionnel est bloqué, comment livrer du shellcode quand il ne tient pas là où on le mettrait normalement, et comment un egghunter résout un problème d'espace qui rendrait l'exploit impossible autrement.

C'est le CVE que j'assigne quand je veux voir si quelqu'un comprend réellement ce qu'il fait.




💡 Pourquoi cette vulnérabilité est intéressante

Cette vulnérabilité affecte Savant 3.1, un serveur HTTP Windows freeware de 2002. Ce qui la rend digne d'étude en 2025, ce n'est pas l'âge mais la combinaison de contraintes qu'elle introduit et les techniques nécessaires pour les contourner :

  • Pas d'espace après EIP. Le tampon utilisable fait environ 267 octets avant l'adresse de retour. Tout ce qui dépasse n'atteint pas le tampon vulnérable, donc le shellcode ne peut pas être placé à l'emplacement habituel après EIP.
  • Le champ de la méthode HTTP est exécutable. Savant copie la méthode en mémoire et l'exécute. Les octets qui épellent normalement GET sont traités comme du code, ce qui signifie qu'un attaquant peut y placer des opcodes, mais seulement ceux qui survivent à un filtre strict de caractères interdits.
  • Deux listes de caractères interdits distinctes. L'URI et le champ de la méthode ont une logique de filtrage différente dans Savant. Les deux doivent être analysés indépendamment. La zone de la méthode bloque un ensemble d'octets beaucoup plus large que l'URI.
  • Le JMP inconditionnel est un caractère interdit. \xeb ne passe pas le filtre de la zone de la méthode. Un saut conditionnel qui se déclenche toujours doit être construit manuellement avec trois opcodes : charger une valeur dans un registre, la comparer à une valeur plus petite, et sauter si le résultat n'est pas inférieur ou égal.
  • Le shellcode ne tient pas. Même avec le saut qui fonctionne et l'exécution qui atterrit dans le tampon de l'URI, environ 264 octets ne suffisent pas pour un reverse shell. La charge utile réelle doit aller ailleurs, dans le corps HTTP, que Savant stocke dans une région de tas séparée de la pile, et un egghunter est nécessaire pour la localiser à l'exécution.

Chacune de ces contraintes est une leçon en soi.




🔍 Contexte et logiciel concerné

Savant est un serveur HTTP Windows open-source freeware initialement conçu pour transformer n'importe quel ordinateur de bureau en serveur web. Il écoute sur le port TCP 80 et traite les requêtes HTTP GET standard. Le débordement se produit dans le gestionnaire qui copie le chemin de l'URI dans un tampon de pile de taille fixe sans valider sa longueur.

Détails techniques clés :

  • Type de vulnérabilité : Débordement de tampon basé sur la pile
  • Version concernée : Savant Web Server 3.1
  • Point d'entrée concerné : Requête HTTP GET
  • Composant vulnérable : Gestion du chemin de l'URI dans le gestionnaire GET
  • Authentification requise : Non
  • Impact : Exécution de code à distance



⚠️ À propos de la vulnérabilité

Savant traite les requêtes HTTP GET entrantes et copie le chemin de l'URI dans un tampon de pile de taille fixe sans vérifier sa longueur. Une version simplifiée de la logique vulnérable ressemble à ceci :

root@kitploit:~
char uri_buffer[270];

strcpy(uri_buffer, uri_path);

Envoyer une requête GET avec un URI d'environ 271 octets écrase l'adresse de retour sauvegardée sur la pile. Le débordement est contraint ; en envoyer significativement plus provoque un plantage tel que EIP n'est plus contrôlé, donc la fenêtre utile est étroite.

L'exploitation est plus complexe qu'un simple écrasement d'EIP à cause de deux propriétés supplémentaires du serveur : le champ de la méthode HTTP est également copié en mémoire et exécuté, et le corps de la requête HTTP est stocké dans une région de tas séparée plutôt que sur la pile (ces deux propriétés deviennent des parties essentielles de la chaîne d'exploitation).




💥 Déclenchement du plantage

Le plantage peut être reproduit en envoyant une requête GET avec un URI suffisamment long. Aucune authentification n'est requise. Exemple avec Python :

root@kitploit:~
import socket

HOST = '127.0.0.1'
PORT = 80

payload = b"A" * 271

request = (
	b"GET /" + payload + b" HTTP/1.1\r\n"
	b"Host: 127.0.0.1\r\n"
	b"Connection: close\r\n"
	b"\r\n"
)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
Télécharger l’outil

Lorsqu'il est exécuté sous un débogueur, le plantage montre EIP écrasé avec des données contrôlées par l'utilisateur :

root@kitploit:~
EIP = 41414141

confirmant que l'adresse de retour sauvegardée a été corrompue par le débordement.




💣 Exploitation

Le but de ce dépôt n'est pas seulement de démontrer le plantage, mais de parcourir le processus d'exploitation complet étape par étape, y compris chaque contrainte qui rend ce cas plus difficile qu'un écrasement standard d'EIP et chaque décision prise pour les contourner.

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 ce CVE, notamment :

  • Fuzzing de l'URI GET pour identifier la fenêtre de plantage.
  • Découverte manuelle du décalage (les motifs cycliques ne peuvent pas être utilisés ici).
  • Analyse des caractères interdits pour la zone URI et le champ de la méthode HTTP séparément.
  • Recherche d'un gadget POP / RET dans Savant.exe pour l'écrasement d'EIP.
  • Confirmation que l'exécution atterrit dans le champ de la méthode après le déclenchement du gadget.
  • Fabrication d'un saut conditionnel JNLE pour atteindre le tampon URI depuis le champ de la méthode.
  • Localisation du corps HTTP dans le tas et mesure de l'espace disponible.
  • Placement d'un egghunter dans le tampon URI et du shellcode marqué avec l'œuf dans le corps HTTP.