5.8 KiB
WWW2Exec - __malloc_hook & __free_hook
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Malloc Hook
Conforme você pode ver no site oficial da GNU, a variável __malloc_hook
é um ponteiro que aponta para o endereço de uma função que será chamada sempre que malloc()
for chamado armazenado na seção de dados da biblioteca libc. Portanto, se este endereço for sobrescrito com um One Gadget, por exemplo, e malloc
for chamado, o One Gadget será chamado.
Para chamar malloc é possível esperar que o programa o chame ou chamando printf("%10000$c")
que aloca muitos bytes fazendo com que o libc
chame malloc para alocá-los no heap.
Mais informações sobre One Gadget em:
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}
{% hint style="warning" %} Observe que os hooks são desativados para GLIBC >= 2.34. Existem outras técnicas que podem ser usadas em versões modernas do GLIBC. Veja: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md. {% endhint %}
Free Hook
Isso foi abusado em um dos exemplos da página abusando de um ataque de fast bin após ter abusado de um ataque de unsorted bin:
{% content-ref url="../heap/unsorted-bin-attack.md" %} unsorted-bin-attack.md {% endcontent-ref %}
Agora um ataque de fast bin é realizado:
- Primeiramente é descoberto que é possível trabalhar com chunks rápidos de tamanho 200 na localização de
__free_hook
: -
gef➤ p &__free_hook
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
- Se conseguirmos obter um chunk rápido de tamanho 0x200 nessa localização, será possível sobrescrever um ponteiro de função que será executado
- Para isso, um novo chunk de tamanho
0xfc
é criado e a função merged é chamada com esse ponteiro duas vezes, desta forma obtemos um ponteiro para um chunk liberado de tamanho0xfc*2 = 0x1f8
no fast bin. - Em seguida, a função edit é chamada neste chunk para modificar o endereço
fd
deste fast bin para apontar para a função anterior de__free_hook
. - Em seguida, um chunk com tamanho
0x1f8
é criado para recuperar do fast bin o chunk inútil anterior, então outro chunk de tamanho0x1f8
é criado para obter um chunk fast bin no__free_hook
que é sobrescrito com o endereço da funçãosystem
. - E finalmente um chunk contendo a string
/bin/sh\x00
é liberado chamando a função delete, acionando a função__free_hook
que aponta para o sistema com/bin/sh\x00
como parâmetro.
Referências
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
- https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.