web-dev-qa-db-ja.com

NXビットはNOPスライドでsegfaultを引き起こしますか?

大学の宿題をしています。

リモートサーバーでシェルを実行する必要があります。 NXビットが設定されていないと言われていますが、挿入されたコードにリダイレクトすると、サーバーにセグメンテーションエラーが発生します。この場合、実際にはビットが設定されていると思いますか?挿入されたコードは、NOPのロードと、それに続くバッファー内のシェルコードです。 EIPを上書きして、バッファーの先頭近く(NOPスライド内)にリダイレクトしますが、すぐにセグメントエラーが発生します。

助けてくれてありがとう!

5
Richard

一度に1つの命令をステップ実行していて、ジャンプするとすぐにsegfaultが発生します(NOPスレッドの最後で壊れている可能性のあるシェルコードにヒットしたときではなく、segfaultも発生する可能性があります)。アドレスが正しいです。有効なメモリを指し、NOPスレッド自体は破損していないことを意味します。そうであれば、segfaultがDEPによって引き起こされている可能性があります。

ただし、上に挙げた他のことは私の考えではより可能性が高く、segfaultがポップアップする理由は他にもたくさんあります。


ちょうどあなたがgdbですべてを正しく持っていると確信しています。

破損したreturn命令の直前にブレークポイントが必要です。これは、disasおよびbreakコマンドを使用して行うことができます。

プログラムがブレークポイントに到達したら、土地の状態を確認します。 info rコマンドでeipを確認します。 x/40x $espなどを使用してスタックを確認してください。その後、nopスレッド、シェルコード、および返信アドレスを繰り返し表示できるはずです。頭に浮かんだもう1つのメモ。戻りアドレスは適切に調整する必要があります。これは通常、1〜3 nops afterシェルコードを挿入して、適切な位置に配置することを意味します。

問題がなければ、stepを実行します。 info reipにnopスレッド上のアドレスが含まれていると報告した場合、x %eipでこれを確認すると、0x90909090が表示されます。次にstepをもう一度押します。 Ifこの時点でsegfaultが表示され、はい(元の質問に答えるために:P)DEPを有効にしています。

それがあなたがすでに知っているものすべてである場合は申し訳ありませんが、メモリエクスプロイトで遊んでいるときにすべてを数回チェックすることは非常に重要です。

8
lynks