Tcache Bin Attack
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)
Tcacheビンについての詳細は、このページを確認してください:
Bins & Memory Allocationsまず、TcacheはGlibcバージョン2.26で導入されたことに注意してください。
Tcache攻撃(Tcacheポイズニングとも呼ばれる)は、guyinatuxidoページで提案されており、目標は解放されたチャンク内のビンの次のチャンクへのポインタを任意のアドレスに上書きすることです。その後、特定のアドレスを割り当ててポインタを上書きすることが可能になります。
しかし、現在、前述のコードを実行すると、エラーが発生します:malloc(): unaligned tcache chunk detected
。したがって、新しいポインタに書き込むアドレスはアラインされたアドレスである必要があります(または、書き込まれたアドレスが実際にアラインされるまでバイナリを十分に実行する必要があります)。
通常、ヒープの最初にインデックスごとのチャンクの数を含むチャンクと、各Tcacheインデックスのヘッドチャンクへのアドレスが見つかります。何らかの理由でこの情報を変更できる場合、特定のインデックスのヘッドチャンクを希望のアドレス(例えば__malloc_hook
)にポイントさせることが可能になり、その後、インデックスのサイズのチャンクを割り当てて、__malloc_hook
の内容を上書きすることができます。
Libc情報漏洩:Tcacheを満たし、未整理リストにチャンクを追加し、Tcacheを空にし、未整理ビンからチャンクを再割り当てすることが可能です。最初の8Bを上書きするだけで、チャンクからのlibcへの2番目のアドレスをそのままにしておくことができます。
Tcache攻撃:バイナリは1Bヒープオーバーフローに対して脆弱です。これを利用して、割り当てられたチャンクのサイズヘッダーを変更して大きくします。その後、このチャンクは解放され、偽のサイズのチャンクのTcacheに追加されます。次に、偽のサイズのチャンクを割り当てると、前のチャンクが返され、実際にはこのチャンクが小さかったことがわかります。これにより、メモリ内の次のチャンクを上書きする機会が得られます。
この機会を利用して、次のチャンクのFDポインタをmalloc_hook
にポイントさせ、次に2つのポインタを割り当てることが可能になります:最初は修正した正当なポインタ、次に2回目の割り当ては**malloc_hook
内のチャンクを返し、これを利用してワンガジェット**を書き込むことができます。
Libc情報漏洩:使用後の解放と二重解放があります。この書き込みでは、著者は小さなビンに配置されたチャンクのアドレスを読み取ることでlibcのアドレスを漏洩しました(未整理ビンから漏洩するのと同様ですが、小さなビンからです)。
Tcache攻撃:Tcacheは二重解放を介して実行されます。同じチャンクが2回解放されるため、Tcache内でチャンクは自分自身を指します。その後、割り当てられ、FDポインタがフリーフックを指すように変更され、再度割り当てられると、リスト内の次のチャンクがフリーフックに配置されます。次に、これも割り当てられ、ここにsystem
のアドレスを書き込むことが可能です。これにより、"/bin/sh"
を含むmallocが解放されると、シェルが得られます。
ここでの主な脆弱性は、オフセットを指定することでヒープ内の任意のアドレスをfree
できる能力です。
Tcacheインデックス攻撃:Tcacheチャンク(Tcacheビンの情報を持つチャンク)内に格納されるサイズのチャンクを割り当てて解放することで、値0x100のアドレスを生成することが可能です。これは、Tcacheが各ビンのチャンク数を異なるバイトに格納するため、特定のインデックスのチャンクが値0x100を生成するからです。
次に、この値はサイズ0x100のチャンクが存在するように見えます。これにより、このアドレスをfree
することで悪用できます。これにより、そのアドレスがTcache内のサイズ0x100のチャンクのインデックスに追加されます。
次に、サイズ0x100のチャンクを割り当てると、前のアドレスがチャンクとして返され、他のTcacheインデックスを上書きすることが可能になります。 例えば、mallocフックのアドレスをそのうちの1つに入れ、そのインデックスのサイズのチャンクを割り当てることで、callocフック内のチャンクを得ることができ、これにワンガジェットを書き込んでシェルを取得できます。
前回と同じ脆弱性ですが、1つの追加制限があります。
Tcacheインデックス攻撃:前回の攻撃に似ていますが、Tcache情報を含むチャンクを解放することによって、より少ないステップで実行されます。これにより、そのアドレスがそのサイズのTcacheインデックスに追加され、そのサイズを割り当ててTcacheチャンク情報をチャンクとして取得できるようになります。これにより、フリーフックをインデックスのアドレスとして追加し、それを割り当ててワンガジェットを書き込むことが可能になります。
fd
ポインタに数値を追加するためのWrite After Free。
このチャレンジでは多くのヒープフェンシュイが必要です。書き込みでは、Tcacheのフリーリストのヘッドを制御することが非常に便利であることが示されています。
stdout
を介したGlibc漏洩(FSOP)。
任意の書き込みプリミティブを取得するためのTcacheポイズニング。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)