web-dev-qa-db-ja.com

バッファオーバーフローエクスプロイトはgdbで動作しますが、動作しません

バッファオーバーフローについて学習していて、最初のエクスプロイトを開発しています。

ソケットをリスンし、クライアントごとに新しいプロセスをフォークするサーバープロセスがあります。子プロセスには、私が利用しているバッファオーバーフローの脆弱性があります。

私のエクスプロイトは、gdbを使用してサーバーを起動すると機能しますが、gdbを使用せずに単にサーバーを起動すると、エクスプロイトコードを実行するとsegfaultが発生します。

私の質問は-gdbはaslr/stack保護などのいくつかの保護メカニズムを自動的に無効にしますか?この行動の考えられる説明は何でしょうか?

-zexecstack -fno-stack-protectorを使用してサーバーをコンパイルしましたが、それでもgdbがないとサーバーを活用できません。

これは、debian x86上にあります。サーバーをgdbで実行するということは、「gdbサーバー」を実行してから、gdbコンソールで「run」と入力するだけで、ブレークポイントなどは何もないことを意味します。このように私のエクスプロイトは成功します(私のサーバーにcurlリクエストを出します)

6
Andrei Socaciu

GDBはデバッグフックを使用します+デバッグシンボルを使用してそれらを処理することを目的としており、実際の動作を変更します。だから-いくつかのアーティファクトが確実に現れることは明らかです

1
Alexey Vesnin

codeblog ごと:

Kardb(Ubuntu 9.10)を搭載したUbuntuで最初に登場したGDBバージョン7以降、デバッグされたプロセスのASLRは(ADDR_NO_RANDOMIZEパーソナリティフラグを介して)オフになっています。プロセスがメモリにどのように表示されるかについてより現実的なビューが必要な場合は、gdbで「無効化ランダム化をオフに設定」する必要があります。

0
Neil Smithline