WWW2Exec - .dtors & .fini_array
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Danas je veoma čudno pronaći binarni fajl sa .dtors sekcijom!
Destruktori su funkcije koje se izvršavaju pre nego što program završi (nakon što main
funkcija vrati).
Adrese ovih funkcija se čuvaju unutar .dtors
sekcije binarnog fajla i stoga, ako uspete da napišete adresu do 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 samo vidite te vrednosti, to znači da nema registrovane funkcije. Dakle, prepišite 00000000
sa adresom do shellcode da biste ga izvršili.
Naravno, prvo morate pronaći mesto za skladištenje shellcode kako biste ga kasnije pozvali.
U suštini, ovo je struktura sa funkcijama koje će biti pozvane pre nego što program završi, poput .dtors
. Ovo je zanimljivo ako možete pozvati svoj shellcode jednostavno skakanjem na adresu, ili u slučajevima kada treba da se vratite na main
ponovo da biste iskoristili ranjivost drugi put.
Napomena da kada se funkcija iz .fini_array
izvrši, prelazi se na sledeću, tako da se neće izvršavati više puta (sprečavajući večne petlje), ali će takođe dati samo 1 izvršenje funkcije postavljene ovde.
Napomena da se unosi u .fini_array
pozivaju u obrnutom redosledu, tako da verovatno želite da počnete sa pisanjem od poslednjeg.
Da biste iskoristili .fini_array
za dobijanje večne petlje, možete proveriti šta je ovde urađeno: Ako imate najmanje 2 unosa u .fini_array
, možete:
Iskoristiti svoje prvo pisanje da ponovo pozovete ranjivu funkciju za proizvoljno pisanje
Zatim, izračunati adresu povratka na steku koju čuva __libc_csu_fini
(funkcija koja poziva sve funkcije iz .fini_array
) i staviti tamo adresu __libc_csu_fini
Ovo će učiniti da __libc_csu_fini
ponovo pozove sebe izvršavajući funkcije iz .fini_array
ponovo, što će pozvati ranjivu WWW funkciju 2 puta: jednom za proizvoljno pisanje i još jednom da ponovo prepiše adresu povratka __libc_csu_fini
na steku da bi se ponovo pozvao.
Napomena da sa Full RELRO, sekcija .fini_array
postaje samo za čitanje. U novijim verzijama, čak i sa [Partial RELRO], sekcija .fini_array
takođe postaje samo za čitanje.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)