ret2text调试找栈溢出过程,注意看栈
尤其注意ni和si的区别,注意好进入函数的时机
mosen@ubuntu:~/Desktop$ gdb ret2text
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
pwndbg: loaded 196 commands. Type pwndbg [filter] for a list.
pwndbg: created $rebase, $ida gdb functions (can be used with print/break)
Reading symbols from ret2text...done.
pwndbg> b main
Breakpoint 1 at 0x804856b: file babystack.c, line 22.
pwndbg> r
Starting program: /home/mosen/Desktop/ret2text
Breakpoint 1, main () at babystack.c:22
22 babystack.c: No such file or directory.
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────────────
EAX 0xf7fb8dd8 (environ) —▸ 0xffffd29c —▸ 0xffffd458 ◂— 'CLUTTER_IM_MODULE=xim'
EBX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
ECX 0xffffd200 ◂— 0x1
EDX 0xffffd224 ◂— 0x0
EDI 0x0
ESI 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
EBP 0xffffd1e8 ◂— 0x0
ESP 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
EIP 0x804856b (main+26) —▸ 0xfff8838b ◂— 0xfff8838b
─────────────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────────────
► 0x804856b <main+26> mov eax, dword ptr [ebx - 8] <0xf7fb8dd8>
0x8048571 <main+32> mov eax, dword ptr [eax]
0x8048573 <main+34> sub esp, 8
0x8048576 <main+37> push 0
0x8048578 <main+39> push eax
0x8048579 <main+40> call setbuf@plt <setbuf@plt>
0x804857e <main+45> add esp, 0x10
0x8048581 <main+48> mov eax, dword ptr [ebx - 4]
0x8048587 <main+54> mov eax, dword ptr [eax]
0x8048589 <main+56> sub esp, 8
0x804858c <main+59> push 0
──────────────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
01:0004│ 0xffffd1e4 ◂— 0x0
02:0008│ ebp 0xffffd1e8 ◂— 0x0
03:000c│ 0xffffd1ec —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
04:0010│ 0xffffd1f0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
05:0014│ 0xffffd1f4 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
06:0018│ 0xffffd1f8 ◂— 0x0
07:001c│ 0xffffd1fc —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
────────────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────────────
► f 0 0x804856b main+26
f 1 0xf7df7f21 __libc_start_main+241
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg> n
23 in babystack.c
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────────────
*EAX 0xf7fb75c0 (_IO_2_1_stdin_) ◂— 0xfbad208b
EBX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
*ECX 0xf7fb7607 (_IO_2_1_stdin_+71) ◂— 0xfb889c00
*EDX 0xf7fb889c (_IO_stdfile_0_lock) ◂— 0x0
EDI 0x0
ESI 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
EBP 0xffffd1e8 ◂— 0x0
ESP 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
*EIP 0x8048581 (main+48) —▸ 0xfffc838b ◂— 0x0
─────────────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────────────
0x8048573 <main+34> sub esp, 8
0x8048576 <main+37> push 0
0x8048578 <main+39> push eax
0x8048579 <main+40> call setbuf@plt <setbuf@plt>
0x804857e <main+45> add esp, 0x10
► 0x8048581 <main+48> mov eax, dword ptr [ebx - 4] <0xf7fb75c0>
0x8048587 <main+54> mov eax, dword ptr [eax]
0x8048589 <main+56> sub esp, 8
0x804858c <main+59> push 0
0x804858e <main+61> push eax
0x804858f <main+62> call setbuf@plt <setbuf@plt>
──────────────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
01:0004│ 0xffffd1e4 ◂— 0x0
02:0008│ ebp 0xffffd1e8 ◂— 0x0
03:000c│ 0xffffd1ec —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
04:0010│ 0xffffd1f0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
05:0014│ 0xffffd1f4 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
06:0018│ 0xffffd1f8 ◂— 0x0
07:001c│ 0xffffd1fc —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
────────────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────────────
► f 0 0x8048581 main+48
f 1 0xf7df7f21 __libc_start_main+241
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg> n
24 in babystack.c
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────────────
*EAX 0xf7fb7d80 (_IO_2_1_stdout_) ◂— 0xfbad2087
EBX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
*ECX 0xf7fb7dc7 (_IO_2_1_stdout_+71) ◂— 0xfb889000
*EDX 0xf7fb8890 (_IO_stdfile_1_lock) ◂— 0x0
EDI 0x0
ESI 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
EBP 0xffffd1e8 ◂— 0x0
ESP 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
*EIP 0x8048597 (main+70) ◂— sub esp, 0xc
─────────────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────────────
► 0x8048597 <main+70> sub esp, 0xc
0x804859a <main+73> lea eax, [ebx - 0x1998]
0x80485a0 <main+79> push eax
0x80485a1 <main+80> call puts@plt <puts@plt>
0x80485a6 <main+85> add esp, 0x10
0x80485a9 <main+88> call vulnerable <vulnerable>
0x80485ae <main+93> sub esp, 0xc
0x80485b1 <main+96> lea eax, [ebx - 0x1974]
0x80485b7 <main+102> push eax
0x80485b8 <main+103> call puts@plt <puts@plt>
0x80485bd <main+108> add esp, 0x10
──────────────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
01:0004│ 0xffffd1e4 ◂— 0x0
02:0008│ ebp 0xffffd1e8 ◂— 0x0
03:000c│ 0xffffd1ec —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
04:0010│ 0xffffd1f0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
05:0014│ 0xffffd1f4 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
06:0018│ 0xffffd1f8 ◂— 0x0
07:001c│ 0xffffd1fc —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
────────────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────────────
► f 0 0x8048597 main+70
f 1 0xf7df7f21 __libc_start_main+241
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg>
Have you heard of buffer overflow?
25 in babystack.c
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────────────
*EAX 0x23
EBX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
ECX 0xf7fb7dc7 (_IO_2_1_stdout_+71) ◂— 0xfb88900a
EDX 0xf7fb8890 (_IO_stdfile_1_lock) ◂— 0x0
EDI 0x0
ESI 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
EBP 0xffffd1e8 ◂— 0x0
ESP 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
*EIP 0x80485a9 (main+88) —▸ 0xffff48e8 ◂— 0x0
─────────────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────────────
0x8048597 <main+70> sub esp, 0xc
0x804859a <main+73> lea eax, [ebx - 0x1998]
0x80485a0 <main+79> push eax
0x80485a1 <main+80> call puts@plt <puts@plt>
0x80485a6 <main+85> add esp, 0x10
► 0x80485a9 <main+88> call vulnerable <vulnerable>
0x80485ae <main+93> sub esp, 0xc
0x80485b1 <main+96> lea eax, [ebx - 0x1974]
0x80485b7 <main+102> push eax
0x80485b8 <main+103> call puts@plt <puts@plt>
0x80485bd <main+108> add esp, 0x10
──────────────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd1e0 —▸ 0xffffd200 ◂— 0x1
01:0004│ 0xffffd1e4 ◂— 0x0
02:0008│ ebp 0xffffd1e8 ◂— 0x0
03:000c│ 0xffffd1ec —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
04:0010│ 0xffffd1f0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
05:0014│ 0xffffd1f4 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
06:0018│ 0xffffd1f8 ◂— 0x0
07:001c│ 0xffffd1fc —▸ 0xf7df7f21 (__libc_start_main+241) ◂— add esp, 0x10
────────────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────────────
► f 0 0x80485a9 main+88
f 1 0xf7df7f21 __libc_start_main+241
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg> s
vulnerable () at babystack.c:12
12 in babystack.c
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────────────
*EAX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
EBX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
ECX 0xf7fb7dc7 (_IO_2_1_stdout_+71) ◂— 0xfb88900a
EDX 0xf7fb8890 (_IO_stdfile_1_lock) ◂— 0x0
EDI 0x0
ESI 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
*EBP 0xffffd1d8 —▸ 0xffffd1e8 ◂— 0x0
*ESP 0xffffd1c0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
*EIP 0x8048507 (vulnerable+17) ◂— sub esp, 0xc
─────────────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────────────
► 0x8048507 <vulnerable+17> sub esp, 0xc
0x804850a <vulnerable+20> lea edx, [ebp - 0x10]
0x804850d <vulnerable+23> push edx
0x804850e <vulnerable+24> mov ebx, eax
0x8048510 <vulnerable+26> call gets@plt <gets@plt>
0x8048515 <vulnerable+31> add esp, 0x10
0x8048518 <vulnerable+34> mov eax, 0
0x804851d <vulnerable+39> mov ebx, dword ptr [ebp - 4]
0x8048520 <vulnerable+42> leave
0x8048521 <vulnerable+43> ret
0x8048522 <get_shell> push ebp
──────────────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd1c0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
01:0004│ 0xffffd1c4 ◂— 0x0
02:0008│ 0xffffd1c8 —▸ 0xffffd1e8 ◂— 0x0
03:000c│ 0xffffd1cc —▸ 0x80485a6 (main+85) ◂— add esp, 0x10
04:0010│ 0xffffd1d0 —▸ 0x8048668 ◂— dec eax /* 'Have you heard of buffer overflow?' */
05:0014│ 0xffffd1d4 —▸ 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
06:0018│ ebp 0xffffd1d8 —▸ 0xffffd1e8 ◂— 0x0
07:001c│ 0xffffd1dc —▸ 0x80485ae (main+93) ◂— sub esp, 0xc
────────────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────────────
► f 0 0x8048507 vulnerable+17
f 1 0x80485ae main+93
f 2 0xf7df7f21 __libc_start_main+241
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg> n
aaaaaaaa
13 in babystack.c
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────────────
*EAX 0xffffd1c8 ◂— 'aaaaaaaa'
EBX 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
*ECX 0xf7fb75c0 (_IO_2_1_stdin_) ◂— 0xfbad208b
*EDX 0xf7fb889c (_IO_stdfile_0_lock) ◂— 0x0
EDI 0x0
ESI 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
EBP 0xffffd1d8 —▸ 0xffffd1e8 ◂— 0x0
ESP 0xffffd1c0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
*EIP 0x8048518 (vulnerable+34) ◂— mov eax, 0
─────────────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────────────
0x804850a <vulnerable+20> lea edx, [ebp - 0x10]
0x804850d <vulnerable+23> push edx
0x804850e <vulnerable+24> mov ebx, eax
0x8048510 <vulnerable+26> call gets@plt <gets@plt>
0x8048515 <vulnerable+31> add esp, 0x10
► 0x8048518 <vulnerable+34> mov eax, 0
0x804851d <vulnerable+39> mov ebx, dword ptr [ebp - 4]
0x8048520 <vulnerable+42> leave
0x8048521 <vulnerable+43> ret
↓
0x80485ae <main+93> sub esp, 0xc
0x80485b1 <main+96> lea eax, [ebx - 0x1974]
──────────────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────────────
00:0000│ esp 0xffffd1c0 —▸ 0xf7fb7000 (_GLOBAL_OFFSET_TABLE_) ◂— 0x1d7d8c
01:0004│ 0xffffd1c4 ◂— 0x0
02:0008│ eax 0xffffd1c8 ◂— 'aaaaaaaa'
03:000c│ 0xffffd1cc ◂— 'aaaa'
04:0010│ 0xffffd1d0 —▸ 0x8048600 (__libc_csu_init+32) ◂— dec dword ptr [ebp - 0xfb7d]
05:0014│ 0xffffd1d4 —▸ 0x804a000 (_GLOBAL_OFFSET_TABLE_) —▸ 0x8049f0c (_DYNAMIC) ◂— 0x1
06:0018│ ebp 0xffffd1d8 —▸ 0xffffd1e8 ◂— 0x0
07:001c│ 0xffffd1dc —▸ 0x80485ae (main+93) ◂— sub esp, 0xc
────────────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────────────
► f 0 0x8048518 vulnerable+34
f 1 0x80485ae main+93
f 2 0xf7df7f21 __libc_start_main+241
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg>