web-dev-qa-db-ja.com

言語Bでプログラムされたスクリプトでプログラミング言語Aからシェルコードを実行することは可能ですか?

紛らわしいタイトルについて申し訳ありませんが、私が求めているのはこれです:Java)でプログラムされたバッファオーバーフロースクリプトでC(または他のプログラミング言語)からシェルコードを実行できますか? (または他のプログラミング言語)?

1
Jon .C

紛らわしい質問に対する簡単な答えは「はい」です。

バッファオーバーフロー攻撃にはいくつかの手順があります。配信フェーズ(脆弱性の配信)、エクスプロイトインジェクション(命令ポインターの制御の取得)、エクスプロイトの実行(命令ポインターに攻撃者のコードを実行させる)、およびシェルコード(攻撃者が実行したいペイロード)があります。

エクスプロイトを提供することは非常に簡単です。攻撃者は、習熟している言語で配信コードを記述します。言語はオーバーフローの時点で特定のバイト値をバッファに配信できる必要があるため、配信コードがどの言語で記述されているかは関係ありません。言語が異なれば、バイト値の表現方法も異なります。最近の多くの攻撃は、正確なバイト値を完全に指定できるテキスト文字列であるURLで配信されます。バーコード内で攻撃が行われるのを見たことがあります。これは巧妙ですが、それでも些細なことです。

エクスプロイトインジェクションステップでは、ほとんどの場合、被害者のマシンのバイナリマシン言語を利用して脆弱性を悪用します。攻撃者は、バッファを含む関数が戻るときに、攻撃者のバイトを、そこにあるはずのバイトではなく、命令ポインタにロードするように、特定のバイトを適切なポイントでバッファにロードする方法を見つけます。

攻撃者が命令ポインタを制御できるようになったら、悪用コードを指すようにIPを設定し、それを実行する必要があります。これは簡単な場合もあれば、難しい場合もありますが、事実上不可能な場合もあります。これはすべて、脆弱性を分析してエクスプロイトを成功させるための一部です。ここでの目標は、被害者のマシンにシェルコードを起動させることです。

エクスプロイトが攻撃者のシェルコードを起動すると、残りは履歴になります。シェルコードは、それが実行されているマシンに固有です。攻撃される元のバッファには通常サイズの制約があるため、ほとんどの場合、アセンブラで手書きされたバイナリマシン命令にも含まれます。バッファオーバーフローの脆弱性は、攻撃者がシェルコードの大きなペイロードを一度に配信するために無限のサイズのバッファが利用可能であることを自動的に意味するわけではありません。

シェルコードが実行されると、攻撃者はマシンをpwnし、好きなように制御できます。最初に、彼はシェルコードに被害者のマシンに存在するネイティブコマンドシェルを公開させることがよくあります。それはbash、Windowsコマンドシェル、PowerShellである可能性があります。その他の可能性には、マルウェアエージェントのダウンロードと実行が含まれます。リモート管理操作を可能にします。これらの感染したマシンの一般的な名前は、「ボット」または「ゾンビ」です。これらは、ボットネットで数千台のマシンを操作するために設計されたカスタムコマンドアンドコントロール言語で実行されます。シェルコードが実行されると、攻撃者は悪意のあるコマンドを実行するためにさらにコードを自由にダウンロードできます。

すべてのエクスプロイト言語は、攻撃が最初に配信された言語とは完全に無関係であることに注意してください。

2
John Deters