web-dev-qa-db-ja.com

情報漏えいを使用してASLRをバイパスする

私の質問のほとんどはこの投稿で回答されました ASLRバイパスと情報リーク

ただし、情報漏えいからメモリアドレスを取得し、それを最終的な悪用に使用するプロセスを知りたいだけです。

私には、2つのステップからなるプロセスがあるようです。

  1. 最初のエクスプロイトを使用して最初の脆弱性をターゲットにし、メモリアドレスを取得します(画面に出力されますか?他の方法は何ですか?)

  2. "コピーアンドペースト"?必要なオフセットを計算し、2番目の脆弱性をターゲットとする2番目のエクスプロイトを送信する2番目のエクスプロイトへのアドレス。これはすべて、ターゲットプロセスがまだ実行されている間(ステップ1から)です。

したがって、手順1から手順2にメモリアドレスを渡すには、手動または自動の方法が必要です。

私がよく理解していない部分は、ステップ1からどのようにして情報をステップ2に渡すかです。

2
localacct

はい、それは確かに2段階のプロセスです。つまり、ターゲットプロセスは実際に、複数のステップでプロセスと対話するための手段を提供する必要があります。基本的なエクスプロイトの演習は、多くの場合、相互作用に関してあまり提供されないという点で制限されますが、実際のターゲットは、ほとんどの場合、セッションを確立したりメッセージを交換したりする手段を提供します。たとえば、ターゲットがWebサーバーの場合、偽のリクエストを送信してスタックのダンプをリークする可能性があります。次に、別のリクエストで、いくつかの書き込みプリミティブを利用してコードを実行できます。他の典型的な例としては、JavaScriptからのブラウザへの攻撃、またはユーザー空間からのカーネルへの攻撃があります。これらの場合、情報を漏らす(プログラムから読み取ることができるいくつかのメモリ位置に書き込まれる可能性がある)ために、基盤となるプラットフォームへのサービス呼び出しを実行する一般的な(または一般的ではない)プログラムをコーディングし、最終的にいくつかの書き込みプリミティブを利用しますコードを実行したり、達成したいことは何でも。

一般に、情報漏えいはいかなる形をとることもできます。サーバーと通信できるチャネルを使用すると、情報が漏洩する可能性があります。ちょうどランダムな例:docファイルを取得してpdfを作成するpdf生成サービスを想像してみてください。生成されたpdfにヒープまたはスタックメモリのチャンクをサービスにダンプさせる偽のdocファイルを提供し、それをダウンロードして、エクスプロイトを完了する2番目のdocを提供することができます。

一般に、ステップ1からステップ2に進む方法は、ターゲットシステムと悪用される脆弱性の種類に大きく依存します。多くの場合、2ステップ以上の方法があるため、自動化は悪い考えではありません。自動化が実際にオプションである場合、ステップを順番に実行するスクリプトを作成することができます。 Webサーバーの例に戻ると、PythonまたはRubyスクリプトで最初のリクエストを送信し、レスポンスを読み取り、関連情報を抽出し、2番目のリクエストを準備する必要に応じてコンピューティングアドレスをリクエストし、最終的なリクエストをサーバーに送信して悪用を終了します。

2
user25972