シェルコードは、攻撃者がマシンを制御できるコマンドシェルを作成するために使用される脆弱性を悪用するときに使用されるペイロードです。
実行時の一般的なシェルコードは、ネットワーク接続を開き、cmd.exe
Windowsマシン(または/bin/sh
Linux / UNIX)の配管stdin
とstdout
ネットワーク接続を介して生成される場合があります。攻撃者は自分のマシンから接続を完了してコマンドを入力し、侵入先のマシンに座っているかのようにフィードバックを得る可能性があります。
バッファオーバーフローはシェルコードではありません。シェルコードを実行するために悪用されるのは脆弱性です。
バッファオーバーフローは、シェルコードをユーザーのマシンにコピーし、プログラムのスタック上のリターンアドレスを上書きするために利用されます。現在実行中の関数が戻ると、プロセッサはアップロードされたシェルコードにジャンプし、攻撃者のシェルを作成します。
バッファオーバーフローの悪用の詳細については、Smashing the Stack for FunandProfitを参照してください。
-fno-stack-protector
フラグを使用してみることができますがgcc
、私はOSXやOSXが使用する可能性のあるスタック保護についてはあまり詳しくありません。
バッファオーバーフローを試してみたい場合は、最新のコンパイラと最新のOSには、これを困難にする保護機能があります。最善の策は、Linuxディストリビューションを入手して、それらをオフにすることです。これらの保護を無効にする方法の詳細については、この質問を参照してください。
シェルコードを実行するためにバッファオーバーフローを行う必要はないことに注意してください。コマンドインジェクションエクスプロイトを使用してリモートシェルを開き、バッチファイルをアップロードして実行する方法を示しました。