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
heaplens — # Projeto do Laboratório II de Cibersegurança CMPT733: Plugin GDB para exploração de heap inspirado no CVE-2021-3156 | Kitploit
Ferramentas/GitHubGitHub/ypl6/heaplens
Análise de VulnerabilidadesExploraçãoDepuradoresAnálise de BináriosAprendizado e Educação
GitHubypl6/heaplens

heaplens

# Projeto do Laboratório II de Cibersegurança CMPT733: Plugin GDB para exploração de heap inspirado no CVE-2021-3156

Ver Repositório
2há 4 anosAinda não revisado

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

heaplens

🔎 Heaplens

Projeto do Laboratório II de Cibersegurança CMPT733

📂 Estrutura do Repositório

root@kitploit:~
.
├── README.md
├── heaplens.png
├── heaplens.py
├── logs
│   ├── sudoedit-#.txt
│   └── ...
└── tests
    ├── Makefile
    ├── env-in-heap
    └── ...
  • README.md: é aqui!
  • heaplens.py: o script principal
  • logs/: contém alguns logs de exemplo que capturamos durante o desenvolvimento e os testes
  • tests/: contém alguns binários (e seus códigos-fonte) para testes

📦 Ambiente

Aqui está uma lista de itens (e versões) que usamos para testar o exploit. Eles já devem estar instalados na VM. Caso algo esteja faltando, siga as instruções abaixo.

Dependências

  • Ubuntu 20.04.4 (64 bits)
  • python 3.8.10
  • glibc 2.34
  • gdb 9.2
  • gef 2022.01
    • Se o gef não estiver habilitado como root, dê uma olhada em /root/.gdbinit
    • Se o arquivo estiver vazio, basta copiar o que você tem em ~/.gdbinit

Dependências do sudo (para executar o heaplens no sudo)

É necessário um binário do sudo com depuração habilitada. Um binário pré-compilado com símbolos de depuração foi instalado na VM.

root@kitploit:~
cyberlab@ubuntu:~$ which sudo
/usr/local/bin/sudo

cyberlab@ubuntu:~$ sudo --version
Sudo version 1.8.31
Sudoers policy plugin version 1.8.31
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.31

cyberlab@ubuntu:~$ sudoedit -s /
sudoedit: /: not a regular file # sudo é vulnerável

📝 Carregando o Plugin

Isso já foi feito na VM. Caso a configuração esteja incorreta, você pode seguir as instruções aqui para carregar o Heaplens.

Opção 1

Inicie o gef e edite a configuração:

root@kitploit:~
gef➤ gef config gef.extra_plugins_dir <caminho para>/heaplens
gef➤ gef save
gef➤ q

Isso deve atualizar o arquivo ~/.gef.rc ou /root/.gef.rc (como root).

Opção 2

Adicione esta linha em ~/.gdbinit ou /root/.gdbinit:

root@kitploit:~
source <caminho para>/heaplens/heaplens.py

💡 Uso

É recomendado executar o gdb como root ao depurar programas privilegiados:

root@kitploit:~
$ sudo su
# gdb

Mensagens de ajuda são fornecidas para todos os comandos. Você pode acessá-las via <comando> -h no GDB.

heaplens

Coleta informações do heap a partir das funções de alocação e desalocação de memória, incluindo malloc, realloc, calloc e free.

A ideia de alto nível é que, ao interceptar essas funções, podemos automatizar o processo de verificação e atualização da pilha de chamadas, bem como o endereço de retorno da alocação de memória. Ao inspecionar os rastreamentos, podemos ver qual chunk é alocado por foo() em alguns arquivos C, e podemos investigar mais a fundo, por exemplo, verificando os chunks adjacentes, para encontrar alvos adequados para exploração do heap.

Ele também suporta a adição de breakpoints personalizados no meio, caso o usuário esteja interessado em um layout intermediário do heap.

O comando em si não é muito detalhado, e você precisará usar o heaplens-dump para imprimir os resultados.

root@kitploit:~
heaplens -h
usage: [-h] [-b BREAKPOINT] [-v]

Collect heap info from memory (de)allocation functions.

optional arguments:
  -h, --help            show this help message and exit
  -b BREAKPOINT, --breakpoint BREAKPOINT
                        stop the executions here (execute br {breakpoint} in gdb) (default: None)
  -v, --verbose         increase output verbosity (default: False)

Exemplo de saída:

root@kitploit:~
gef➤  file sudoedit
gef➤  heaplens -b set_cmnd -- -s '\\' $(python3 -c 'print("A"*65535)')
----------------------------
Initializing Heaplens
----------------------------
Temporary breakpoint 1 at 0x5840: file ../../src/src/sudo.c, line 136.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
usage: sudoedit [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
[Inferior 1 (process 82934) exited with code 01]
Setting breakpoint at set_cmnd...
Function "set_cmnd" not defined.
Breakpoint 2 (set_cmnd) pending.
Hooking free function...
Breakpoint 3 at 0x7f25cc163700: free. (2 locations)
Hooking malloc function...
Breakpoint 4 at 0x7f25cc163110: malloc. (2 locations)
Hooking realloc function...
Breakpoint 5 at 0x7f25cc163eb0: realloc. (2 locations)
Hooking calloc function...
Breakpoint 6 at 0x7f25cc164b40: calloc. (2 locations)
Running -s '\' $(python3 -c 'print("A"*65535)')...
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 2, set_cmnd () at ../../../src/plugins/sudoers/sudoers.c:804
804	../../../src/plugins/sudoers/sudoers.c: No such file or directory.
Removing breakpoints from mem_bkps...

heaplens-dump

Despeja os logs do Heaplens. Fornecemos opções para gravar os resultados em um arquivo, gerar a saída no formato JSON e ordenar os chunks por seus endereços. No despejo, cada chunk terá seu endereço, tamanho, backtrace e a função de alocação de memória relacionada registrados de forma mais legível.

root@kitploit:~
heaplens-dump -h
usage: [-h] [-o OUTPUT] [--json] [-s]

Dump Heaplens logs. Writes to stdout by default.

optional arguments:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        write to file at path {output} (default: None)
  --json                dump in json (default: False)
  -s, --sort            sort the chunks by their addresses (default: False)

Exemplo de saída:

root@kitploit:~
gef➤  heaplens-dump
----------------------------
Dumping...
----------------------------

...

[malloc] Chunk 3 @ 0x55f3908ed2a0 | size 0xc
Trace:
#0  __GI___strdup (s=0x7fff6fb3b8dc "en_US.UTF-8") at strdup.c:44
#1  0x00007f285df363c5 in _nl_load_locale_from_archive (category=category@entry=0xc, namep=namep@entry=0x7fff6fb29f50) at loadarchive.c:464
#2  0x00007f285df351fe in _nl_find_locale (locale_path=0x0, locale_path_len=0x0, category=category@entry=0xc, name=name@entry=0x7fff6fb29f50) at findlocale.c:152
#3  0x00007f285df34925 in __GI_setlocale (locale=<optimized out>, category=<optimized out>) at setlocale.c:337
#4  __GI_setlocale (category=<optimized out>, locale=<optimized out>) at setlocale.c:217
#5  0x000055f3901d5965 in main (argc=0x4, argv=0x7fff6fb2a298, envp=0x7fff6fb2a2c0) at ../../src/src/sudo.c:1430

...

Dump complete.

heaplens-chunks

Gera uma versão ligeiramente modificada do heap chunks do gef.

Isso estende o heap chunks do GEF (que mostra endereços, flags, tamanhos e metadados dos chunks) integrando informações sobre chunks livres do heap bins (que lista chunks anteriormente alocados e liberados dos bins do glibc). O GEF fornece recursos que ajudam na inspeção do heap, como os dois mencionados, mas é tedioso combiná-los. Em alto nível, este comando coleta endereços de chunks livres do último e os rotula no resultado do primeiro.

root@kitploit:~
heaplens-chunks -h
usage: [-h] [--nocolor]

A modified `heap chunks` with info about free chunks.

optional arguments:
  -h, --help  show this help message and exit
  --nocolor   disable ANSI color codes

Exemplo de saída:

root@kitploit:~
gef➤  heaplens-chunks
Showing current heap info with freed chunks:

...

Chunk(addr=0x55dd7f91ddb0, size=0xed0, flags=PREV_INUSE)  ←  free chunk
    [0x000055dd7f91ddb0     e0 fb ba e1 f8 7f 00 00 e0 fb ba e1 f8 7f 00 00    ...............]
Chunk(addr=0x55dd7f91ec80, size=0x50, flags=! PREV_INUSE)
    [0x000055dd7f91ec80     2f 75 73 72 2f 6c 6f 63 61 6c 2f 73 62 69 6e 3a    /usr/local/sbin]
Chunk(addr=0x55dd7f91ecd0, size=0x4010, flags=PREV_INUSE)  ←  free chunk
    [0x000055dd7f91ecd0     f0 02 bb e1 f8 7f 00 00 f0 02 bb e1 f8 7f 00 00    ...............]
Chunk(addr=0x55dd7f922ce0, size=0x50, flags=! PREV_INUSE)
    [0x000055dd7f922ce0     90 02 91 7f dd 55 00 00 00 00 00 00 00 00 00 00    .....U.........]
Chunk(addr=0x55dd7f922d30, size=0x2da0, flags=PREV_INUSE)  ←  free chunk
    [0x000055dd7f922d30     d0 02 bb e1 f8 7f 00 00 d0 02 bb e1 f8 7f 00 00    ...............]
Chunk(addr=0x55dd7f925ad0, size=0x110, flags=! PREV_INUSE)  ←  free chunk
    [0x000055dd7f925ad0     00 00 00 00 00 00 00 00 10 f0 90 7f dd 55 00 00    .............U.]
Chunk(addr=0x55dd7f925be0, size=0x30, flags=PREV_INUSE)
    [0x000055dd7f925be0     00 00 00 00 00 00 00 00 d2 78 b7 7e dd 55 00 00    .........x.~.U.]
Chunk(addr=0x55dd7f925c10, size=0x20, flags=PREV_INUSE)
    [0x000055dd7f925c10     65 6e 5f 55 53 2e 55 54 46 2d 38 00 00 00 00 00    en_US.UTF-8....]
Chunk(addr=0x55dd7f925c30, size=0xa3e0, flags=PREV_INUSE)  ←  top chunk

heaplens-clear

Limpa todos os logs/dados internos coletados e usados pelo heaplens.

root@kitploit:~
heaplens-clear -h
usage: [-h] [-v]

Clear Heaplens logs.

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  increase output verbosity

heaplens-list-env

Lista as variáveis de ambiente que são armazenadas e liberadas no heap. É particularmente útil quando você deseja realizar heap grooming, pois essas variáveis podem afetar o layout do heap.

root@kitploit:~
heaplens-list-env -h
usage: [-h] [-v] [--prefix PREFIX] [--suffix SUFFIX] [-b BREAKPOINT] [-s SKIP]

List environment variables that might affect the heap layout.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         increase output verbosity
  --prefix PREFIX       environment variable value prefix
  --suffix SUFFIX       environment variable value suffix
  -b BREAKPOINT, --breakpoint BREAKPOINT
                        stop the executions here (execute br {breakpoint} in gdb)
  -s SKIP, --skip SKIP  skip this environment variable

Exemplo de saída:

root@kitploit:~
gef➤  file sudoedit
Reading symbols from sudoedit...
gef➤  heaplens-list-env -s LC_ALL -b set_cmnd --prefix C.UTF-8@ -- -s \\ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

...

1st execution. Found following environment variable:
['LOCPATH', 'LC_ALL', 'LC_IDENTIFICATION', 'LANG', 'LC_MEASUREMENT', 'LC_TELEPHONE', 'LC_ADDRESS', 'LC_NAME', 'LC_PAPER', 'LC_MESSAGES', 'LC_MONETARY', 'LC_COLLATE', 'LC_TIME', 'LC_NUMERIC', 'LC_CTYPE', 'TZ', 'SHELL', 'LANGUAGE']
  
...

2nd execution. Possible environment variables for heap grooming:
['LC_IDENTIFICATION', 'LC_COLLATE', 'TZ', 'LC_TIME', 'LANGUAGE', 'LC_NAME', 'LOCPATH', 'LC_MESSAGES', 'LC_NUMERIC', 'LC_ADDRESS', 'LC_TELEPHONE', 'LC_MONETARY', 'LC_MEASUREMENT', 'LC_CTYPE', 'LC_PAPER']

🛠 Casos de Teste

Para compilar os scripts dos casos de teste (compilados na VM)

root@kitploit:~
$ cd tests
$ make all

Despejar o layout do heap de tests/heap-dump

root@kitploit:~
gef➤  file tests/heap-dump
gef➤  heaplens -b breakme
gef➤  heaplens-dump

Despejar o layout do heap de sudoedit em output.txt

root@kitploit:~
gef➤  file sudoedit
gef➤  heaplens -b set_cmnd -- -s \\ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
gef➤  heaplens-dump -o output.txt

Listar variáveis de ambiente para heap grooming em tests/env-in-heap

root@kitploit:~
gef➤  file tests/env-in-heap
gef➤  heaplens-list-env

...

----------------------------
2nd execution. Possible environment variables for heap grooming:
['ENV_IN_HEAP']
----------------------------

Listar variáveis de ambiente para heap grooming em sudoedit

root@kitploit:~
gef➤  file sudoedit
gef➤  heaplens-list-env -s LC_ALL -b set_cmnd --prefix C.UTF-8@ -- -s \\ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

...

----------------------------
1st execution. Found following environment variable:
['LOCPATH', 'LC_ALL', 'LC_IDENTIFICATION', 'LANG', 'LC_MEASUREMENT', 'LC_TELEPHONE', 'LC_ADDRESS', 'LC_NAME', 'LC_PAPER', 'LC_MESSAGES', 'LC_MONETARY', 'LC_COLLATE', 'LC_TIME', 'LC_NUMERIC', 'LC_CTYPE', 'TZ', 'SHELL', 'LANGUAGE']    
----------------------------

...

----------------------------
2nd execution. Possible environment variables for heap grooming:
['LC_CTYPE', 'LC_PAPER', 'LC_MONETARY', 'TZ', 'LC_ADDRESS', 'LC_MEASUREMENT', 'LC_IDENTIFICATION', 'LC_COLLATE', 'LC_NUMERIC', 'LC_MESSAGES', 'LC_TIME', 'LANGUAGE', 'LC_NAME', 'LOCPATH', 'LC_TELEPHONE']
---------------------------- 

🚨 Problemas Conhecidos

Consulte a página de Issues para mais detalhes.

Baixar ferramenta