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
how2heap — Ein Repository zum Erlernen verschiedener Heap-Exploitation-Techniken. | Kitploit
Tools/GitHubGitHub/shellphish/how2heap
ExploitationCTFLernen & BildungKuratierte RessourcenBinary-ExploitationLabs & Praxis
GitHubshellphish/how2heap

how2heap

Ein Repository zum Erlernen verschiedener Heap-Exploitation-Techniken.

Repository anzeigen
8.8k1.3kvor 3 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Heap-Exploitation zu Lernzwecken

Dieses Repo dient zum Erlernen verschiedener Heap-Exploitation-Techniken. Wir verwenden die Libc-Releases von Ubuntu als Goldstandard. Jede Technik wurde verifiziert, um auf den entsprechenden Ubuntu-Releases zu funktionieren. Du kannst apt source libc6 ausführen, um den Quellcode der Libc herunterzuladen, die du auf einem Debian-basierten Betriebssystem verwendest. Du kannst auch auf ▶️ klicken, um die Technik in deinem Browser mit gdb zu debuggen.

Wir kamen während eines Hack-Meetings auf die Idee und haben die folgenden Techniken implementiert:

Datei▶️TechnikGlibc-VersionPatchAnwendbare CTF-Challenges
first_fit.cDemonstriert das First-Fit-Verhalten von glibc malloc.
calc_tcache_idx.cDemonstriert die tcache-Indexberechnung von glibc.
fastbin_dup.c▶️Bringt malloc dazu, einen bereits zugewiesenen Heap-Pointer zurückzugeben, indem die fastbin-Freeliste missbraucht wird.< 2.43Patch
fastbin_dup_into_stack.c▶️Bringt malloc dazu, einen nahezu beliebigen Pointer zurückzugeben, indem die fastbin-Freeliste missbraucht wird.< 2.43Patch9447-search-engine, 0ctf 2017-babyheap
fastbin_dup_consolidate.c▶️Bringt malloc dazu, einen bereits zugewiesenen Heap-Pointer zurückzugeben, indem ein Pointer sowohl in die fastbin-Freeliste als auch in den Top Chunk eingetragen wird.

Die GnuLibc befindet sich in ständiger Entwicklung, und einige der oben genannten Techniken haben zu Konsistenzprüfungen in der malloc/free-Logik geführt. Infolgedessen brechen diese Prüfungen regelmäßig einige der Techniken und erfordern Anpassungen, um sie (wenn möglich) zu umgehen. Wir begegnen diesem Problem, indem wir mehrere Versionen derselben Technik für jede Glibc-Version vorhalten, die eine Anpassung erforderte. Die Struktur ist glibc_<version>/technique.c.

Hast du ein gutes Beispiel? Füge es hier hinzu! Versuche, die gesamte Technik in eine einzelne .c-Datei zu packen -- so lernt es sich viel leichter.

Erste Schritte

Schnelle Einrichtung

  • stelle sicher, dass die folgenden Pakete/Werkzeuge installiert sind: patchelf zstd wget (natürlich auch build-essential oder Ähnliches für Compiler, make, ...)
  • außerdem muss /usr/bin/python dein python-Binary sein oder darauf zeigen (z. B. /usr/bin/python3)```shell git clone https://github.com/shellphish/how2heap cd how2heap make clean base ./malloc_playground
root@kitploit:~
Beachte, dass dies die Binärdateien mit deiner System-libc verknüpft. Wenn du mit anderen libc-Versionen spielen möchtest, lies bitte `Complete Setup`.

## Complete Setup

Du wirst auf Symbol-Versionierungsprobleme stoßen (siehe [dieses](https://github.com/shellphish/how2heap/issues/169)), wenn du versuchst, `LD_PRELOAD` libcs an eine Binärdatei zu hängen, die auf deiner Host-Maschine kompiliert wurde.
Wir haben zwei Möglichkeiten, dies zu umgehen.

### Methode 1: Gegen ältere libc linken
Diese weist den Linker an, die Ziel-Binärdatei mit der Ziel-libc zu verlinken.```shell
git clone https://github.com/shellphish/how2heap
cd how2heap
H2H_USE_SYSTEM_LIBC=N make v2.23

Dadurch werden alle Binärdateien mit den entsprechenden libcs verknüpft. Noch besser ist, dass es mit Debug-Symbolen kommt. Jetzt kannst du auf deinem Host-Rechner mit beliebigen libc-Versionen spielen. In diesem Beispiel werden alle glibc-2.23-Binärdateien kompiliert und mit libc-2.23 verknüpft. Du kannst die Zahl ändern, um mit anderen libc-Versionen zu spielen.

Methode 2: docker verwenden

Diese Methode nutzt einen Docker-basierten Ansatz, um Binärdateien in einem alten Ubuntu-Container zu kompilieren, sodass sie mit der Ziel-libc-Version ausführbar sind.```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:~
# Tools zur Heap-Exploitation

Es gibt einige Heap-Exploitation-Tools, die herumschwirren.

## Malloc Playground

Die bereitgestellte Datei `malloc_playground.c` ist der Quellcode für ein Programm, das den Benutzer interaktiv zur Eingabe von Befehlen auffordert, um Speicher zu allozieren und freizugeben.

## Pwngdb

Untersuche den glibc-Heap in gdb: https://github.com/scwuaptx/Pwngdb

## pwndbg

Ein auf Exploitation ausgerichtetes gdb-Plugin, das die Möglichkeit bietet, den glibc-Heap anzusehen/zu manipulieren: https://github.com/pwndbg/pwndbg

## gef

Ein weiteres hervorragendes gdb-Plugin, mit dem sich der glibc-Heap untersuchen lässt: https://github.com/hugsy/gef

## heap-viewer

Untersuche den glibc-Heap in IDA Pro: https://github.com/danigargu/heap-viewer

## heaptrace

Hilft dir, Heap-Operationen zu visualisieren, indem Adressen durch Symbole ersetzt werden: https://github.com/Arinerron/heaptrace

# Weitere Ressourcen

Einige gute Ressourcen zur Heap-Exploitation, ungefähr in umgekehrter Reihenfolge ihrer Veröffentlichung, sind:

## Nützliche Tutorials zur Heap-Exploitation
- Überblick über GLIBC-Heap-Exploitation-Techniken (https://0x434b.dev/overview-of-glibc-heap-exploitation-techniques/) <!-- 2022 -->
- Ausführliches glibc-Tutorial (https://heap-exploitation.dhavalkapil.com/) - Buch und Exploit-Beispiele <!-- 2022 -->
- Heap-Exploitation-Techniken, die mit glibc-2.31 funktionieren (https://github.com/StarCross-Tech/heap_exploit_2.31) <!-- 2020 -->
- Schmerzfreie Einführung in den Linux-Userland-Heap (https://sensepost.com/blog/2017/painless-intro-to-the-linux-userland-heap/) <!-- 2017 -->
- ptmalloc-Fanzine, eine Sammlung von Ressourcen und Beispielen zu Metadaten-Angriffen auf 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) - fortgeschrittene Heap-Exploitation <!-- 2015 -->

## Historische Heap-Exploitation (Die Geschichte)
- 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) - einige malloc-Exploitation-Techniken <!-- 2009 -->
- Wieder eine weitere free()-Exploitation-Technik (http://phrack.org/issues/66/6.html) <!-- 2009 -->
- Die Verwendung von set_head, um die Wilderness zu besiegen (http://phrack.org/issues/64/9.html) <!-- 2007 -->
- Den Heap verstehen, indem man ihn bricht (https://www.blackhat.com/presentations/bh-usa-07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf) - erklärt die Heap-Implementierung und ein paar Exploits <!-- 2007 -->
- OS-X-Heap-Exploitation-Techniken (http://phrack.org/issues/63/5.html) <!-- 2005 -->
- The Malloc Maleficarum (http://seclists.org/bugtraq/2005/Oct/118) <!-- 2005 -->
- Die Wilderness ausnutzen (http://seclists.org/vuln-dev/2004/Feb/25) <!-- 2004 -->
- Fortgeschrittene Doug-lea-malloc-Exploits (http://phrack.org/issues/61/6.html) <!-- 2003 -->

# Härtung
Es gibt einige „Härtungs“-Maßnahmen, die in glibc eingebaut sind, wie `export MALLOC_CHECK_=1` (aktiviert einige Prüfungen), `export MALLOC_PERTURB_=1` (Daten werden überschrieben), `export MALLOC_MMAP_THRESHOLD_=1` (verwendet immer mmap()), ...

Weitere Informationen: [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).

Es gibt auch Tracing-Unterstützung wie [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) sowie in anderen Funktionen dieser Familie.
Tool herunterladen
< 2.43
Patch
Hitcon 2016 SleepyHolder
unsafe_unlink.c▶️Nutzt free auf einem korrupten Chunk aus, um beliebiges Schreiben zu erreichen.neuesteHITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots
house_of_spirit.c▶️Gibt einen gefälschten fastbin-Chunk frei, damit malloc einen nahezu beliebigen Pointer zurückgibt.neuestehack.lu CTF 2014-OREO
poison_null_byte.c▶️Nutzt einen einzelnen Null-Byte-Overflow aus.neuestePlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote
house_of_lore.c▶️Bringt malloc dazu, einen nahezu beliebigen Pointer zurückzugeben, indem die smallbin-Freeliste missbraucht wird.neueste
overlapping_chunks.c▶️Nutzt das Überschreiben der Größe eines freigegebenen Chunks im unsorted bin aus, um eine neue Allokation mit einem bestehenden Chunk überlappen zu lassen< 2.29Patchhack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap
overlapping_chunks_2.c▶️Nutzt das Überschreiben der Größe eines belegten Chunks aus, um eine neue Allokation mit einem bestehenden Chunk überlappen zu lassen< 2.29Patch
mmap_overlapping_chunks.cNutzt einen belegten mmap-Chunk aus, um eine neue Allokation mit einem aktuellen mmap-Chunk überlappen zu lassenneueste
house_of_force.c▶️Nutzt den Header des Top Chunks (Wilderness) aus, um malloc dazu zu bringen, einen nahezu beliebigen Pointer zurückzugeben< 2.29PatchBoston Key Party 2016-cookbook, BCTF 2016-bcloud
unsorted_bin_into_stack.c▶️Nutzt das Überschreiben eines freigegebenen Chunks in der unsorted-bin-Freeliste aus, um einen nahezu beliebigen Pointer zurückzugeben.< 2.29Patch
unsorted_bin_attack.c▶️Nutzt das Überschreiben eines freigegebenen Chunks in der unsorted-bin-Freeliste aus, um einen großen Wert an eine beliebige Adresse zu schreiben< 2.29Patch0ctf 2016-zerostorage
large_bin_attack.c▶️Nutzt das Überschreiben eines freigegebenen Chunks in der large-bin-Freeliste aus, um einen großen Wert an eine beliebige Adresse zu schreiben< 2.42Patch0ctf 2018-heapstorm2
house_of_einherjar.c▶️Nutzt einen einzelnen Null-Byte-Overflow aus, um malloc dazu zu bringen, einen kontrollierten Pointer zurückzugebenneuesteSeccon 2016-tinypad
house_of_water.cNutzt eine UAF oder einen Double Free aus, um ohne Leak die t-cache-Metadaten zu kontrollieren und libc ohne Leak in den t-cache zu verlinkenneueste37c3 Potluck - Tamagoyaki
sysmalloc_int_free.cDemonstriert das Freigeben des nahezu beliebig großen Top Chunks (Wilderness) mithilfe von malloc (sysmalloc _int_free() )neueste
house_of_orange.c▶️Nutzt den Top Chunk (Wilderness) aus, um beliebige Codeausführung zu erlangen< 2.26PatchHitcon 2016 houseoforange
house_of_tangerine.cNutzt den Top Chunk (Wilderness) aus, um malloc durch Missbrauch der tcache-Freeliste dazu zu bringen, einen vollständig beliebigen Pointer zurückzugeben>= 2.26PicoCTF 2024- high frequency troubles
house_of_roman.c▶️Leakless-Technik, um über Fake-Fastbins, den unsorted_bin-Angriff und relative Overwrites Remote-Code-Ausführung zu erlangen.< 2.29Patch
tcache_poisoning.c▶️Bringt malloc dazu, durch Missbrauch der tcache-Freeliste einen vollständig beliebigen Pointer zurückzugeben. (erfordert einen Heap-Leak ab 2.32)> 2.25Patch
tcache_house_of_spirit.c▶️Gibt einen gefälschten Chunk frei, damit malloc einen nahezu beliebigen Pointer zurückgibt.> 2.25
house_of_botcake.c▶️Umgeht die Double-Free-Beschränkung bei tcache. Macht tcache_dup wieder großartig.> 2.25
tcache_stashing_unlink_attack.c▶️Nutzt das Überschreiben eines freigegebenen Chunks in der small-bin-Freeliste aus, um malloc dazu zu bringen, einen beliebigen Pointer zurückzugeben und mit Hilfe von calloc einen großen Wert an eine beliebige Adresse zu schreiben.> 2.25Hitcon 2019 one punch man
fastbin_reverse_into_tcache.c▶️Nutzt das Überschreiben eines freigegebenen Chunks in der fastbin aus, um einen großen Wert an eine beliebige Adresse zu schreiben.2.26 - 2.42Patch
house_of_mind_fastbin.c▶️Nutzt einen Single-Byte-Overwrite mit Arena-Handling aus, um einen großen Wert (Heap-Pointer) an eine beliebige Adresse zu schreiben< 2.43Patch
house_of_storm.c▶️Nutzt eine Use-after-Free sowohl an einem large-bin- als auch an einem unsorted-bin-Chunk aus, um von malloc einen beliebigen Chunk zurückzugeben< 2.29
house_of_gods.c▶️Eine Technik, um die Arena eines Threads innerhalb von 8 Allokationen zu kapern< 2.27
decrypt_safe_linking.c▶️Entschlüsselt den vergifteten Wert in der verketteten Liste, um den tatsächlichen Pointer wiederherzustellen>= 2.32
safe_link_double_protect.cLeakless-Bypass für PROTECT_PTR, indem ein Pointer zweimal geschützt wird, was beliebiges Pointer-Linking im t-cache ermöglicht>= 2.3237c3 Potluck - Tamagoyaki
tcache_dup.c(veraltet)Bringt malloc dazu, einen bereits zugewiesenen Heap-Pointer zurückzugeben, indem die tcache-Freeliste missbraucht wird.2.26 - 2.28Patch
tcache_metadata_poisoning.cBringt die tcache dazu, beliebige Pointer zu liefern, indem die tcache-Metadaten-Struktur manipuliert wird>= 2.26
house_of_io.cBringt malloc dazu, einen Pointer auf beliebigen Speicher zurückzugeben, indem die tcache-Verwaltungsstruktur durch eine UAF in einem freigegebenen tcache-Chunk manipuliert wird.2.31 - 2.33
tcache_relative_write.cBeliebiges Schreiben von Dezimalwerten und Chunk-Pointern im Heap durch Out-of-Bounds-Schreiben in die tcache-Metadaten2.30-2.41Patch
tcache_metadata_hijackingBeliebige Allokation durch Overflow in die tcache-Metadaten>= 2.42