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

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

可以看到mmap了一块可写可执行的内存,我们可以将shellcode写在这块区域
双击sub_400A16(),进入函数

可以看到存在read(0,&buf,0x38)栈溢出,但只能溢出0x18字节。(一开始想到的是栈迁移,但是行不通)
返回虚拟机

可以看到开了沙盒保护,只能使用read,write,open函数,考虑orw
ROPgadget --binary pwn --only "jmp"

可以看到有jmp_rsp=0x400a01
开始写攻击脚本

payload1:写入shellcraft.read,在最后利用jmp_rsp执行"sub rsp,0x30;jmp rsp",返回到payload1开头,调用read函数;"mov rax,0x12300;jmp rax"用于执行之后写在mmap地址上的shellcode
payload2:orw
保存退出
paython3 exp.py

获得flag
此题完