<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJEM**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* Ova tehnika je zakrpljena ([**ovde**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) i proizvodi ovu grešku: `malloc(): corrupted top size`
* Možete probati [**kod odavde**](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) da ga testirate ako želite.
Ako napadač želi da alocira komad na adresi P da bi prepisao vrednost ovde. Počinje tako što prepisuje veličinu vrha komada sa `-1` (možda sa prekoračenjem). Ovo osigurava da malloc neće koristiti mmap za bilo koju alokaciju jer će Vrh komada uvek imati dovoljno prostora.
Zatim, izračunajte udaljenost između adrese vrha komada i ciljnog prostora za alokaciju. Ovo je zato što će se malloc sa tom veličinom izvršiti kako bi se premestio vrh komada na tu poziciju. Na ovaj način razlika/veličina se može lako izračunati:
```c
// 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):
Dakle, alociranjem veličine `cilj - stari_vrh - 4*sizeof(long)` (4 long-a su zbog metapodataka vrhunskog bloka i novog bloka kada se alocira) premestiće vrhunski blok na adresu koju želimo da prepisujemo.\
Zatim, uradite još jedan malloc da biste dobili blok koji sadrži na početku podatke za pisanje ciljne adrese.
* Cilj ovog scenarija je ret2win gde treba izmeniti adresu funkcije koja će biti pozvana adresom funkcije ret2win
* Binarni fajl ima prelivanje koje se može zloupotrebiti za izmenu veličine vrhunskog bloka, koji je izmenjen na -1 ili p64(0xffffffffffffffff)
* Zatim se izračunava adresa mesta gde postoji pokazivač za prepisivanje, i razlika od trenutne pozicije vrhunskog bloka do tamo se alocira sa `malloc`
* Na kraju se alocira novi blok koji će sadržati ovu željenu metu unutar koje će biti prepisana funkcija ret2win
* U `Unesite svoje ime:` postoji početna ranjivost koja omogućava otkrivanje adrese sa hipa
* Zatim u funkcionalnosti `Org:` i `Host:` moguće je popuniti 64B pokazivača kada se traži **org ime**, koji na steku sledi adresu v2, koja se zatim prati navedenim **host imenom**. Kako će strcpy kopirati sadržaj s u blok veličine 64B, moguće je **prepisanje veličine vrhunskog bloka** podacima unutar **host imena**.
* Sada kada je moguće proizvoljno pisanje, GOT `atoi` je prepisan adresom printf-a. moguće je otkriti adresu `IO_2_1_stderr`_sa_`%24$p`. I sa ovim curenjem libc-a bilo je moguće ponovo prepisati GOT `atoi` sa adresom `system` i pozvati je prosleđujući kao parametar `/bin/sh`
* Alternativna metoda [predložena u ovom drugom writeup-u](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), je prepisati `free` sa `puts`, a zatim dodati adresu `atoi@got`, u pokazivač koji će kasnije biti oslobođen tako da se curenje i ovim curenjem ponovo prepisuje `atoi@got` sa `system` i poziva se sa `/bin/sh`.
* Postoji UAF koji omogućava ponovnu upotrebu bloka koji je oslobođen bez brisanja pokazivača. Zbog nekih metoda čitanja, moguće je otkriti adresu libc-a pisanjem pokazivača na funkciju free u GOT-u ovde, a zatim pozivanjem funkcije za čitanje.
* Zatim je korišćen House of force (zloupotrebljavajući UAF) da se prepisuje veličina preostalog prostora sa -1, alocira blok dovoljno velik da se dođe do free hook-a, a zatim alocira još jedan blok koji će sadržati free hook. Zatim, u hook-u napišite adresu `system`, napišite u bloku `"/bin/sh"` i na kraju oslobodite blok sa tim sadržajem stringa.