hacktricks/binary-exploitation/heap/large-bin-attack.md

79 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

# ラージビン攻撃
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** をフォローする**
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出する
</details>
## 基本情報
ラージビンとは何かについての詳細情報は、次のページを参照してください:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
[**how2heap - large bin attack**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) に素晴らしい例が見つかります。
基本的に、最新の「現在の」glibc2.35)では、**`P->bk_nextsize`** がチェックされていないため、特定の条件が満たされると大きなビンチャンクの値で任意のアドレスを変更できます。
その例では、次の条件が見つかります:
* 大きなチャンクが割り当てられている
* 最初のチャンクよりも小さいが同じインデックスにある大きなチャンクが割り当てられている
* ビン内で最初に行く必要があるため、それよりも小さくなければならない
* (トップチャンクとのマージを防ぐチャンクが作成される)
* 次に、最初の大きなチャンクが解放され、それよりも大きな新しいチャンクが割り当てられる -> チャンク1はラージビンに移動
* 次に、2番目の大きなチャンクが解放される
* そして、脆弱性: 攻撃者は `chunk1->bk_nextsize``[target-0x20]` に変更できる
* 次に、チャンク2よりも大きなチャンクが割り当てられると、チャンク2がラージビンに挿入され、アドレス `chunk1->bk_nextsize->fd_nextsize` がチャンク2のアドレスで上書きされます
{% hint style="success" %}
他の潜在的なシナリオがありますが、重要なのは、ビンに現在のXチャンクよりも**小さい**チャンクを追加することです。そのためには、ビン内でそれよりも前に挿入する必要があり、Xの **`bk_nextsize`** を変更できる必要があります。それが小さなチャンクのアドレスが書き込まれる場所です。
{% endhint %}
これはmallocからの関連するコードです。アドレスがどのように上書きされたかをよりよく理解するためにコメントが追加されています:
{% code overflow="wrap" %}
```c
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
```
{% endcode %}
これは、`global_max_fast`のグローバル変数を上書きして、より大きなチャンクで高速ビンアタックを利用するために使用できます。
この攻撃の別の素晴らしい説明は、[**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin\_attack/largebin\_explanation0/index.html)で見つけることができます。
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使用して、ゼロからヒーローまでAWSハッキングを学びましょう</summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローしてください。**
* **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>