この 2 種類の攻撃の正確な違いを理解したいと思います。私が読んだことから:
バッファ オーバーフロー: スタック上の ret アドレスを上書きして、悪意のあるコードが挿入されているコードの別のセクションを指します。つまり、実際に攻撃を実行するには、プログラムのソース コードを変更する必要があります。
Libc に戻ります。ここでは、ソース コードを変更する代わりに、C ライブラリによって提供されるランタイム関数呼び出しが使用されます (つまり、シェルを開きます)。ここで、関数呼び出しに使用されるパラメーターも上書きバッファーに渡され、スタックの ret 部分の後に終わります。
上記は正確な説明ですか?
関連するもう 1 つの質問 - 元のプログラムのソース コードを実際に変更することなく、バッファ オーバーフロー攻撃を実行することは可能でしょうか? おそらく、新しいプログラムを作成し、メモリの特定のセクション (元のプログラムの破損したスタック内の新しい ret アドレス) を変更できるようにする場合です。繰り返しになりますが、カーネル内のプロセス間で提供されるメモリ保護のために、これは不可能かもしれないと思います。