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

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

双击sub_4008C7(),进入sub_4008C7函数

可以看到这是一个菜单,当我们选择v3=2会进入echo()函数,我们做题只需要用到这个选项
双击echo(),进入echo()函数

echo \"%s\" -> echo "%s"
【\" → 转换成字符 "(在 C 里,双引号 " 是用来标记字符串开头结尾的,你不能直接写 " 放在字符串里面。 想在字符串内部输出一个双引号字符,必须转义:\")】
如果没有双引号我们只需要输入;/bin/sh(;是命令分隔符)
但是由于双引号的存在,";"会失去它的意义,所以我们先写一个 " 闭合前面的双引号,逃出引号
返回虚拟机
nano exp.py

先发送我们的选择'2',然后发送'";/bin/sh',构造system("/bin/sh"),获得shell
保存退出
python3 exp.py
cat flag

此题完