
さまざまなヒープ悪用技術を学ぶためのリポジトリ。
このリポジトリは、さまざまなヒープ悪用テクニックを学習するためのものです。
Ubuntu の Libc リリースをゴールドスタンダードとして使用しています。各テクニックは、対応する Ubuntu リリースで動作することが検証されています。
Debian ベースのオペレーティングシステムで使用している Libc のソースコードをダウンロードするには、apt source libc6 を実行できます。また、▶️ をクリックすると、gdb を使用してブラウザ内でテクニックをデバッグすることもできます。
私たちはハックミーティング中にこのアイデアを思いつき、以下のテクニックを実装しました。
| ファイル | ▶️ | テクニック | Glibc バージョン | パッチ | 適用可能な CTF チャレンジ |
|---|---|---|---|---|---|
| first_fit.c | glibc malloc の first-fit 動作を示します。 | ||||
| calc_tcache_idx.c | glibc の tcache インデックス計算を示します。 | ||||
| fastbin_dup.c | ▶️ | fastbin フリーリストを悪用して、malloc に既に割り当て済みのヒープポインタを返させるテクニック。 | < 2.43 | patch | |
| fastbin_dup_into_stack.c | ▶️ | fastbin フリーリストを悪用して、malloc にほぼ任意のポインタを返させるテクニック。 | < 2.43 | patch | 9447-search-engine, 0ctf 2017-babyheap |
| fastbin_dup_consolidate.c | ▶️ | fastbin フリーリストと top chunk の両方にポインタを配置することで、malloc に既に割り当て済みのヒープポインタを返させるテクニック。 | < 2.43 | patch | 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.29 | patch | hack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap |
| overlapping_chunks_2.c | ▶️ | 使用中チャンクのサイズ上書きを悪用して、新しい割り当てを既存のチャンクと重複させるテクニック | < 2.29 | patch | |
| mmap_overlapping_chunks.c | 使用中の mmap チャンクを悪用して、新しい割り当てを現在の mmap チャンクと重複させるテクニック | 最新 | |||
| house_of_force.c | ▶️ | Top Chunk (Wilderness) ヘッダを悪用して、malloc にほぼ任意のポインタを返させるテクニック | < 2.29 | patch | Boston Key Party 2016-cookbook, BCTF 2016-bcloud |
| unsorted_bin_into_stack.c | ▶️ | unsorted bin フリーリスト上の解放済みチャンクの上書きを悪用して、ほぼ任意のポインタを返させるテクニック。 | < 2.29 | patch | |
| unsorted_bin_attack.c | ▶️ | unsorted bin フリーリスト上の解放済みチャンクの上書きを悪用して、任意のアドレスに大きな値を書き込むテクニック | < 2.29 | patch | 0ctf 2016-zerostorage |