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

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

可以看到buf在rbp-0x60处,nbytes在rbp-0x8处,所以我们可以利用buf将nbytes的值更改成任意值(0x100),然后read(0,&v1,nbytes)栈溢出
返回虚拟机
ROPgadget --binary pwn --only "pop|ret"

得到pop_rdi_ret=0x400793,ret_addr=0x400509
nano exp.py

第一次payload:更改第二次输入的内容为0x100字节,让其可以发送栈溢出
第一次payload2:调用puts函数,泄露read@got里存储的read函数的真实地址,进而获得system函数和字符串'/bin/sh'的地址,并在最后返回sub_4006A9函数
第二次payload:同上
第二次payload2:构造system("/bin/sh"),获得shell
保存退出
python3 exp.py
7
cat flag

此题完