過去に、ユーザー レベルのプロセスに対してバッファ オーバーフローの悪用を行ったことがあります。ただし、脆弱なカーネル モジュールのバッファをオーバーフローさせようとすると、うまくいかないようです。これが私がすることです:
ファイルとして開いて読み書きできる脆弱なカーネル モジュールがあります。書き込み操作は境界チェックなしで行われます。そのため、書き込み操作を実行してバッファをオーバーフローさせ、シェルコードを持つ環境変数のアドレスとして戻りアドレスを上書きします。しかし、何かがうまくいかない。カーネルがクラッシュし、再起動後に /var/log/messages を開くと、eip が上書きしたアドレスを正しく指していることがわかりました。しかし、それでも「仮想アドレスでカーネル null ポインターの逆参照を処理できません」と言ってクラッシュします。これが発生する理由は何ですか? コントロールが上書きされたリターン アドレスにリダイレクトされないのはなぜですか?
注: exec-shield と ASLR をオフにして、Redhat Enterprise Linux でこれを実行しました。