# Ret2esp / Ret2reg
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
## **Rest2esp** **Da der ESP (Stack-Zeiger) immer auf den obersten Teil des Stacks zeigt**, beinhaltet diese Technik das Ersetzen des EIP (Instruktionszeigers) durch die Adresse einer **`jmp esp`** oder **`call esp`** Anweisung. Dadurch wird der Shellcode direkt nach dem überschriebenen EIP platziert. Wenn die `ret`-Anweisung ausgeführt wird, zeigt ESP auf die nächste Adresse, genau dort, wo der Shellcode gespeichert ist. Wenn **Address Space Layout Randomization (ASLR)** in Windows oder Linux nicht aktiviert ist, ist es möglich, `jmp esp` oder `call esp` Anweisungen in gemeinsam genutzten Bibliotheken zu verwenden. Mit aktivem [**ASLR**](../common-binary-protections-and-bypasses/aslr/) könnte es jedoch erforderlich sein, innerhalb des anfälligen Programms nach diesen Anweisungen zu suchen (und Sie müssen möglicherweise [**PIE**](../common-binary-protections-and-bypasses/pie/) umgehen). Darüber hinaus ermöglicht es, den Shellcode **nach der EIP-Korruption** zu platzieren, anstatt in der Mitte des Stacks, sicherzustellen, dass keine `push` oder `pop` Anweisungen, die während des Betriebs der Funktion ausgeführt werden, den Shellcode beeinträchtigen. Diese Beeinträchtigung könnte auftreten, wenn der Shellcode in der Mitte des Stacks der Funktion platziert wäre. ### Platzmangel Wenn Ihnen der Platz zum Schreiben nach dem Überschreiben von RIP fehlt (vielleicht nur wenige Bytes), schreiben Sie einen anfänglichen `jmp`-Shellcode wie: ```armasm sub rsp, 0x30 jmp rsp ``` Und schreiben Sie den Shellcode früh im Stapel. ### Beispiel Sie können ein Beispiel für diese Technik unter [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) finden mit einem endgültigen Exploit wie: ```python from pwn import * elf = context.binary = ELF('./vuln') p = process() jmp_rsp = next(elf.search(asm('jmp rsp'))) payload = b'A' * 120 payload += p64(jmp_rsp) payload += asm(''' sub rsp, 10; jmp rsp; ''') pause() p.sendlineafter('RSP!\n', payload) p.interactive() ``` ## Ret2reg Ebenso können wir, wenn wir wissen, dass eine Funktion die Adresse zurückgibt, an der der Shellcode gespeichert ist, die **`call eax`**- oder **`jmp eax`**-Anweisungen nutzen (bekannt als **ret2eax**-Technik), um eine weitere Methode zum Ausführen unseres Shellcodes zu bieten. Genau wie eax kann **jeder andere Registerwert** mit einer interessanten Adresse verwendet werden (**ret2reg**). ### Beispiel Ein Beispiel findest du hier: [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg) ## Schutzmaßnahmen * [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Wenn der Stack nicht ausführbar ist, hilft dies nicht, da wir den Shellcode im Stack platzieren und zu seiner Ausführung springen müssen. * [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Diese können es schwieriger machen, eine Anweisung zum Springen zu esp oder einem anderen Register zu finden. ## Referenzen * [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode) * [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)
Lerne AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn du deine **Firma in HackTricks beworben sehen möchtest** oder **HackTricks als PDF herunterladen möchtest**, überprüfe die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Hol dir das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecke [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Trete der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Teile deine Hacking-Tricks, indem du PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichst.