Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
how2heap — Um repositório para aprender várias técnicas de exploração de heap. | Kitploit
Ferramentas/GitHubGitHub/shellphish/how2heap
ExploraçãoCTFAprendizado e EducaçãoRecursos CuradosExploração de BináriosLabs e Prática
GitHubshellphish/how2heap

how2heap

Um repositório para aprender várias técnicas de exploração de heap.

Ver Repositório
8.8k1.3khá 3 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Exploração Educacional de Heap

Este repositório serve para aprender várias técnicas de exploração de heap. Usamos as versões do Libc do Ubuntu como padrão-ouro. Cada técnica é verificada para funcionar nas versões correspondentes do Ubuntu. Você pode executar apt source libc6 para baixar o código-fonte do Libc que está usando em um sistema operacional baseado em Debian. Você também pode clicar em ▶️ para depurar a técnica no seu navegador usando gdb.

Tivemos a ideia durante uma reunião de hackers e implementamos as seguintes técnicas:

Arquivo▶️TécnicaGlibc-VersionPatchDesafios de CTF Aplicáveis
first_fit.cDemonstrando o comportamento first-fit do malloc do glibc.
calc_tcache_idx.cDemonstrando o cálculo do índice tcache do glibc.
fastbin_dup.c▶️Enganando o malloc para retornar um ponteiro de heap já alocado, abusando da freelist fastbin.< 2.43patch
fastbin_dup_into_stack.c▶️Enganando o malloc para retornar um ponteiro quase arbitrário, abusando da freelist fastbin.< 2.43patch9447-search-engine, 0ctf 2017-babyheap
fastbin_dup_consolidate.c▶️Enganando o malloc para retornar um ponteiro de heap já alocado ao colocar um ponteiro tanto na freelist fastbin quanto no top chunk.< 2.43

O GnuLibc está em constante desenvolvimento e várias das técnicas acima levaram a verificações de consistência introduzidas na lógica do malloc/free. Consequentemente, essas verificações quebram regularmente algumas das técnicas e exigem ajustes para contorná-las (se possível). Abordamos esse problema mantendo várias versões da mesma técnica para cada versão do Glibc que exigiu um ajuste. A estrutura é glibc_<version>/technique.c.

Tem um bom exemplo? Adicione aqui! Tente colocar toda a técnica em um único .c -- é muito mais fácil aprender assim.

Começando

Configuração Rápida

  • certifique-se de ter os seguintes pacotes/ferramentas instalados: patchelf zstd wget (claro, também build-essential ou similar para compiladores, make, ...)
  • além disso, /usr/bin/python deve ser/apontar para o seu binário python (ex.: /usr/bin/python3)```shell git clone https://github.com/shellphish/how2heap cd how2heap make clean base ./malloc_playground
root@kitploit:~
Observe que isso vinculará os binários com a libc do seu sistema. Se você quiser experimentar outras versões da libc, consulte `Complete Setup`.

## Configuração Completa

Você encontrará problemas de versionamento de símbolos (veja [isto](https://github.com/shellphish/how2heap/issues/169)) se tentar usar `LD_PRELOAD` em libcs para um binário compilado na sua máquina host.
Temos duas maneiras de contornar isso.

### Método 1: vincular com uma libc mais antiga
Este método diz ao linker para vincular o binário alvo com a libc alvo.```shell
git clone https://github.com/shellphish/how2heap
cd how2heap
H2H_USE_SYSTEM_LIBC=N make v2.23

Isso vinculará todos os binários às libcs correspondentes. O melhor é que ele vem com símbolos de depuração. Agora você pode brincar com qualquer versão de libc na sua máquina host. Neste exemplo, ele compilará todos os binários glibc-2.23 e os vinculará à libc-2.23. Você pode alterar o número para brincar com outras versões de libc.

Método 2: usar docker

Esta abordagem usa Docker para compilar binários dentro de um contêiner ubuntu antigo, de modo que seja executável com a versão de libc alvo.```shell git clone https://github.com/shellphish/how2heap cd how2heap

the next command will prepare the target binary so it runs with

the expected libc version

make base ./glibc_run.sh 2.30 ./malloc_playground -d -p

now you can play with the binary with glibc-2.30

and even debug it with the correct symbols

readelf -d -W malloc_playground | grep RUNPATH # or use checksec readelf -l -W malloc_playground | grep interpreter gdb -q -ex "start" ./malloc_playground

root@kitploit:~
# Ferramentas de Exploração de Heap

Existem algumas ferramentas de exploração de heap por aí.

## Malloc Playground

O arquivo `malloc_playground.c` fornecido é o código-fonte de um programa que solicita ao usuário comandos para alocar e liberar memória interativamente.

## Pwngdb

Examine o heap do glibc no gdb: https://github.com/scwuaptx/Pwngdb

## pwndbg

Um plugin do gdb focado em exploração que oferece a capacidade de visualizar/manipular o heap do glibc: https://github.com/pwndbg/pwndbg

## gef

Outro excelente plugin do gdb que oferece a capacidade de examinar o heap do glibc: https://github.com/hugsy/gef

## heap-viewer

Examine o heap do glibc no IDA Pro: https://github.com/danigargu/heap-viewer

## heaptrace

Ajuda você a visualizar operações de heap substituindo endereços por símbolos: https://github.com/Arinerron/heaptrace

# Outros recursos

Alguns bons recursos sobre exploração de heap, aproximadamente em ordem inversa de publicação, são:

## Tutoriais úteis de exploração de heap
- Visão geral das técnicas de exploração de heap do GLIBC (https://0x434b.dev/overview-of-glibc-heap-exploitation-techniques/) <!-- 2022 -->
- Tutorial aprofundado do glibc (https://heap-exploitation.dhavalkapil.com/) - livro e amostras de exploits <!-- 2022 -->
- Técnicas de exploração de heap que funcionam no glibc-2.31 (https://github.com/StarCross-Tech/heap_exploit_2.31) <!-- 2020 -->
- Introdução descomplicada ao heap do userland do Linux (https://sensepost.com/blog/2017/painless-intro-to-the-linux-userland-heap/) <!-- 2017 -->
- ptmalloc fanzine, um conjunto de recursos e exemplos relacionados a ataques de metadados no ptmalloc (http://tukan.farm/2016/07/26/ptmalloc-fanzine/) <!-- 2016 -->
- Glibc Adventures: The Forgotten Chunk (https://github.com/bash-c/slides/blob/master/pwn_heap/Glibc%20Adventures:%20The%20forgotten%20chunks.pdf) - exploração avançada de heap <!-- 2015 -->

## Exploração histórica de heap (A História)
- Pseudomonarchia jemallocum (http://www.phrack.org/issues/68/10.html) <!-- 2012 -->
- The House Of Lore: Reloaded (http://phrack.org/issues/67/8.html) <!-- 2010 -->
- Malloc Des-Maleficarum (http://phrack.org/issues/66/10.html) - algumas técnicas de exploração de malloc <!-- 2009 -->
- Mais uma técnica de exploração de free() (http://phrack.org/issues/66/6.html) <!-- 2009 -->
- O uso de set_head para derrotar o wilderness (http://phrack.org/issues/64/9.html) <!-- 2007 -->
- Entendendo o heap ao quebrá-lo (https://www.blackhat.com/presentations/bh-usa-07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf) - explica a implementação do heap e alguns exploits <!-- 2007 -->
- Técnicas de exploração de heap do OS X (http://phrack.org/issues/63/5.html) <!-- 2005 -->
- The Malloc Maleficarum (http://seclists.org/bugtraq/2005/Oct/118) <!-- 2005 -->
- Exploiting The Wilderness (http://seclists.org/vuln-dev/2004/Feb/25) <!-- 2004 -->
- Exploits avançados do malloc de Doug lea (http://phrack.org/issues/61/6.html) <!-- 2003 -->

# Hardening
Existem algumas medidas de "hardening" embutidas no glibc, como `export MALLOC_CHECK_=1` (ativa algumas verificações), `export MALLOC_PERTURB_=1` (os dados são sobrescritos), `export MALLOC_MMAP_THRESHOLD_=1` (sempre usar mmap()), ...

Mais informações: [mcheck()](http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html), [mallopt()](http://www.gnu.org/software/libc/manual/html_node/Malloc-Tunable-Parameters.html).

Há também algum suporte a rastreamento como [mtrace()](http://manpages.ubuntu.com/mtrace), [malloc_stats()](http://manpages.ubuntu.com/malloc_stats), [malloc_info()](http://manpages.ubuntu.com/malloc_info), [memusage](http://manpages.ubuntu.com/memusage), e em outras funções dessa família.
Baixar ferramenta
patch
Hitcon 2016 SleepyHolder
unsafe_unlink.c▶️Explorando o free em um chunk corrompido para obter escrita arbitrária.latestHITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots
house_of_spirit.c▶️Libera um chunk fastbin falso para fazer o malloc retornar um ponteiro quase arbitrário.latesthack.lu CTF 2014-OREO
poison_null_byte.c▶️Explorando um overflow de um único byte nulo.latestPlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote
house_of_lore.c▶️Enganando o malloc para retornar um ponteiro quase arbitrário, abusando da freelist smallbin.latest
overlapping_chunks.c▶️Explorar a sobrescrita do tamanho de um chunk liberado no unsorted bin para fazer uma nova alocação se sobrepor a um chunk existente< 2.29patchhack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap
overlapping_chunks_2.c▶️Explorar a sobrescrita do tamanho de um chunk em uso para fazer uma nova alocação se sobrepor a um chunk existente< 2.29patch
mmap_overlapping_chunks.cExplorar um chunk mmap em uso para fazer uma nova alocação se sobrepor a um chunk mmap atuallatest
house_of_force.c▶️Explorando o cabeçalho do Top Chunk (Wilderness) para fazer o malloc retornar um ponteiro quase arbitrário< 2.29patchBoston Key Party 2016-cookbook, BCTF 2016-bcloud
unsorted_bin_into_stack.c▶️Explorando a sobrescrita de um chunk liberado na freelist do unsorted bin para retornar um ponteiro quase arbitrário.< 2.29patch
unsorted_bin_attack.c▶️Explorando a sobrescrita de um chunk liberado na freelist do unsorted bin para escrever um valor grande em um endereço arbitrário< 2.29patch0ctf 2016-zerostorage
large_bin_attack.c▶️Explorando a sobrescrita de um chunk liberado na freelist do large bin para escrever um valor grande em um endereço arbitrário< 2.42patch0ctf 2018-heapstorm2
house_of_einherjar.c▶️Explorando um overflow de um único byte nulo para enganar o malloc e fazê-lo retornar um ponteiro controladolatestSeccon 2016-tinypad
house_of_water.cExplorar um UAF ou double free para obter controle sem vazamento dos metadados do t-cache e uma forma sem vazamento de vincular a libc no t-cachelatest37c3 Potluck - Tamagoyaki
sysmalloc_int_free.cDemonstrando a liberação do Top Chunk (Wilderness) de tamanho quase arbitrário usando malloc (sysmalloc _int_free() )latest
house_of_orange.c▶️Explorando o Top Chunk (Wilderness) para obter execução arbitrária de código< 2.26patchHitcon 2016 houseoforange
house_of_tangerine.cExplorando o Top Chunk (Wilderness) para enganar o malloc e fazê-lo retornar um ponteiro completamente arbitrário, abusando da freelist do tcache>= 2.26PicoCTF 2024- high frequency troubles
house_of_roman.c▶️Técnica sem vazamento para obter execução remota de código via fastbins falsos, o ataque unsorted_bin e sobrescritas relativas.< 2.29patch
tcache_poisoning.c▶️Enganando o malloc para retornar um ponteiro completamente arbitrário, abusando da freelist do tcache. (requer vazamento de heap a partir de 2.32)> 2.25patch
tcache_house_of_spirit.c▶️Libera um chunk falso para fazer o malloc retornar um ponteiro quase arbitrário.> 2.25
house_of_botcake.c▶️Contorne a restrição de double free no tcache. Torne o tcache_dup grande novamente.> 2.25
tcache_stashing_unlink_attack.c▶️Explorando a sobrescrita de um chunk liberado na freelist do small bin para enganar o malloc e fazê-lo retornar um ponteiro arbitrário e escrever um valor grande em um endereço arbitrário com a ajuda do calloc.> 2.25Hitcon 2019 one punch man
fastbin_reverse_into_tcache.c▶️Explorando a sobrescrita de um chunk liberado no fastbin para escrever um valor grande em um endereço arbitrário.2.26 - 2.42patch
house_of_mind_fastbin.c▶️Explorando uma sobrescrita de um único byte com o tratamento de arena para escrever um valor grande (ponteiro de heap) em um endereço arbitrário< 2.43patch
house_of_storm.c▶️Explorando um use after free em um chunk do large bin e um do unsorted bin para retornar um chunk arbitrário do malloc< 2.29
house_of_gods.c▶️Uma técnica para sequestrar a arena de uma thread dentro de 8 alocações< 2.27
decrypt_safe_linking.c▶️Descriptografar o valor envenenado na lista encadeada para recuperar o ponteiro real>= 2.32
safe_link_double_protect.cContorno sem vazamento para PROTECT_PTR ao proteger um ponteiro duas vezes, permitindo a vinculação de ponteiros arbitrários no t-cache>= 2.3237c3 Potluck - Tamagoyaki
tcache_dup.c(obsoleto)Enganando o malloc para retornar um ponteiro de heap já alocado, abusando da freelist do tcache.2.26 - 2.28patch
tcache_metadata_poisoning.cEnganar o tcache para fornecer ponteiros arbitrários manipulando a struct de metadados do tcache>= 2.26
house_of_io.cEnganando o malloc para retornar um ponteiro para memória arbitrária manipulando a struct de gerenciamento do tcache por meio de UAF em um chunk do tcache liberado.2.31 - 2.33
tcache_relative_write.cEscrita de valor decimal arbitrário e ponteiro de chunk no heap por meio de escrita fora dos limites nos metadados do tcache2.30-2.41patch
tcache_metadata_hijackingAlocação arbitrária por overflow nos metadados do tcache>= 2.42