# House of Lore | Small bin Attack {{#include ../../banners/hacktricks-training.md}} ## 基本情報 ### コード - [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/) のものを確認してください - これは動作しません - または: [https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c) - これは、`malloc(): unaligned tcache chunk detected`というエラーを取得しながらいくつかのチェックをバイパスしようとしても動作しません - この例はまだ動作します: [**https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html**](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html) ### 目標 - **小さなビンに偽の小さなチャンクを挿入して、それを割り当て可能にする**こと。\ 追加された小さなチャンクは攻撃者が作成した偽のものであり、任意の位置にある偽のものではないことに注意してください。 ### 要件 - 2つの偽のチャンクを作成し、それらを互いにリンクし、小さなビン内の正当なチャンクとリンクします: - `fake0.bk` -> `fake1` - `fake1.fd` -> `fake0` - `fake0.fd` -> `legit`(他の脆弱性を介して解放された小さなビンチャンク内のポインタを修正する必要があります) - `legit.bk` -> `fake0` これにより、`fake0`を割り当てることができるようになります。 ### 攻撃 - 小さなチャンク(`legit`)が割り当てられ、その後、トップチャンクと統合されないように別のチャンクが割り当てられます。次に、`legit`が解放され(未整理ビンリストに移動)、より大きなチャンクが割り当てられ、**`legit`が小さなビンに移動します。** - 攻撃者は一対の偽の小さなチャンクを生成し、整合性チェックをバイパスするために必要なリンクを作成します: - `fake0.bk` -> `fake1` - `fake1.fd` -> `fake0` - `fake0.fd` -> `legit`(他の脆弱性を介して解放された小さなビンチャンク内のポインタを修正する必要があります) - `legit.bk` -> `fake0` - 小さなチャンクが割り当てられ、正当なものを取得し、**`fake0`**を小さなビンのトップリストにします - さらに別の小さなチャンクが割り当てられ、`fake0`がチャンクとして取得され、内部のポインタを読み書きする可能性を許可します。 ## 参考文献 - [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/) - [https://heap-exploitation.dhavalkapil.com/attacks/house_of_lore](https://heap-exploitation.dhavalkapil.com/attacks/house_of_lore) - [https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html) {{#include ../../banners/hacktricks-training.md}}