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

可以看到这是一个64-bit的文件
在gdb里看一下vmmap

可以看到stack是可读可写可执行的,但是其他区域都是不可执行的
见文件拖入ida64,按F5将汇编代码转换成c语言代码,得到

可以看到存在gets(text)栈溢出,双击name

可以看到name在bss段,但是bss段是不可执行的,所以在name处写shellcode是行不通的
我们考虑用ret2libc的解题手法
返回虚拟机
ROPgadget --binary pwn --only "pop|ret"

得到pop_rdi_ret = 0x400713,ret_addr = 0x4004c9
nano exp.py 开始写攻击脚本

payload:调用puts函数,泄露puts@got里存储的puts函数的真实地址,进而得到system函数和'/bin/sh'的真实地址
payload2:构造system("/bin/sh"),获得shell
保存退出
python3 exp.py
0
cat flag

此题完