hacktricks/binary-exploitation/heap/heap-functions-security-checks.md

93 lines
6.1 KiB
Markdown
Raw Normal View History

# Sprawdzanie zabezpieczeń funkcji sterty
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## unlink
Ta funkcja usuwa kawałek z dwukierunkowej listy. Powszechne sprawdzenia zapewniają, że struktura listy pozostaje spójna podczas usuwania kawałków.
* **Sprawdzenia spójności**:
* Sprawdź, czy `P->fd->bk == P` i `P->bk->fd == P`.
* Komunikat o błędzie: `corrupted double-linked list`
## \_int\_malloc
Ta funkcja jest odpowiedzialna za przydzielanie pamięci ze sterty. Sprawdzenia tutaj zapewniają, że pamięć nie jest uszkodzona podczas alokacji.
* **Sprawdzenie rozmiaru fastbin**:
* Podczas usuwania kawałka z fastbin, upewnij się, że rozmiar kawałka mieści się w zakresie fastbin.
* Komunikat o błędzie: `malloc(): memory corruption (fast)`
* **Sprawdzenie spójności smallbin**:
* Podczas usuwania kawałka z smallbin, upewnij się, że poprzednie i następne odnośniki w dwukierunkowej liście są spójne.
* Komunikat o błędzie: `malloc(): smallbin double linked list corrupted`
* **Sprawdzenie zakresu pamięci unsorted bin**:
* Upewnij się, że rozmiar kawałków w unsorted bin mieści się w granicach minimalnego i maksymalnego limitu.
* Komunikat o błędzie: `malloc(): memory corruption | malloc(): invalid next size (unsorted)`
* **Sprawdzenie spójności unsorted bin (pierwszy scenariusz)**:
* Podczas wstawiania pozostałego kawałka do unsorted bin, sprawdź, czy `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Komunikat o błędzie: `malloc(): corrupted unsorted chunks`
* **Sprawdzenie spójności unsorted bin (drugi scenariusz)**:
* To samo co poprzednie sprawdzenie, ale wywoływane podczas wstawiania po podziale szybkiego lub małego kawałka.
* Komunikat o błędzie: `malloc(): corrupted unsorted chunks 2`
## \_int\_free
Ta funkcja zwalnia wcześniej zaalokowaną pamięć. Sprawdzenia tutaj pomagają zapewnić właściwe zwalnianie pamięci i zapobiegają uszkodzeniom pamięci.
* **Sprawdzenie granic wskaźnika**:
* Upewnij się, że zwalniany wskaźnik nie owija się wokół pamięci.
* Komunikat o błędzie: `free(): invalid pointer`
* **Sprawdzenie rozmiaru**:
* Upewnij się, że rozmiar zwalnianego kawałka wynosi co najmniej `MINSIZE` lub jest wielokrotnością `MALLOC_ALIGNMENT`.
* Komunikat o błędzie: `free(): invalid size`
* **Sprawdzenie rozmiaru fastbin**:
* Dla kawałków fastbin, upewnij się, że rozmiar następnego kawałka mieści się w granicach minimalnego i maksymalnego limitu.
* Komunikat o błędzie: `free(): invalid next size (fast)`
* **Sprawdzenie podwójnego zwolnienia fastbin**:
* Podczas wstawiania kawałka do fastbin, upewnij się, że kawałek na początku nie jest taki sam jak ten, który jest wstawiany.
* Komunikat o błędzie: `double free or corruption (fasttop)`
* **Sprawdzenie spójności fastbin**:
* Podczas wstawiania do fastbin, upewnij się, że rozmiary kawałka głównego i wstawianego kawałka są takie same.
* Komunikat o błędzie: `invalid fastbin entry (free)`
* **Sprawdzenie spójności top chunk**:
* Dla kawałków niebędących fastbin, upewnij się, że kawałek nie jest taki sam jak top chunk.
* Komunikat o błędzie: `double free or corruption (top)`
* **Sprawdzenie granic pamięci**:
* Upewnij się, że następny kawałek pamięci mieści się w granicach areny.
* Komunikat o błędzie: `double free or corruption (out)`
* **Sprawdzenie bitu prev_inuse**:
* Upewnij się, że bit poprzedniego używania w następnym kawałku jest oznaczony.
* Komunikat o błędzie: `double free or corruption (!prev)`
* **Sprawdzenie normalnego rozmiaru**:
* Upewnij się, że rozmiar następnego kawałka mieści się w prawidłowych zakresach.
* Komunikat o błędzie: `free(): invalid next size (normal)`
* **Sprawdzenie spójności unsorted bin**:
* Podczas wstawiania połączonego kawałka do unsorted bin, sprawdź, czy `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Komunikat o błędzie: `free(): corrupted unsorted chunks`
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>