EIP kontrollieren
Die Rücksprungadresse überschreiben
EIP kontrollieren ist eine kostenlose Ethical Hacking Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ethical Hacking Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ethical Hacking Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Ziel
Sie kennen den Offset und können daher beliebige vier Bytes in EIP schreiben. Die Frage lautet nun: Welche Adresse sollten Sie dort eintragen?
EIP soll auf Ihren Shellcode zeigen. Sie können die Stackadresse jedoch nicht einfach fest eintragen; Sie benötigen einen zuverlässigen Sprung.
Warum die Stackadresse nicht fest eintragen?
Die Stackadresse, an der sich Ihr Shellcode befindet, kann sich zwischen Durchläufen und Systemen ändern. Selbst kleine Änderungen an der Umgebung verschieben sie.
Stattdessen verwenden Sie eine stabile, bereits im Speicher vorhandene Anweisung, die die Ausführung an die aktuelle Adresse von ESP umleitet.
Der JMP-ESP-Trick
Wenn ESP zum Zeitpunkt des Absturzes auf Ihren Shellcode zeigt, können Sie EIP auf die Adresse einer JMP ESP-Anweisung setzen. Sobald EIP diese Adresse lädt, führt die CPU jmp esp aus und springt in Ihren Shellcode.
Diese Indirektion macht den Exploit unabhängig von der exakten Stackadresse zuverlässig.
jmp esp ; opcode FF E4Eine JMP-ESP-Anweisung finden
Durchsuchen Sie geladene Module (vorzugsweise solche ohne ASLR) nach den Opcode-Bytes FF E4. Die Basisadresse des Moduls bleibt konstant, wodurch dieses Gadget zuverlässig ist.
Werkzeuge wie mona.py finden geeignete Anweisungen automatisch.
!mona jmp -r esp -cpb "\x00"Problematische Zeichen vermeiden
Bestimmte Bytewerte beschädigen die Eingabe, bevor sie unverändert den Puffer erreicht. Das klassische Beispiel ist das Nullbyte 0x00, das C-Zeichenketten beendet. Weitere Beispiele sind 0x0a (Zeilenumbruch) und 0x0d (Wagenrücklauf).
Die JMP-ESP-Adresse darf keines dieser problematischen Zeichen enthalten.
Problematische Zeichen bestimmen
Um herauszufinden, welche Bytes problematisch sind, senden Sie alle Bytewerte von 0x00 bis 0xff im Puffer und untersuchen den Speicher im Debugger. Bytes, die verändert wurden oder fehlen, sind problematische Zeichen.
Sie schließen diese sowohl aus der Rücksprungadresse als auch aus dem Shellcode aus.
!mona bytearray -cpb "\x00"Das Überschreiben von EIP aufbauen
Setzen Sie nun die Eingabe zusammen: Auffüllbytes bis zum Offset, anschließend die JMP-ESP-Adresse in Little-Endian-Reihenfolge.
Wenn sich JMP ESP bei 0x625011AF befindet, werden die Bytes in umgekehrter Reihenfolge geschrieben.
buf = "A"*offset + "\xaf\x11\x50\x62" # 0x625011AF, little-endianDen Sprung überprüfen
Setzen Sie im Debugger einen Haltepunkt auf die JMP-ESP-Adresse und führen Sie den Exploit aus. Wenn EIP diese Adresse erreicht und über ESP weiterspringt, haben Sie die zuverlässige Umleitung bestätigt.
Zu diesem Zeitpunkt zeigt EIP auf die Stelle, an der Ihr Shellcode platziert wird.
Platz für Shellcode schaffen
Hinter der Rücksprungadresse enthält der verbleibende Puffer, auf den ESP zeigt, Ihren Shellcode. Wenn der Platz knapp ist, benötigen Sie möglicherweise einen kurzen Sprung oder müssen den Shellcode an eine andere Stelle verschieben.
Ein NOP-Sled (eine Folge von 0x90-No-Operation-Bytes) vor dem Shellcode schafft Toleranz, sodass der Sprung an jeder Stelle im Sled landen kann.
buf = "A"*offset + ret + "\x90"*16 + shellcodeAlles zusammensetzen
Die vollständige Struktur des Exploits ist nun klar:
- Auffüllbytes bis zum Offset.
- Die JMP-ESP-Adresse (ohne problematische Zeichen, in Little-Endian-Reihenfolge).
- Ein NOP-Sled.
- Der Shellcode.
Sie sind nur noch einen Schritt von einer Shell entfernt.
Alternativen zu JMP ESP
JMP ESP ist die klassische Umleitung, aber nicht die einzige. Wenn ein anderes Register auf Ihren Puffer zeigt, können Sie ein jmp eax-, call esp- oder push esp; ret-Gadget verwenden.
Das Prinzip bleibt dasselbe: Finden Sie eine stabile Anweisung, die die Kontrolle an die Stelle überträgt, an der sich Ihr Shellcode befindet.
Kurze Überprüfung
Rufen Sie sich in Erinnerung, warum JMP ESP einer fest eingetragenen Stackadresse vorgezogen wird.
Zusammenfassung
Sie kontrollieren nun den Kontrollfluss:
- Überschreiben Sie EIP mit der Adresse eines JMP-ESP-Gadgets statt mit einer unsicheren Stackadresse.
- Finden Sie das Gadget in einem Modul ohne ASLR und vermeiden Sie problematische Zeichen wie
0x00. - Schreiben Sie die Adresse in Little-Endian-Reihenfolge und fügen Sie vor dem Shellcode ein NOP-Sled ein.
Als Nächstes erzeugen Sie Shellcode und öffnen eine Shell.
Häufig gestellte Fragen
Ist die Lektion „EIP kontrollieren“ kostenlos?
Ja — der vollständige Text von „EIP kontrollieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ethical Hacking Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ethical Hacking Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „EIP kontrollieren“?
Die Rücksprungadresse überschreiben Du übst Ethical Hacking Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Ethical Hacking Academy zu starten?
Keine Vorkenntnisse erforderlich. Ethical Hacking Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „EIP kontrollieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Ethical Hacking Academy-Lektion Code schreiben und ausführen?
Ja. Jede Ethical Hacking Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Speicher und Stack
- Fuzzing zur Absturzsuche
- EIP kontrollieren
- Shellcode und Exploitation