本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题
此处我将文件命名为bypwn
checksec bypwn 查看一下保护机制

可以看到这是一个64-bit的文件,什么保护也没开
将文件拖入ida64,按F5将汇编代码转换成c语言代码,得到

可以看到存在scanf栈溢出,需要填充0x50+8的垃圾数据至return address。我们可以将shellcode写在&v4的最开头,然后覆盖返回地址为我们写入shellcode的地址。
双击sub_4007F9,进入这个函数

可以看到让我们输入0x20字节的内容,然后打印出来。我们可以利用printf遇到'\x00'才会停止输出这个特点,输出rbp的地址,从而得到我们写入shellcode的地址(rbp-0x50)
返回虚拟机
nano exp.py 开始写攻击脚本

第一次发送用于接收rbp的地址,从而得到我们后续写入shellcode的地址
第二次发送shellcode,然后填充剩余垃圾数据至return address,覆盖返回地址为写入shellcode的地址,执行shellcode,获得shell
保存退出
python3 exp.py
cat flag

此题完