2

そのため、割り当てのためにバッファオーバーフローを行わなければならず、非常に近いと感じています。シェルコードをスタックの戻りアドレスに入れることができれば、スタック上で実行される VM を先生がセットアップしてくれました。バッファなどにループバックする必要はありません。シェルコードを上書きして入れたいレジスタはeip. ここから情報を得ましたhttps://greyhat.gatech.edu/wiki/index.php?title=Stack_Buffer_Overflow

バッファーs1[64]を 72 文字でいっぱいにすると、セグ フォールトが発生する可能性があることProgram received signal SIGSEGV, Segmentation fault. 0x00000000 in ?? ()がわかりました。

 ebx            0xb7fc8000       -1208188928
 esp            0xbffff600       0xbffff600
 ebp            0x0      0x0     
 esi            0x0      0
 edi            0x80484c0        134513856
 eip            0x0      0x0     <------ Clearly i've messed up eip

バッファーを 1 つ少ない文字 (別名 71) で満たすと、プログラムは正常に実行されるので、72 はどういうわけか魔法の数字でなければならないと感じています。s1そのため、72 個のフィラー文字とそれに続くシェルコードを入力しようとしました。今回は別の segfault が発生します。

Program received signal SIGSEGV, Segmentation fault. 0x080486f5 in main () at badcopyTester2.c:61 そしてgdbはeip0x080486f5なぜ/どのようにしeipてこの値を取得したのですか? そこに私のシェルコードがあってはいけませんか?また、72 個のフィラー文字の最後に何を入れても、eip常に同じ0x080486f5. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA との両方の入力

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\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\x68まったく同じセグメントフォールトを与えます。

eip繰り返しになりますが、クリアする方法を見つけたので、非常に近づいているように感じますが、それを超えて立ち往生しています. ご協力いただきありがとうございます!

4

0 に答える 0