Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
heaplens — # Progetto CMPT733 Cybersecurity Lab II: Plugin GDB per exploit heap ispirato a CVE-2021-3156 | Kitploit
Strumenti/GitHubGitHub/ypl6/heaplens
Analisi delle VulnerabilitàExploitDebuggerAnalisi di BinariApprendimento e Formazione
GitHubypl6/heaplens

heaplens

# Progetto CMPT733 Cybersecurity Lab II: Plugin GDB per exploit heap ispirato a CVE-2021-3156

Vedi Repository
2264 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

heaplens

🔎 Heaplens

Progetto CMPT733 Cybersecurity Lab II

📂 Struttura del Repository

.
├── README.md
├── heaplens.png
├── heaplens.py
├── logs
│   ├── sudoedit-#.txt
│   └── ...
└── tests
    ├── Makefile
    ├── env-in-heap
    └── ...
  • README.md: proprio qui!
  • heaplens.py: lo script principale
  • logs/: contiene alcuni log di esempio catturati durante lo sviluppo e i test
  • tests/: contiene alcuni binari (e i loro codici sorgente) per i test

📦 Ambiente

Ecco un elenco di cose (e versioni) che abbiamo usato per testare l'exploit. Dovrebbero essere già installate nella VM. Nel caso manchi qualcosa, segui le istruzioni qui sotto.

Dipendenze

  • Ubuntu 20.04.4 (64-bit)
  • python 3.8.10
  • glibc 2.34
  • gdb 9.2
  • gef 2022.01
    • Se gef non è abilitato come root, dai un'occhiata a /root/.gdbinit
    • Se il file è vuoto, copia semplicemente quello che hai in ~/.gdbinit

Dipendenze sudo (per eseguire heaplens su sudo)

È richiesto un binario di sudo con il debug abilitato. Un binario precompilato con simboli di debug è già stato installato nella VM.

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 è vulnerabile

📝 Caricamento del Plugin

Questo è già stato fatto nella VM. Nel caso la configurazione sia errata, puoi seguire le istruzioni qui per caricare Heaplens.

Opzione 1

Avvia gef e modifica la configurazione:

gef➤ gef config gef.extra_plugins_dir <percorso di>/heaplens
gef➤ gef save
gef➤ q

Questo dovrebbe aggiornare il file ~/.gef.rc o /root/.gef.rc (come root).

Opzione 2

Aggiungi questa riga in ~/.gdbinit o /root/.gdbinit:

source <percorso di>/heaplens/heaplens.py

💡 Utilizzo

Si consiglia di eseguire gdb come root quando si esegue il debug di programmi privilegiati:

$ sudo su
# gdb

I messaggi di aiuto sono forniti per tutti i comandi. Puoi accedervi tramite <comando> -h in GDB.

heaplens

Raccoglie informazioni sull'heap dalle funzioni di allocazione e deallocazione della memoria, incluse malloc, realloc, calloc e free.

L'idea di alto livello è che agganciando queste funzioni, possiamo automatizzare il processo di controllo e aggiornamento dello stack di chiamate e dell'indirizzo di ritorno dell'allocazione di memoria. Ispezionando le tracce, possiamo vedere quale chunk viene allocato da foo() in alcuni file C, e possiamo indagare ulteriormente, ad esempio controllando i chunk adiacenti, per trovare obiettivi adatti per lo sfruttamento dell'heap.

Supporta anche l'aggiunta di breakpoint personalizzati in mezzo se l'utente è interessato a un layout intermedio dell'heap.

Il comando in sé non è molto verboso e dovrai usare heaplens-dump per stampare i risultati.

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)

Esempio di output:

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

Scarica i log di Heaplens. Forniamo opzioni per scrivere i risultati su un file, output in formato JSON e ordinamento dei chunk per i loro indirizzi. Nel dump, ogni chunk avrà il suo indirizzo, dimensione, backtrace e la relativa funzione di allocazione della memoria registrati in modo più leggibile.

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)

Esempio di output:

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

Output di una versione leggermente modificata di heap chunks di gef.

Questo estende heap chunks di GEF (che mostra indirizzi, flag, dimensioni e metadati dei chunk) integrando informazioni sui chunk liberi da heap bins (che elenca i chunk precedentemente allocati e liberati dai bin di glibc). GEF fornisce funzionalità che aiutano l'ispezione dell'heap come le due menzionate, ma è noioso combinarle. Ad alto livello, questo comando raccoglie gli indirizzi dei chunk liberi dal secondo e li etichetta nel risultato del primo.

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

Esempio di output:

gef➤  heaplens-chunks
Showing current heap info with freed chunks:

...
Scarica lo strumento