Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
how2heap — さまざまなヒープ悪用技術を学ぶためのリポジトリ。 | Kitploit
ツール/GitHubGitHub/shellphish/how2heap
エクスプロイトCTF学習と教育厳選リソースバイナリエクスプロイトラボと実践
GitHubshellphish/how2heap

how2heap

さまざまなヒープ悪用技術を学ぶためのリポジトリ。

リポジトリを見る
8.8k1.3k3ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

教育用ヒープ悪用

このリポジトリは、さまざまなヒープ悪用テクニックを学習するためのものです。 Ubuntu の Libc リリースをゴールドスタンダードとして使用しています。各テクニックは、対応する Ubuntu リリースで動作することが検証されています。 Debian ベースのオペレーティングシステムで使用している Libc のソースコードをダウンロードするには、apt source libc6 を実行できます。また、▶️ をクリックすると、gdb を使用してブラウザ内でテクニックをデバッグすることもできます。

私たちはハックミーティング中にこのアイデアを思いつき、以下のテクニックを実装しました。

ファイル▶️テクニックGlibc バージョンパッチ適用可能な CTF チャレンジ
first_fit.cglibc malloc の first-fit 動作を示します。
calc_tcache_idx.cglibc の tcache インデックス計算を示します。
fastbin_dup.c▶️fastbin フリーリストを悪用して、malloc に既に割り当て済みのヒープポインタを返させるテクニック。< 2.43patch
fastbin_dup_into_stack.c▶️fastbin フリーリストを悪用して、malloc にほぼ任意のポインタを返させるテクニック。< 2.43patch9447-search-engine, 0ctf 2017-babyheap
fastbin_dup_consolidate.c▶️fastbin フリーリストと top chunk の両方にポインタを配置することで、malloc に既に割り当て済みのヒープポインタを返させるテクニック。< 2.43patch

GnuLibc は常に開発が進められており、上記のテクニックのいくつかは、malloc/free ロジックに導入された整合性チェックにつながっています。 その結果、これらのチェックは定期的に一部のテクニックを壊すため、それらをバイパスするための調整(可能な場合)が必要になります。 この問題に対処するため、調整が必要だった Glibc リリースごとに、同じテクニックの複数バージョンを維持しています。 構造は glibc_<version>/technique.c です。

良い例がありますか? ここに追加してください! テクニック全体を単一の .c ファイルにインライン化してみてください。そのほうがずっと学びやすいです。

はじめに

クイックセットアップ

  • 以下のパッケージ/ツールがインストールされていることを確認してください: patchelf zstd wget (もちろん、コンパイラ用の build-essential または類似のもの、make なども)
  • また、/usr/bin/python は、あなたの python バイナリ(例: /usr/bin/python3)であるか、それを指している必要があります。```shell git clone https://github.com/shellphish/how2heap cd how2heap make clean base ./malloc_playground
root@kitploit:~
これにより、バイナリはシステムのlibcとリンクされることに注意してください。他のlibcバージョンで試したい場合は、`Complete Setup`を参照してください。

## 完全なセットアップ

ホストマシンでコンパイルされたバイナリに対して `LD_PRELOAD` でlibcを使おうとすると、シンボルのバージョニング問題に遭遇します([こちら](https://github.com/shellphish/how2heap/issues/169) を参照)。
これを回避する方法は2つあります。

### 方法1: 古いlibcにリンクする
これは、リンカにターゲットバイナリをターゲットlibcとリンクするよう指示します。```shell
git clone https://github.com/shellphish/how2heap
cd how2heap
H2H_USE_SYSTEM_LIBC=N make v2.23

これにより、すべてのバイナリが対応するlibcにリンクされます。さらに良いことに、デバッグシンボルが付属しています。これで、ホストマシン上で任意のlibcバージョンを試すことができます。 この例では、すべてのglibc-2.23バイナリをコンパイルし、libc-2.23にリンクします。数字を変更することで、他のlibcバージョンでも試せます。

方法2: dockerを使う

これはDockerベースのアプローチを使用して、古いUbuntuコンテナ内でバイナリをコンパイルし、対象のlibcバージョンで実行可能にします。```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:~
# ヒープエクスプロイトツール

ヒープエクスプロイトに関連するツールがいくつか出回っています。

## Malloc Playground

提供されている `malloc_playground.c` ファイルは、ユーザーにコマンドを入力させ、対話的にメモリを割り当て・解放するプログラムのソースコードです。

## Pwngdb

gdb で glibc ヒープを調査します: https://github.com/scwuaptx/Pwngdb

## pwndbg

glibc ヒープの表示/改変を可能にするエクスプロイト中心の gdb プラグイン: https://github.com/pwndbg/pwndbg

## gef

glibc ヒープを調査できるもう1つの優れた gdb プラグイン: https://github.com/hugsy/gef

## heap-viewer

IDA Pro で glibc ヒープを調査します: https://github.com/danigargu/heap-viewer

## heaptrace

アドレスをシンボルに置き換えて、ヒープ操作を可視化するのに役立ちます: https://github.com/Arinerron/heaptrace

# その他のリソース

優れたヒープエクスプロイト関連リソースを、公開時期のほぼ逆順に並べています:

## 便利なヒープエクスプロイトチュートリアル
- GLIBC ヒープエクスプロイト技術の概要 (https://0x434b.dev/overview-of-glibc-heap-exploitation-techniques/) <!-- 2022 -->
- glibc 詳細チュートリアル (https://heap-exploitation.dhavalkapil.com/) - 書籍とエクスプロイトサンプル <!-- 2022 -->
- glibc-2.31 で動作するヒープエクスプロイト技術 (https://github.com/StarCross-Tech/heap_exploit_2.31) <!-- 2020 -->
- Linux ユーザーランドヒープへのやさしい入門 (https://sensepost.com/blog/2017/painless-intro-to-the-linux-userland-heap/) <!-- 2017 -->
- ptmalloc fanzine、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) - 高度なヒープエクスプロイト <!-- 2015 -->

## 過去のヒープエクスプロイト(歴史)
- 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) - いくつかの malloc エクスプロイト技術 <!-- 2009 -->
- もう一つの free() エクスプロイト技術 (http://phrack.org/issues/66/6.html) <!-- 2009 -->
- set_head を使用して wilderness を攻略する (http://phrack.org/issues/64/9.html) <!-- 2007 -->
- ヒープを壊して理解する (https://www.blackhat.com/presentations/bh-usa-07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf) - ヒープの実装と少数のエクスプロイトを解説 <!-- 2007 -->
- OS X ヒープエクスプロイト技術 (http://phrack.org/issues/63/5.html) <!-- 2005 -->
- The Malloc Maleficarum (http://seclists.org/bugtraq/2005/Oct/118) <!-- 2005 -->
- Exploiting The Wilderness (http://seclists.org/vuln-dev/2004/Feb/25) <!-- 2004 -->
- Doug lea の高度な malloc エクスプロイト (http://phrack.org/issues/61/6.html) <!-- 2003 -->

# ハードニング
glibc にはいくつかの「ハードニング」対策が組み込まれています。例: `export MALLOC_CHECK_=1`(一部のチェックを有効にする)、`export MALLOC_PERTURB_=1`(データが上書きされる)、`export MALLOC_MMAP_THRESHOLD_=1`(常に mmap() を使用する)、...

詳細: [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).

また、トレースサポートとして [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)、およびこのファミリーの他の関数にも同様のサポートがあります。
ツールをダウンロード
Hitcon 2016 SleepyHolder
unsafe_unlink.c▶️破損したチャンクの free を悪用して任意書き込みを獲得するテクニック。最新HITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots
house_of_spirit.c▶️偽の fastbin チャンクを free して、malloc にほぼ任意のポインタを返させるテクニック。最新hack.lu CTF 2014-OREO
poison_null_byte.c▶️単一の null バイトオーバーフローを悪用するテクニック。最新PlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote
house_of_lore.c▶️smallbin フリーリストを悪用して、malloc にほぼ任意のポインタを返させるテクニック。最新
overlapping_chunks.c▶️unsorted bin 内の解放済みチャンクサイズの上書きを悪用して、新しい割り当てを既存のチャンクと重複させるテクニック< 2.29patchhack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap
overlapping_chunks_2.c▶️使用中チャンクのサイズ上書きを悪用して、新しい割り当てを既存のチャンクと重複させるテクニック< 2.29patch
mmap_overlapping_chunks.c使用中の mmap チャンクを悪用して、新しい割り当てを現在の mmap チャンクと重複させるテクニック最新
house_of_force.c▶️Top Chunk (Wilderness) ヘッダを悪用して、malloc にほぼ任意のポインタを返させるテクニック< 2.29patchBoston Key Party 2016-cookbook, BCTF 2016-bcloud
unsorted_bin_into_stack.c▶️unsorted bin フリーリスト上の解放済みチャンクの上書きを悪用して、ほぼ任意のポインタを返させるテクニック。< 2.29patch
unsorted_bin_attack.c▶️unsorted bin フリーリスト上の解放済みチャンクの上書きを悪用して、任意のアドレスに大きな値を書き込むテクニック< 2.29patch0ctf 2016-zerostorage
large_bin_attack.c▶️large bin フリーリスト上の解放済みチャンクの上書きを悪用して、任意のアドレスに大きな値を書き込むテクニック< 2.42patch0ctf 2018-heapstorm2
house_of_einherjar.c▶️単一の null バイトオーバーフローを悪用して、malloc に制御されたポインタを返させるテクニック最新Seccon 2016-tinypad
house_of_water.cUAF または double free を悪用して、リークなしで t-cache メタデータを制御し、リークなしで libc を t-cache にリンクするテクニック最新37c3 Potluck - Tamagoyaki
sysmalloc_int_free.cほぼ任意のサイズの Top Chunk (Wilderness) を malloc (sysmalloc _int_free() ) で free することを示します最新
house_of_orange.c▶️Top Chunk (Wilderness) を悪用して任意コード実行を獲得するテクニック< 2.26patchHitcon 2016 houseoforange
house_of_tangerine.ctcache フリーリストを悪用して、Top Chunk (Wilderness) を利用し、malloc に完全に任意のポインタを返させるテクニック>= 2.26PicoCTF 2024- high frequency troubles
house_of_roman.c▶️偽の fastbin、unsorted_bin attack、相対上書きを介してリークなしでリモートコード実行を獲得するテクニック。< 2.29patch
tcache_poisoning.c▶️tcache フリーリストを悪用して、malloc に完全に任意のポインタを返させるテクニック。(2.32 以降ではヒープリークが必要)> 2.25patch
tcache_house_of_spirit.c▶️偽のチャンクを free して、malloc にほぼ任意のポインタを返させるテクニック。> 2.25
house_of_botcake.c▶️tcache の double free 制限をバイパスします。tcache_dup を再び素晴らしいものにします。> 2.25
tcache_stashing_unlink_attack.c▶️small bin フリーリスト上の解放済みチャンクの上書きを悪用し、calloc の助けを借りて malloc に任意のポインタを返させ、任意のアドレスに大きな値を書き込むテクニック。> 2.25Hitcon 2019 one punch man
fastbin_reverse_into_tcache.c▶️fastbin 内の解放済みチャンクの上書きを悪用して、任意のアドレスに大きな値を書き込むテクニック。2.26 - 2.42patch
house_of_mind_fastbin.c▶️arena 処理を伴う単一バイト上書きを悪用して、任意のアドレスに大きな値 (ヒープポインタ) を書き込むテクニック< 2.43patch
house_of_storm.c▶️large bin と unsorted bin の両方のチャンクに対する use after free を悪用して、malloc から任意のチャンクを返させるテクニック< 2.29
house_of_gods.c▶️8回の割り当て以内にスレッドの arena を乗っ取るテクニック< 2.27
decrypt_safe_linking.c▶️リンクリスト内の poison された値を復号して、実際のポインタを復元するテクニック>= 2.32
safe_link_double_protect.cポインタを2回保護することで PROTECT_PTR をリークなしでバイパスし、t-cache 内での任意ポインタリンクを可能にするテクニック>= 2.3237c3 Potluck - Tamagoyaki
tcache_dup.c(旧式)tcache フリーリストを悪用して、malloc に既に割り当て済みのヒープポインタを返させるテクニック。2.26 - 2.28patch
tcache_metadata_poisoning.ctcache メタデータ構造体を操作して、tcache に任意のポインタを提供させるテクニック>= 2.26
house_of_io.cfree された tcache チャンク内の UAF によって tcache 管理構造体を操作し、malloc に任意のメモリへのポインタを返させるテクニック。2.31 - 2.33
tcache_relative_write.c境界外 tcache メタデータ書き込みにより、ヒープ内に任意の10進値とチャンクポインタを書き込むテクニック2.30-2.41patch
tcache_metadata_hijackingtcache メタデータへのオーバーフローによる任意割り当て>= 2.42