House of Force
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)
Ova tehnika je zakrpljena (ovde) i proizvodi ovu grešku: malloc(): corrupted top size
Možete probati kod odavde da ga testirate ako želite.
Cilj ovog napada je da se omogući alokacija chunk-a na specifičnoj adresi.
Overflow koji omogućava prepisivanje veličine zaglavlja gornjeg chunk-a (npr. -1).
Mogućnost kontrole veličine alokacije na heap-u.
Ako napadač želi da alocira chunk na adresi P da bi prepisao vrednost ovde. Počinje prepisivanjem veličine gornjeg chunk-a sa -1
(možda sa overflow-om). Ovo osigurava da malloc neće koristiti mmap za bilo koju alokaciju jer će gornji chunk uvek imati dovoljno prostora.
Zatim, izračunava razdaljinu između adrese gornjeg chunk-a i ciljnog prostora za alokaciju. To je zato što će se malloc sa tom veličinom izvršiti kako bi se gornji chunk pomerio na tu poziciju. Ovako se razlika/veličina može lako izračunati:
Zato, alociranje veličine target - old_top - 4*sizeof(long)
(4 long-ova su zbog metapodataka gornjeg dela i novog dela kada se alocira) će pomeriti gornji deo na adresu koju želimo da prepišemo.
Zatim, uradite još jedan malloc da dobijete deo na ciljnoj adresi.
Cilj ovog scenarija je ret2win gde treba da modifikujemo adresu funkcije koja će biti pozvana adresom ret2win funkcije
Binarni fajl ima overflow koji se može iskoristiti za modifikaciju veličine gornjeg dela, koja se menja na -1 ili p64(0xffffffffffffffff)
Zatim, izračunava se adresa do mesta gde se nalazi pokazivač koji treba prepisati, a razlika od trenutne pozicije gornjeg dela do tamo se alocira sa malloc
Na kraju se alocira novi deo koji će sadržati ovu željenu metu unutar koje se prepisuje funkcija ret2win
U Input your name:
postoji inicijalna ranjivost koja omogućava da se iscuri adresa iz heap-a
Zatim u Org:
i Host:
funkcionalnosti moguće je popuniti 64B s
pokazivača kada se traži org name, koji u steku sledi adresu v2, koja zatim sledi označenoj host name. Kako će strcpy kopirati sadržaj s u deo veličine 64B, moguće je prepisati veličinu gornjeg dela sa podacima stavljenim unutar host name.
Sada kada je proizvoljno pisanje moguće, atoi
-ov GOT je prepisan na adresu printf. tada je bilo moguće iscuriti adresu IO_2_1_stderr
sa %24$p
. I sa ovim libc leak-om bilo je moguće ponovo prepisati atoi
-ov GOT sa adresom system
i pozvati ga prosledivši kao parametar /bin/sh
Alternativna metoda predložena u ovom drugom izveštaju je da se prepisuje free
sa puts
, a zatim dodaje adresa atoi@got
, u pokazivač koji će kasnije biti oslobođen tako da se iscuri i sa ovim leak-om ponovo prepisuje atoi@got
sa system
i poziva ga sa /bin/sh
.
Postoji UAF koji omogućava ponovnu upotrebu dela koji je oslobođen bez brisanja pokazivača. Zbog nekih metoda čitanja, moguće je iscuriti libc adresu pisanjem pokazivača na funkciju free u GOT ovde i zatim pozivajući funkciju read.
Zatim, House of force je korišćen (zloupotrebljavajući UAF) da prepiše veličinu preostalog prostora sa -1, alocira deo dovoljno veliki da dođe do free hook-a, a zatim alocira još jedan deo koji će sadržati free hook. Zatim, upisuje u hook adresu system
, upisuje u deo "/bin/sh"
i konačno oslobađa deo sa tim sadržajem stringa.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)