0

私は割り当て用のプログラムを与えられ、その上でバッファ オーバーフローを行うように言われました。私の教授は、私たちが取り組んでいる VM をスタック上でシェルコードを実行するように構成しているので、必要なのはシェルコードの開始をリターン アドレスに配置することだけです。オーバーフローしようとしているバッファはs1[64]. s1プログラムで後で使用されるため、有効なファイル名である必要があり、無効なexit(1)場合はプログラムが実行されます。s1この形式で入力を入力する 必要があると想定しています: validFileName+fileNameTerminator+Filler+Shellcode.

S1を使用してコマンドラインから読み込まれscanf(%s,s1)ます。私が抱えている問題は、有効なファイル名とフィラーとシェルコードの開始の間に何を配置することを選択しても、プログラムは入力全体がファイル名であると見なし、それを開くことができないということです。短いファイル名と 63 および 64 の長さのファイル名を試してみましたが、すべて同じ結果が得られました。例:バッファ全体を埋めるのに十分な長さであり、その後にnullターミネータが続くため 、値が期待されるように入力s1を与えるとします。問題は、印刷すると、入力全体が null ターミネータを見ていないかのように印刷され、明らかに指定された範囲の外を見ていることです。その巨大なものは明らかに有効なファイル名ではないため、これによりプログラムが失敗します。/./././././././././././././././././././././././testFile1GCL.txt\0AAAAAAAA\xeb\x18\x5e\x31\xc0\x88\x46\x07\x89\x76\x08\x89\x46\x0c\xb0\x0b\x8d\x1e\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68s1/./././././././././././././././././././././././testFile1GCL.txts1

ファイル名と残りのペイロードの間に配置するために考えられるほとんどすべてを試しました\\0 \0 0x0 0x90. 何があっても、プログラムは常にs1長い入力全体であると考えて失敗します。ターミネーターを認識していなくても、なぜ に割り当てられた 64 文字の外を見ているのs1でしょうか?

編集:ファイル名と残りのペイロードの間にスペースを入れてみましたが、これによりファイルが終了しなくなりましたが、これは scanf がスペースで停止し、残りのペイロードを読み取っていないためです。

4

1 に答える 1

0

のようなファイルを作成してみてください/tmp/{shellcode here}。FS が、選択したシェルコードの一部のバイトを含む名前のファイルをサポートしていない場合でも、試してみる必要のあるファイルはたくさんあります。

シェルコードを環境変数に入れることもできます。

于 2015-03-11T17:09:40.403 に答える