mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-03 18:10:07 +00:00
74 lines
6.5 KiB
Markdown
74 lines
6.5 KiB
Markdown
# Kuća sile
|
|
|
|
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Drugi načini podrške HackTricks-u:
|
|
|
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* Otkrijte [**Porodičnu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
* **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.
|
|
|
|
</details>
|
|
|
|
## Osnovne informacije
|
|
|
|
### Kod
|
|
|
|
* 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.
|
|
|
|
### Cilj
|
|
|
|
* Cilj ovog napada je da se može alocirati komad na određenoj adresi.
|
|
|
|
### Zahtevi
|
|
|
|
* Prekoračenje koje omogućava prepisivanje veličine zaglavlja vrha komada (npr. -1).
|
|
* Biti u mogućnosti da se kontroliše veličina alociranja hipa
|
|
|
|
### Napad
|
|
|
|
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. Ovo je kako se razlika/veličina 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):
|
|
* 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)
|
|
*/
|
|
```
|
|
Dakle, alociranjem veličine `target - old_top - 4*sizeof(long)` (4 long-a zbog metapodataka vrhunskog bloka i novog bloka kada je alociran) premestiće vrhunski blok na adresu koju želimo da prepisujemo.\
|
|
Zatim, uradite još jedan malloc da biste dobili blok na ciljanoj adresi.
|
|
|
|
### Reference & Drugi Primeri
|
|
|
|
* [https://github.com/shellphish/how2heap/tree/master](https://github.com/shellphish/how2heap/tree/master?tab=readme-ov-file)
|
|
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/)
|
|
* [https://heap-exploitation.dhavalkapil.com/attacks/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://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://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](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11)
|
|
* Cilj ovog scenarija je ret2win gde treba izmeniti adresu funkcije koja će biti pozvana adresom funkcije ret2win
|
|
* Binarni fajl ima prekoračenje koje se može zloupotrebiti za izmenu veličine vrhunskog bloka, koji je izmenjen na -1 ili p64(0xffffffffffffffff)
|
|
* Zatim se izračunava adresa gde postoji pokazivač koji treba prepisati, 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
|
|
* [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](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 početna ranjivost koja omogućava otkrivanje adrese sa hipa
|
|
* Zatim u funkcionalnostima `Org:` i `Host:` moguće je popuniti 64B pokazivača kada se traži **org name**, koji na steku sledi adresa v2, koja se zatim prati navedenim **host name**. Kako će strcpy kopirati sadržaj s u blok veličine 64B, moguće je **prepisti veličinu vrhunskog bloka** sa podacima unetim u **host name**.
|
|
* Sada kada je moguće proizvoljno pisanje, GOT `atoi` je prepisan adresom printf-a. tada je moguće 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`.
|
|
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
|
|
* Postoji UAF koji omogućava ponovnu upotrebu bloka koji je oslobođen bez brisanja pokazivača. Zbog nekih metoda čitanja, moguće je otkriti libc adresu pisanjem pokazivača na funkciju free u GOT-u ovde, a zatim pozivanjem funkcije za čitanje.
|
|
* Zatim je korišćen House of force (zloupotreba UAF-a) da se prepise 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 se upisuje adresa `system`, u blok se upisuje `"/bin/sh"` i na kraju se oslobađa blok sa tim sadržajem stringa.
|