mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-21 10:33:36 +00:00
60 lines
6.9 KiB
Markdown
60 lines
6.9 KiB
Markdown
# Ataque ao Tcache Binário
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
## Informações Básicas
|
|
|
|
Para mais informações sobre o que é um tcache bin, verifique esta página:
|
|
|
|
{% content-ref url="bins-and-memory-allocations.md" %}
|
|
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
|
{% endcontent-ref %}
|
|
|
|
Em primeiro lugar, observe que o Tcache foi introduzido na versão 2.26 do glibc.
|
|
|
|
O ataque **Tcache** proposto na [**página guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) é muito semelhante ao ataque fast bin, onde o objetivo é sobrescrever o ponteiro para o próximo chunk no bin dentro de um chunk liberado para um endereço arbitrário, para posteriormente ser possível **alocar esse endereço específico e potencialmente sobrescrever ponteiros**.
|
|
|
|
No entanto, atualmente, se você executar o código mencionado, receberá o erro: **`malloc(): unaligned tcache chunk detected`**. Portanto, é necessário escrever um endereço alinhado no novo ponteiro (ou executar o binário várias vezes para que o endereço escrito esteja realmente alinhado).
|
|
|
|
### Ataque aos índices do Tcache
|
|
|
|
Normalmente é possível encontrar no início do heap um chunk contendo a **quantidade de chunks por índice** dentro do tcache e o endereço do **chunk de cabeça de cada índice do tcache**. Se, por algum motivo, for possível modificar essas informações, seria possível **fazer o chunk de cabeça de algum índice apontar para um endereço desejado** (como o malloc hook) para então alocar um chunk do tamanho do índice e sobrescrever o conteúdo do malloc hook neste caso.
|
|
|
|
## Exemplos
|
|
|
|
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html)
|
|
* **Vazamento de informações do Libc**: É possível preencher os tcaches, adicionar um chunk na lista não ordenada, esvaziar o tcache e **realocar o chunk da lista não ordenada** sobrescrevendo apenas os primeiros 8B, deixando o **segundo endereço para o Libc do chunk intacto para que possamos lê-lo**.
|
|
* **Ataque ao Tcache**: O binário é vulnerável a um overflow de heap de 1B. Isso será abusado para alterar o **cabeçalho de tamanho** de um chunk alocado, tornando-o maior. Em seguida, este chunk será **liberado**, adicionando-o ao tcache de chunks do tamanho falso. Em seguida, alocaremos um chunk com o tamanho falsificado, e o chunk anterior será **retornado sabendo que este chunk era realmente menor** e isso nos dá a oportunidade de **sobrescrever o próximo chunk na memória**.\
|
|
Vamos abusar disso para **sobrescrever o ponteiro FD do próximo chunk** para apontar para **`malloc_hook`**, então é possível alocar 2 ponteiros: primeiro o ponteiro legítimo que acabamos de modificar e, em seguida, a segunda alocação retornará um chunk em **`malloc_hook`** que pode ser abusado para escrever um **one gadget**.
|
|
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
|
|
* **Vazamento de informações do Libc**: Há um uso após free e um double free. Neste writeup, o autor vazou um endereço do Libc lendo o endereço de um chunk colocado em um bin pequeno (como vazando-o do bin não ordenado, mas do pequeno).
|
|
* **Ataque ao Tcache**: Um Tcache é realizado via um **double free**. O mesmo chunk é liberado duas vezes, então dentro do Tcache o chunk apontará para si mesmo. Em seguida, ele é alocado, seu ponteiro FD é modificado para apontar para o **free hook** e então é alocado novamente para que o próximo chunk na lista vá para o free hook. Em seguida, isso também é alocado e é possível escrever o endereço do `system` aqui, então quando um malloc contendo `"/bin/sh"` é liberado, obtemos um shell.
|
|
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
|
|
* **Ataque aos índices do Tcache**: É possível alocar e liberar um chunk de um tamanho que, quando armazenado nas informações do tcache, gerará uma **posição com o valor 0x100** (porque o byte que indica quantos chunks nesse índice estão armazenados). Em seguida, abusando desse valor, é possível `liberar` este endereço, pois parece ser um chunk de tamanho 0x100. Isso adicionará esse endereço ao índice de chunks de tamanho 0x100 no tcache.\
|
|
Em seguida, alocando um chunk de tamanho 0x100, é possível sobrescrever o endereço do chunk inicial de outros índices do tcache. Por exemplo, colocar o endereço do malloc hook em um deles e alocar um chunk do tamanho desse índice concederá um chunk no calloc hook, o que permite escrever um one gadget para obter um shell.
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|