0Pricing
Ethical Hacking Academy · Leçon

Contrôler EIP

Écraser l’adresse de retour

Contrôler EIP est une leçon Ethical Hacking Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ethical Hacking Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ethical Hacking Academy comprend 4 leçons au total.

L'objectif

Vous connaissez le décalage et pouvez donc placer quatre octets quelconques dans EIP. La question est maintenant la suivante : quelle adresse devez-vous y placer ?

Vous voulez qu'EIP pointe vers votre code shell. Mais vous ne pouvez pas simplement inscrire en dur l'adresse de la pile : vous avez besoin d'un saut fiable.

Pourquoi ne pas inscrire en dur l'adresse de la pile ?

L'adresse de la pile où se trouve votre code shell peut changer selon les exécutions et les systèmes. Même de petites modifications de l'environnement la déplacent.

À la place, vous utilisez une instruction stable déjà présente en mémoire, qui redirige l'exécution vers l'adresse actuellement indiquée par ESP.

L'astuce JMP ESP

Si ESP pointe vers votre code shell au moment du plantage, vous pouvez définir EIP sur l'adresse d'une instruction JMP ESP. Lorsque EIP charge cette adresse, le CPU exécute jmp esp et saute vers votre code shell.

Cette indirection rend l'exploit fiable quelle que soit l'adresse exacte de la pile.

jmp esp   ; opcode FF E4

Trouver un JMP ESP

Recherchez dans les modules chargés (de préférence ceux sans ASLR) les octets d'opcode FF E4. L'adresse de base du module reste constante, ce qui rend ce gadget fiable.

Des outils comme mona.py trouvent automatiquement les instructions appropriées.

!mona jmp -r esp -cpb "\x00"

Éviter les caractères interdits

Certaines valeurs d'octets altèrent les données avant qu'elles n'atteignent intactes le tampon. Le cas classique est l'octet nul 0x00, qui termine les chaînes C. Il y a aussi 0x0a (saut de ligne) et 0x0d (retour chariot).

L'adresse de JMP ESP ne doit contenir aucun de ces caractères interdits.

Identifier les caractères interdits

Pour déterminer quels octets posent problème, envoyez toutes les valeurs d'octet de 0x00 à 0xff dans le tampon et inspectez la mémoire dans le débogueur. Les octets modifiés ou absents sont des caractères interdits.

Vous les exclurez à la fois de l'adresse de retour et du code shell.

!mona bytearray -cpb "\x00"

Construire l'écrasement d'EIP

Assemblez maintenant l'entrée : le remplissage jusqu'au décalage, puis l'adresse de JMP ESP au format petit-boutiste.

Si JMP ESP se trouve à l'adresse 0x625011AF, les octets écrits sont inversés.

buf = "A"*offset + "\xaf\x11\x50\x62"  # 0x625011AF, little-endian

Vérifier le saut

Placez un point d'arrêt sur l'adresse de JMP ESP dans le débogueur, puis exécutez l'exploit. Lorsque EIP l'atteint et passe à l'adresse indiquée par ESP, vous avez confirmé la fiabilité de la redirection.

À ce stade, EIP pointe vers l'emplacement où ira votre code shell.

Faire de la place pour le code shell

Après l'adresse de retour, le tampon restant (vers lequel pointe ESP) contient votre code shell. Si l'espace est limité, vous devrez peut-être effectuer un saut court ou déplacer le code.

Un toboggan de NOP (une suite d'octets sans opération 0x90) placée avant le code shell ajoute une marge qui permet au saut d'atterrir n'importe où dans le toboggan.

buf = "A"*offset + ret + "\x90"*16 + shellcode

Assembler le tout

La structure complète de l'exploit est maintenant claire :

  • Le remplissage jusqu'au décalage.
  • L'adresse de JMP ESP (sans caractères interdits, au format petit-boutiste).
  • Un toboggan de NOP.
  • Le code shell.

Vous n'êtes plus qu'à une étape d'obtenir un interpréteur de commandes.

Alternatives à JMP ESP

JMP ESP est la redirection classique, mais ce n'est pas la seule. Si un autre registre pointe vers votre tampon, vous pouvez utiliser jmp eax, call esp ou un gadget push esp; ret.

Le principe reste le même : trouver une instruction stable qui transfère le contrôle vers l'emplacement de votre code shell.

Vérification rapide

Rappelez-vous pourquoi JMP ESP est préféré à une adresse de pile inscrite en dur.

Récapitulatif

Vous contrôlez maintenant le flux d'exécution :

  • Écrasez EIP avec l'adresse d'un gadget JMP ESP plutôt qu'avec une adresse de pile fragile.
  • Trouvez le gadget dans un module sans ASLR, en évitant les caractères interdits comme 0x00.
  • Écrivez l'adresse au format petit-boutiste et ajoutez un toboggan de NOP avant le code shell.

Ensuite, vous génèrerez le code shell et ouvrirez un interpréteur de commandes.

Questions Fréquemment Posées

La leçon « Contrôler EIP » est-elle gratuite ?

Oui — le texte complet de « Contrôler EIP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ethical Hacking Academy, passe à CoddyKit PRO. Le cours Ethical Hacking Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Contrôler EIP » ?

Écraser l’adresse de retour Tu pratiques Ethical Hacking Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Ethical Hacking Academy ?

Aucune expérience préalable n'est requise. Ethical Hacking Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Contrôler EIP » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Ethical Hacking Academy ?

Oui. Chaque leçon Ethical Hacking Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Mémoire et pile
  2. Fuzzing pour provoquer des plantages
  3. Contrôler EIP
  4. Shellcode et exploitation
← Retour à Ethical Hacking Academy