mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-20 01:55:46 +00:00
189 lines
9.2 KiB
Markdown
189 lines
9.2 KiB
Markdown
# Verificações de Segurança das Funções de Heap
|
|
|
|
{% hint style="success" %}
|
|
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
|
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## unlink
|
|
|
|
Para mais informações, consulte:
|
|
|
|
{% content-ref url="unlink.md" %}
|
|
[unlink.md](unlink.md)
|
|
{% endcontent-ref %}
|
|
|
|
Este é um resumo das verificações realizadas:
|
|
|
|
* Verifique se o tamanho indicado do chunk é o mesmo que o `prev_size` indicado no próximo chunk
|
|
* Mensagem de erro: `corrupted size vs. prev_size`
|
|
* Verifique também se `P->fd->bk == P` e `P->bk->fw == P`
|
|
* Mensagem de erro: `corrupted double-linked list`
|
|
* Se o chunk não for pequeno, verifique se `P->fd_nextsize->bk_nextsize == P` e `P->bk_nextsize->fd_nextsize == P`
|
|
* Mensagem de erro: `corrupted double-linked list (not small)`
|
|
|
|
## \_int\_malloc
|
|
|
|
Para mais informações, consulte:
|
|
|
|
{% content-ref url="malloc-and-sysmalloc.md" %}
|
|
[malloc-and-sysmalloc.md](malloc-and-sysmalloc.md)
|
|
{% endcontent-ref %}
|
|
|
|
* **Verificações durante a busca em fast bin:**
|
|
* Se o chunk estiver desalinhado:
|
|
* Mensagem de erro: `malloc(): unaligned fastbin chunk detected 2`
|
|
* Se o chunk para frente estiver desalinhado:
|
|
* Mensagem de erro: `malloc(): unaligned fastbin chunk detected`
|
|
* Se o chunk retornado tiver um tamanho que não está correto por causa de seu índice no fast bin:
|
|
* Mensagem de erro: `malloc(): memory corruption (fast)`
|
|
* Se algum chunk usado para preencher o tcache estiver desalinhado:
|
|
* Mensagem de erro: `malloc(): unaligned fastbin chunk detected 3`
|
|
* **Verificações durante a busca em small bin:**
|
|
* Se `victim->bk->fd != victim`:
|
|
* Mensagem de erro: `malloc(): smallbin double linked list corrupted`
|
|
* **Verificações durante a consolidação** realizadas para cada chunk de fast bin: 
|
|
* Se o chunk estiver desalinhado, acione:
|
|
* Mensagem de erro: `malloc_consolidate(): unaligned fastbin chunk detected`
|
|
* Se o chunk tiver um tamanho diferente do que deveria por causa do índice em que está:
|
|
* Mensagem de erro: `malloc_consolidate(): invalid chunk size`
|
|
* Se o chunk anterior não estiver em uso e o chunk anterior tiver um tamanho diferente do indicado por prev\_chunk:
|
|
* Mensagem de erro: `corrupted size vs. prev_size in fastbins`
|
|
* **Verificações durante a busca em unsorted bin**:
|
|
* Se o tamanho do chunk for estranho (muito pequeno ou muito grande): 
|
|
* Mensagem de erro: `malloc(): invalid size (unsorted)`
|
|
* Se o tamanho do próximo chunk for estranho (muito pequeno ou muito grande):
|
|
* Mensagem de erro: `malloc(): invalid next size (unsorted)`
|
|
* Se o tamanho anterior indicado pelo próximo chunk difere do tamanho do chunk:
|
|
* Mensagem de erro: `malloc(): mismatching next->prev_size (unsorted)`
|
|
* Se não `victim->bck->fd == victim` ou não `victim->fd == av (arena)`:
|
|
* Mensagem de erro: `malloc(): unsorted double linked list corrupted`
|
|
* Como estamos sempre verificando o último, seu fd deve sempre apontar para a estrutura da arena.
|
|
* Se o próximo chunk não indicar que o anterior está em uso:
|
|
* Mensagem de erro: `malloc(): invalid next->prev_inuse (unsorted)`
|
|
* Se `fwd->bk_nextsize->fd_nextsize != fwd`:
|
|
* Mensagem de erro: `malloc(): largebin double linked list corrupted (nextsize)`
|
|
* Se `fwd->bk->fd != fwd`:
|
|
* Mensagem de erro: `malloc(): largebin double linked list corrupted (bk)`
|
|
* **Verificações durante a busca em large bin (por índice):**
|
|
* `bck->fd-> bk != bck`:
|
|
* Mensagem de erro: `malloc(): corrupted unsorted chunks`
|
|
* **Verificações durante a busca em large bin (próximo maior):**
|
|
* `bck->fd-> bk != bck`:
|
|
* Mensagem de erro: `malloc(): corrupted unsorted chunks2`
|
|
* **Verificações durante o uso do Top chunk:**
|
|
* `chunksize(av->top) > av->system_mem`:
|
|
* Mensagem de erro: `malloc(): corrupted top size`
|
|
|
|
## `tcache_get_n`
|
|
|
|
* **Verificações em `tcache_get_n`:**
|
|
* Se o chunk estiver desalinhado:
|
|
* Mensagem de erro: `malloc(): unaligned tcache chunk detected`
|
|
|
|
## `tcache_thread_shutdown`
|
|
|
|
* **Verificações em `tcache_thread_shutdown`:**
|
|
* Se o chunk estiver desalinhado:
|
|
* Mensagem de erro: `tcache_thread_shutdown(): unaligned tcache chunk detected`
|
|
|
|
## `__libc_realloc`
|
|
|
|
* **Verificações em `__libc_realloc`:**
|
|
* Se o ponteiro antigo estiver desalinhado ou o tamanho estiver incorreto:
|
|
* Mensagem de erro: `realloc(): invalid pointer`
|
|
|
|
## `_int_free`
|
|
|
|
Para mais informações, consulte:
|
|
|
|
{% content-ref url="free.md" %}
|
|
[free.md](free.md)
|
|
{% endcontent-ref %}
|
|
|
|
* **Verificações durante o início de `_int_free`:**
|
|
* O ponteiro está alinhado:
|
|
* Mensagem de erro: `free(): invalid pointer`
|
|
* Tamanho maior que `MINSIZE` e tamanho também alinhado:
|
|
* Mensagem de erro: `free(): invalid size`
|
|
* **Verificações em `_int_free` tcache:**
|
|
* Se houver mais entradas do que `mp_.tcache_count`:
|
|
* Mensagem de erro: `free(): too many chunks detected in tcache`
|
|
* Se a entrada não estiver alinhada:
|
|
* Mensagem de erro: `free(): unaligned chunk detected in tcache 2`
|
|
* Se o chunk liberado já foi liberado e está presente como chunk no tcache:
|
|
* Mensagem de erro: `free(): double free detected in tcache 2`
|
|
* **Verificações em `_int_free` fast bin:**
|
|
* Se o tamanho do chunk for inválido (muito grande ou pequeno), acione:
|
|
* Mensagem de erro: `free(): invalid next size (fast)`
|
|
* Se o chunk adicionado já era o topo do fast bin:
|
|
* Mensagem de erro: `double free or corruption (fasttop)`
|
|
* Se o tamanho do chunk no topo tiver um tamanho diferente do chunk que estamos adicionando:
|
|
* Mensagem de erro: `invalid fastbin entry (free)`
|
|
|
|
## **`_int_free_merge_chunk`**
|
|
|
|
* **Verificações em `_int_free_merge_chunk`:**
|
|
* Se o chunk for o top chunk:
|
|
* Mensagem de erro: `double free or corruption (top)`
|
|
* Se o próximo chunk estiver fora dos limites da arena:
|
|
* Mensagem de erro: `double free or corruption (out)`
|
|
* Se o chunk não estiver marcado como usado (no prev\_inuse do chunk seguinte):
|
|
* Mensagem de erro: `double free or corruption (!prev)`
|
|
* Se o próximo chunk tiver um tamanho muito pequeno ou muito grande:
|
|
* Mensagem de erro: `free(): invalid next size (normal)`
|
|
* Se o chunk anterior não estiver em uso, ele tentará consolidar. Mas, se o `prev_size` diferir do tamanho indicado no chunk anterior:
|
|
* Mensagem de erro: `corrupted size vs. prev_size while consolidating`
|
|
|
|
## **`_int_free_create_chunk`**
|
|
|
|
* **Verificações em `_int_free_create_chunk`:**
|
|
* Adicionando um chunk no unsorted bin, verifique se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`:
|
|
* Mensagem de erro: `free(): corrupted unsorted chunks`
|
|
|
|
## `do_check_malloc_state`
|
|
|
|
* **Verificações em `do_check_malloc_state`:**
|
|
* Se o fast bin chunk estiver desalinhado:
|
|
* Mensagem de erro: `do_check_malloc_state(): unaligned fastbin chunk detected`
|
|
|
|
## `malloc_consolidate`
|
|
|
|
* **Verificações em `malloc_consolidate`:**
|
|
* Se o fast bin chunk estiver desalinhado:
|
|
* Mensagem de erro: `malloc_consolidate(): unaligned fastbin chunk detected`
|
|
* Se o tamanho do fast bin chunk estiver incorreto:
|
|
* Mensagem de erro: `malloc_consolidate(): invalid chunk size`
|
|
|
|
## `_int_realloc`
|
|
|
|
* **Verificações em `_int_realloc`:**
|
|
* Tamanho é muito grande ou muito pequeno:
|
|
* Mensagem de erro: `realloc(): invalid old size`
|
|
* Tamanho do próximo chunk é muito grande ou muito pequeno:
|
|
* Mensagem de erro: `realloc(): invalid next size`
|
|
|
|
{% hint style="success" %}
|
|
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
|
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
{% endhint %}
|