Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
heaplens — # CMPT733 Cybersecurity Lab II Projekt: GDB-Plugin für Heap-Exploits, inspiriert von CVE-2021-3156 | Kitploit
Tools/GitHubGitHub/ypl6/heaplens
SchwachstellenanalyseExploitationDebuggerBinäranalyseLernen & Bildung
GitHubypl6/heaplens

heaplens

# CMPT733 Cybersecurity Lab II Projekt: GDB-Plugin für Heap-Exploits, inspiriert von CVE-2021-3156

Repository anzeigen
2vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

heaplens

🔎 Heaplens

CMPT733 Cybersecurity Lab II Projekt

📂 Repository-Struktur

root@kitploit:~
.
├── README.md
├── heaplens.png
├── heaplens.py
├── logs
│   ├── sudoedit-#.txt
│   └── ...
└── tests
    ├── Makefile
    ├── env-in-heap
    └── ...
  • README.md: genau hier!
  • heaplens.py: das Hauptskript
  • logs/: enthält einige Beispiellogs, die wir während der Entwicklung und des Testens erfasst haben
  • tests/: enthält einige Binärdateien (und deren Quellcodes) zum Testen

📦 Umgebung

Hier ist eine Liste der Dinge (und Versionen), die wir zum Testen des Exploits verwendet haben. Sie sollten bereits in der VM installiert sein. Falls etwas fehlt, befolge die Anweisungen unten.

Abhängigkeiten

  • Ubuntu 20.04.4 (64-bit)
  • python 3.8.10
  • glibc 2.34
  • gdb 9.2
  • gef 2022.01
    • Wenn gef unter root nicht aktiviert ist, wirf einen Blick auf /root/.gdbinit
    • Wenn die Datei leer ist, kopiere einfach das, was du in ~/.gdbinit hast

sudo-Abhängigkeiten (zum Ausführen von heaplens auf sudo)

Eine Binärdatei von sudo mit aktiviertem Debugging ist erforderlich. Eine vorgefertigte Binärdatei mit Debug-Symbolen wurde in der VM installiert.

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 ist verwundbar

📝 Laden des Plugins

Dies wurde bereits in der VM durchgeführt. Falls die Konfiguration fehlerhaft ist, kannst du den Anweisungen hier folgen, um Heaplens zu laden.

Option 1

Starte gef und bearbeite die Konfiguration:

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

Dies sollte die Datei ~/.gef.rc oder /root/.gef.rc (unter root) aktualisieren.

Option 2

Füge diese Zeile in ~/.gdbinit oder /root/.gdbinit hinzu:

root@kitploit:~
source <Pfad zu>/heaplens/heaplens.py

💡 Verwendung

Es wird empfohlen, gdb unter root auszuführen, wenn privilegierte Programme debuggt werden:

root@kitploit:~
$ sudo su
# gdb

Für alle Befehle werden Hilfemeldungen bereitgestellt. Du kannst sie über <Befehl> -h in GDB aufrufen.

heaplens

Sammelt Heap-Informationen von Speicherzuweisungs- und -freigabefunktionen, einschließlich malloc, realloc, calloc und free.

Die grundlegende Idee ist, dass wir durch das Hooking dieser Funktionen den Prozess des Prüfens und Aktualisierens des Aufrufstapels sowie der Rücksprungadresse der Speicherzuweisung automatisieren können. Durch die Untersuchung der Ablaufverfolgungen können wir sehen, welcher Chunk von foo() in einigen C-Dateien zugewiesen wird, und wir können weiter untersuchen, beispielsweise durch Prüfen der benachbarten Chunks, um geeignete Ziele für die Heap-Ausnutzung zu finden.

Es unterstützt auch das Hinzufügen benutzerdefinierter Haltepunkte dazwischen, wenn der Benutzer an einem Zwischen-Heap-Layout interessiert ist.

Der Befehl selbst ist nicht sehr ausführlich, und du musst heaplens-dump verwenden, um die Ergebnisse auszugeben.

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)

Beispielausgabe:

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

Gibt Heaplens-Logs aus. Wir bieten Optionen, um die Ergebnisse in eine Datei zu schreiben, im JSON-Format auszugeben und die Chunks nach ihren Adressen zu sortieren. Im Dump hat jeder Chunk seine Adresse, Größe, Backtrace und die zugehörige Speicherzuweisungsfunktion in einer besser lesbaren Form aufgezeichnet.

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)

Beispielausgabe:

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

Gibt eine leicht modifizierte Version von heap chunks aus gef aus.

Dies erweitert GEFs heap chunks (das Adressen, Flags, Größen und Metadaten der Chunks anzeigt), indem Informationen über freie Chunks aus heap bins (das zuvor zugewiesene und freigegebene Chunks aus glibc-Bins auflistet) integriert werden. GEF bietet Funktionen, die die Heap-Inspektion unterstützen, wie die beiden genannten, aber es ist mühsam, die beiden zu kombinieren. Auf hoher Ebene sammelt dieser Befehl Adressen freier Chunks aus letzterem und kennzeichnet sie im Ergebnis des ersteren.

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

Beispielausgabe:

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

Löscht alle internen Logs / Daten, die von heaplens gesammelt und verwendet werden.

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

Listet Umgebungsvariablen auf, die im Heap gespeichert und freigegeben werden. Dies ist besonders nützlich, wenn du Heap-Grooming durchführen möchtest, da diese Variablen das Heap-Layout beeinflussen könnten.

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

Beispielausgabe:

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']

🛠 Testfälle

Zum Erstellen der Testfall-Skripte (in der VM gebaut)

root@kitploit:~
$ cd tests
$ make all

Heap-Layout von tests/heap-dump ausgeben

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

Heap-Layout von sudoedit in output.txt ausgeben

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

Umgebungsvariablen für Heap-Grooming in tests/env-in-heap auflisten

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

...

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

Umgebungsvariablen für Heap-Grooming in sudoedit auflisten

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']
---------------------------- 

🚨 Bekannte Probleme

Weitere Details findest du auf der Issues-Seite.

Tool herunterladen