WWW2Exec - .dtors & .fini_array
.dtors
Danas je vrlo čudno naći binarni fajl sa .dtors sekcijom!
Destruktori su funkcije koje se izvršavaju pre završetka programa (nakon što se funkcija main
završi).
Adrese ovih funkcija se čuvaju unutar .dtors
sekcije binarnog fajla i stoga, ako uspete da upišete adresu za shellcode u __DTOR_END__
, to će biti izvršeno pre nego što program završi.
Dobijte adresu ove sekcije sa:
Obično ćete pronaći DTOR markere između vrednosti ffffffff
i 00000000
. Dakle, ako vidite samo te vrednosti, to znači da nema registrovane funkcije. Dakle, prepšišite 00000000
sa adresom shell koda da biste ga izvršili.
Naravno, prvo morate pronaći mesto za čuvanje shell koda kako biste ga kasnije mogli pozvati.
.fini_array
Essentially this is a structure with functions that will be called before the program finishes, like .dtors
. This is interesting if you can call your shellcode just jumping to an address, or in cases where you need to go back to main
again to exploit the vulnerability a second time.
Večita petlja
Da biste zloupotrebili .fini_array
kako biste dobili večitu petlju, možete proveriti šta je urađeno ovde: Ako imate najmanje 2 unosa u .fini_array
, možete:
Koristite svoj prvi zapis da pozovete ranjivu funkciju za proizvoljni zapis ponovo
Zatim, izračunajte povratnu adresu na steku koju čuva
__libc_csu_fini
(funkcija koja poziva sve funkcije.fini_array
) i stavite tamo adresu__libc_csu_fini
Ovo će naterati
__libc_csu_fini
da pozove sam sebe ponovo izvršavajući ponovo funkcije.fini_array
koje će pozvati ranjivu WWW funkciju 2 puta: jednom za proizvoljni zapis i još jednom da ponovo prepiše povratnu adresu__libc_csu_fini
na steku da bi se ponovo pozvao.
Imajte na umu da sa Full RELRO, odeljak .fini_array
je postavljen kao samo za čitanje. U novijim verzijama, čak i sa [Partial RELRO] odeljak .fini_array
je takođe postavljen kao samo za čitanje.
Last updated