web-dev-qa-db-ja.com

シェルコードをどのプログラミング言語で書くかは重要ですか?

何度も検索しましたが、何も見つかりませんでした。私はまだ疑問に思います:どの言語でシェルコードを書くかは重要ですか?アセンブリ、Cなどのシェルコードは、使用できる場所であればどこでも機能し、他のシェルコードと同じように機能しますか?

3
Zlatomir Zhelev

「シェルコード」という用語は、マシンでシェルアクセスを取得するために通常使用されるという事実に由来します。ほとんどの場合、シェルコードは、攻撃者が実行または実行させられるメモリの一部に書き込むことができるメモリ破損ベースの脆弱性(たとえば、バッファオーバーフロー)がある場合に使用されます。これは、CPUによって直接実行されるため、マシンコードである必要があります。

多くの場合、バッファー内で使用できるスペースは限られているため、シェルコードは可能な限り短くなるように設計されることが多く、アセンブリで手動で記述され、エスケープされたバイトシーケンスにダンプされます(例: "\ x23\xa4\x00" )。 Cプログラムを記述してコンパイルし、上記のようにバイトをダンプすることは可能ですが、Cコンパイラは不要な複雑さを導入し、長さを追加する場合があります。通常、シェルコードは短く、より長いペイロードが必要な場合は、ネットワークから2番目のステージをプルダウンする可能性があります。

つまり、マシンコードが必要であり、このコードがCからのものか、アセンブリからのものかは問題ではありません。ただし、シェルコードの定義はやや緩く、解釈言語にも適用できます(たとえば、Pythonアプリケーションでeval()への無害化された呼び出しを利用してシェルを取得する)これらの場合、通常は選択された単語ではありません。

5
multithr3at3d