House of Force
Reading time: 5 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.
Osnovne informacije
Kod
- 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
- Cilj ovog napada je da se omogući alokacija dela u specifičnoj adresi.
Zahtevi
- Overflow koji omogućava prepisivanje veličine zaglavlja gornjeg dela (npr. -1).
- Mogućnost kontrole veličine alokacije na heap-u.
Napad
Ako napadač želi da alocira deo na adresi P da bi prepisao vrednost ovde. Počinje prepisivanjem veličine gornjeg dela sa -1
(možda uz pomoć overflow-a). Ovo osigurava da malloc neće koristiti mmap za bilo koju alokaciju jer će gornji deo uvek imati dovoljno prostora.
Zatim, izračunajte razdaljinu između adrese gornjeg dela i ciljnog prostora za alokaciju. To je zato što će se malloc sa tom veličinom izvršiti kako bi se gornji deo pomerio na tu poziciju. Ovako se razlika/veličina može lako izračunati:
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/
Zato, alociranje veličine target - old_top - 4*sizeof(long)
(4 long-a 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.
References & Other Examples
- https://github.com/shellphish/how2heap/tree/master
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/
- https://heap-exploitation.dhavalkapil.com/attacks/house_of_force
- https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c
- https://guyinatuxedo.github.io/41-house_of_force/house_force_exp/index.html
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/#hitcon-training-lab-11
- 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 se izračunava adresa 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
- https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp
- U
Input your name:
postoji inicijalna ranjivost koja omogućava curenje adrese iz heap-a - Zatim u
Org:
iHost:
funkcionalnosti moguće je popuniti 64Bs
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. tako je bilo moguće curiti adresuIO_2_1_stderr
sa%24$p
. I sa ovim libc curenjem bilo je moguće ponovo prepisatiatoi
-ov GOT sa adresomsystem
i pozvati ga prosledivši kao parametar/bin/sh
- Alternativna metoda predložena u ovom drugom izveštaju je da se prepisuje
free
saputs
, a zatim dodaje adresaatoi@got
, u pokazivač koji će kasnije biti oslobođen tako da se curi i sa ovim curenjem ponovo prepisujeatoi@got
sasystem
i poziva ga sa/bin/sh
. - https://guyinatuxedo.github.io/41-house_of_force/bkp16_cookbook/index.html
- Postoji UAF koji omogućava ponovnu upotrebu dela koji je oslobođen bez brisanja pokazivača. Zbog nekih metoda čitanja, moguće je curiti libc adresu pisanjem pokazivača na funkciju free u GOT ovde i zatim pozivajući funkciju za čitanje.
- 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.
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.