Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
heaplens — # Projet CMPT733 Cybersecurity Lab II : Plugin GDB pour exploits de tas inspiré par CVE-2021-3156 | Kitploit
Outils/GitHubGitHub/ypl6/heaplens
Analyse des VulnérabilitésExploitationDébogueursAnalyse de BinairesApprentissage et Éducation
GitHubypl6/heaplens

heaplens

# Projet CMPT733 Cybersecurity Lab II : Plugin GDB pour exploits de tas inspiré par CVE-2021-3156

Voir le dépôt
226il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

heaplens

🔎 Heaplens

Projet du laboratoire II de cybersécurité CMPT733

📂 Structure du dépôt

.
├── README.md
├── heaplens.png
├── heaplens.py
├── logs
│   ├── sudoedit-#.txt
│   └── ...
└── tests
    ├── Makefile
    ├── env-in-heap
    └── ...
  • README.md : c'est ici !
  • heaplens.py : le script principal
  • logs/ : contient quelques journaux d'exemple que nous avons capturés pendant le développement et les tests
  • tests/ : contient quelques binaires (et leurs codes sources) pour les tests

📦 Environnement

Voici une liste des éléments (et versions) que nous avons utilisés pour tester l'exploit. Ils devraient déjà être installés dans la VM. Si quelque chose manque, suivez les instructions ci-dessous.

Dépendances

  • Ubuntu 20.04.4 (64 bits)
  • python 3.8.10
  • glibc 2.34
  • gdb 9.2
  • gef 2022.01
    • Si gef n'est pas activé sous root, jetez un œil à /root/.gdbinit
    • Si le fichier est vide, copiez simplement ce que vous avez dans ~/.gdbinit

Dépendances sudo (pour exécuter heaplens sur sudo)

Un binaire de sudo avec le débogage activé est requis. Un binaire pré-compilé avec les symboles de débogage a été installé dans la 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 est vulnérable

📝 Chargement du plugin

Cela a déjà été fait dans la VM. Si la configuration est erronée, vous pouvez suivre les instructions ci-dessous pour charger Heaplens.

Option 1

Démarrez gef et modifiez la configuration :

gef➤ gef config gef.extra_plugins_dir <chemin vers>/heaplens
gef➤ gef save
gef➤ q

Cela devrait mettre à jour le fichier ~/.gef.rc ou /root/.gef.rc (sous root).

Option 2

Ajoutez cette ligne dans ~/.gdbinit ou /root/.gdbinit :

source <chemin vers>/heaplens/heaplens.py

💡 Utilisation

Il est recommandé d'exécuter gdb sous root lors du débogage de programmes privilégiés :

$ sudo su
# gdb

Des messages d'aide sont fournis pour toutes les commandes. Vous pouvez y accéder via <commande> -h dans GDB.

heaplens

Collecte les informations du tas à partir des fonctions d'allocation et de désallocation mémoire, notamment malloc, realloc, calloc et free.

L'idée de haut niveau est qu'en accrochant ces fonctions, nous pouvons automatiser le processus de vérification et de mise à jour de la pile d'appels ainsi que de l'adresse de retour de l'allocation mémoire. En inspectant les traces, nous pouvons voir quel bloc est alloué par foo() dans certains fichiers C, et nous pouvons approfondir l'investigation, par exemple en vérifiant les blocs adjacents, pour trouver des cibles appropriées pour l'exploitation du tas.

Il prend également en charge l'ajout de points d'arrêt personnalisés entre les deux si l'utilisateur est intéressé par une disposition intermédiaire du tas.

La commande elle-même n'est pas très verbeuse et vous devrez utiliser heaplens-dump pour imprimer les résultats.

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)

Exemple de sortie :

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

Décharge les journaux de Heaplens. Nous fournissons des options pour écrire les résultats dans un fichier, produire une sortie au format JSON et trier les blocs par leurs adresses. Dans le dump, chaque bloc aura son adresse, sa taille, sa trace d'appel et la fonction d'allocation mémoire associée, enregistrés de manière plus lisible.

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)

Exemple de sortie :

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

Produit une version légèrement modifiée de heap chunks de gef.

Cette commande étend heap chunks de GEF (qui affiche les adresses, les drapeaux, les tailles et les métadonnées des blocs) en intégrant les informations sur les blocs libres de heap bins (qui liste les blocs précédemment alloués et libérés des bins de glibc). GEF fournit des fonctionnalités qui aident à l'inspection du tas comme les deux mentionnées, mais il est fastidieux de les combiner. À un niveau élevé, cette commande collecte les adresses des blocs libres de la seconde et les étiquette dans le résultat de la première.

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

Exemple de sortie :

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

...
Télécharger l’outil