バッファオーバーフローとは何か、そしてメモリオーバーフローを許可できない場所に書き込むことができることを理解できます。また、メモリ内に必要なものを配置できるようにするいくつかの異なる方法で機能する他のソフトウェアの脆弱性が存在する可能性があるという概念も把握できます。私はまた、メタスプロイトを使用して私の古いいくつかのXPマシンにアクセスすることもできました。これは楽しいことでした。
しかし、たとえばバッファオーバーフローの脆弱性を念頭に置いてリモートシステムにアクセスする方法を完全に理解することはできません。
私にははっきりしない点がいくつかあります:
誰かがポート全体をリッスンするプログラムから攻撃者がシェルを獲得するまで、システム全体がどのように機能するかを示すシンプルでありながら現実的で完全な例を教えてもらえますか?
脆弱なプログラムは、ネットワーク経由で直接アクセスするために、ポートをリッスンする必要があります。ただし、他の方法でシステムにアクセスし、ネットワークにアクセスしない脆弱なプログラム(PDFリーダー)の脆弱性を引き起こすメールマルウェアなど)を悪用することもできます。
脆弱なプログラムが予想通りに動作する方法を知ることは、脆弱性を見つけて悪用するための鍵です。つまり、エクスプロイトを送信する前に、スタックで何が発生するかを知っておく必要があります。だからこそ、すべてのプログラミングと同様に、テスト、テスト、テストです。
BOを理解していれば、ポインターが実行を指示する場所でスタックに書き込むことがわかります。これがコードを実行する方法です。
私の#1と同様に、脆弱なプログラムはポートで実行されているネットワークサービスである必要はありません。 「リバースシェル」が必要な場合は、シェルのコードに、接続に必要なネットワークコードを含める必要があります。
はい、そうです。別のプロセスに移行しない場合(実行中のプロセスに埋め込むか、コードによってトリガーされる新しいプロセスのいずれか)、脆弱なプログラムが終了すると接続も終了します。したがって、移行します。
私の答えはあなたの質問の非常に単純化した見解です。私が提供したこと、そして私が言ったことと矛盾するテクニックでさえ、Digを深く掘り下げるためにできることがたくさんありますが、これらは非常に基本です。
単純化したシナリオ:
脆弱なFTPサーバーがポートで実行されています。特定のFTPコマンドが適切に制約されていないことが判明したため、過度に大きなコマンド引数を送信し、FTPサーバーがアクセスするスタックの一部に書き込むことが可能です。 FTPプログラムが占有するスタックスペースに適合するコード(ネットワーク機能を含む)を設計します。次に、FTPサーバーに接続し、シェルコードをペイロードとしてコマンドを送信します。 FTPサーバーがコマンドを処理すると、コードにヒットしてペイロードが処理されます。シェルコードが実行され、マシンへのネットワーク接続が作成されます。
バッファオーバーフローにより、攻撃者は、関数から戻るときにアプリケーションが使用するスタック上の格納アドレスを上書きできます。攻撃者がこのアドレスを制御すると、アプリケーションまたは使用するライブラリの別の部分に戻ることにより、プログラムの実行をそらすことができます。
最も単純な形式では、攻撃者はアドレスの上書きを超えてシェルコードをスタックに書き込むことができ、戻りアドレスをjmp esp
命令に設定します。これにより、スタックにeipをポイントし、スタックとしてデータをコードとして実行します。
シェルコードは、送信接続を確立したり、ポートでリッスンしたりできます。
リモートの悪用という用語は、ブラウザなどのデーモンプログラムや、開始プログラムの脆弱性を悪用するファイルを誰かにメールで送信しない場合によく適用されます。つまり、PDFファイル)。