Pointer Redirecting
文字列ポインタ
関数呼び出しがスタックにある文字列のアドレスを使用する場合、バッファオーバーフローを悪用してこのアドレスを上書きし、バイナリ内の別の文字列のアドレスを置くことが可能です。
例えば、system
関数呼び出しがコマンドを実行するために文字列のアドレスを使用する場合、攻撃者はスタックに別の文字列のアドレス、export PATH=.:$PATH
を置き、現在のディレクトリに新しい文字列の最初の文字の名前のスクリプトを作成することができます。これにより、バイナリによって実行されます。
以下に例を示します:
32ビット、スタック内のフラグ文字列のアドレスを変更して
puts
によって印刷されるようにします。
関数ポインタ
文字列ポインタと同様ですが、関数に適用されます。スタックに呼び出される関数のアドレスが含まれている場合、それを変更することが可能です(例:**system
**を呼び出すために)。
以下に例を示します:
参考文献
Last updated