Loading
2013. 8. 4. 16:28 - lazykuna

BOF Attack on gdb

0x0804854c <main+0>:    push   %ebp

0x0804854d <main+1>:    mov    %esp,%ebp

0x0804854f <main+3>:    sub    $0x40,%esp

0x08048552 <main+6>:    movl   $0x32,0x8(%esp)

0x0804855a <main+14>:   movl   $0x0,0x4(%esp)

0x08048562 <main+22>:   lea    -0x32(%ebp),%eax

0x08048565 <main+25>:   mov    %eax,(%esp)

0x08048568 <main+28>:   call   0x80483c8 <memset@plt>

0x0804856d <main+33>:   movl   $0x804869f,(%esp)

0x08048574 <main+40>:   call   0x8048438 <puts@plt>

0x08048579 <main+45>:   lea    -0x32(%ebp),%eax

0x0804857c <main+48>:   mov    %eax,0x4(%esp)

0x08048580 <main+52>:   movl   $0x80486b2,(%esp)

0x08048587 <main+59>:   call   0x80483f8 <scanf@plt>

0x0804858c <main+64>:   lea    -0x32(%ebp),%eax

0x0804858f <main+67>:   mov    %eax,(%esp)

0x08048592 <main+70>:   call   0x8048408 <strlen@plt>

0x08048597 <main+75>:   cmp    $0x31,%eax

0x0804859a <main+78>:   jbe    0x80485b4 <main+104>

0x0804859c <main+80>:   movl   $0x80486b5,(%esp)

0x080485a3 <main+87>:   call   0x8048438 <puts@plt>

0x080485a8 <main+92>:   movl   $0x0,(%esp)

0x080485af <main+99>:   call   0x8048448 <exit@plt>

0x080485b4 <main+104>:  lea    -0x32(%ebp),%eax

0x080485b7 <main+107>:  mov    %eax,0x4(%esp)

0x080485bb <main+111>:  movl   $0x80486cb,(%esp)

0x080485c2 <main+118>:  call   0x8048418 <printf@plt>

0x080485c7 <main+123>:  mov    $0x0,%eax

0x080485cc <main+128>:  leave

0x080485cd <main+129>:  ret



요즘 가디언 문제 좀 풀겠다고 공부는 하는데 진전은 별로 없고...

시스템해킹이 슬슬 바이너리랑 엮이니 어렵다. scanf의 매개변수를 push가 아니라 mov로 주고 있는데 그것도 나에겐 혼동스러워...

일단 %ebp가 현재 스택의 주소이고 %esp는 스택 여유분만큼 빼놓은 주소정도 되는 것 같다

함수 시작할때 push %ebp로 old_ebp addr을 저장하..는게 맞나?


즉 그러니까 자신이 %esp 혹은 %ebp에 대한 어떤 함수의 주소를 알고 있을때 %ebp(스택프레임 끝)까지의 거리+4(old_ebp) 이후의 4 byte가 ret address 인 듯 하다.