BUUCTF-PWN-warmup_csaw_2016
首先查保护–>看链接类型–>赋予程序可执行权限–>试运行
64位程序,小端序
开启部分RELRO-----got表可写
未开启canary保护-----可能存在栈溢出
未开启NX保护-----堆栈可执行
未开启PIE-----程序地址为真实地址
RWX----有可读可写可执行段
动态链接
程序运行后告诉我们一个地址0x40060d
ida一下看一下伪代码
主函数里有一个sprintf注意一下
sprintf(&s, "%p\n", sub_40060D);
这个函数意思是先把sub_40060D的地址放入缓冲区&s处,之后再把sub_40060D的地址打印出来。
接着往下看return处的gets函数,未限制输入v5的大小,可能存在栈溢出
看一下栈区
这里的var_40就是v5的位置,距离返回地址(r所在位置)0x48(0x40+0x8)字节。
再查看一下有没有后门函数
根据题目给我们提示的地址0x40060d,看一下这是哪
后门函数,调用即可获得flag
exp
from pwn import *
p = remote("node4.buuoj.cn",27746)
p.sendline(b'a' * 0x48 + p64(0x40060D))
p.interactive()
运行获得flag