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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
.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:
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.
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.