WWW2Exec - .dtors & .fini_array

Reading time: 3 minutes

tip

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)

Podržite HackTricks

.dtors

caution

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 u shellcode u __DTOR_END__, to će biti izvršeno pre nego što program završi.

Dobijte adresu ove sekcije sa:

bash
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”

Obično ćete pronaći DTOR oznake između vrednosti ffffffff i 00000000. Dakle, ako samo vidite te vrednosti, to znači da nema registrovane funkcije. Tako prepišite 00000000 sa adresom do shellcode da biste ga izvršili.

warning

Naravno, prvo morate pronaći mesto za skladištenje shellcode kako biste ga kasnije pozvali.

.fini_array

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.

bash
objdump -s -j .fini_array ./greeting

./greeting:     file format elf32-i386

Contents of section .fini_array:
8049934 a0850408

#Put your address in 0x8049934

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čavanje večitih petlji), 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 da pišete od poslednjeg.

Večna petlja

Da biste iskoristili .fini_array za dobijanje večite 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.

caution

Napomena da sa Full RELRO, sekcija .fini_array je postavljena na samo za čitanje. U novijim verzijama, čak i sa [Partial RELRO] sekcija .fini_array je takođe postavljena na samo za čitanje.

tip

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)

Podržite HackTricks