保护机制 方法 步骤 无 shellcode NX ret2libc old 32libc地址覆盖返回地址,参数紧随其后 modern 32 控制ecx来指向libc地址存放的内存单元 modern 64 rop寻找execv("/bin/sh", 0 ,0) 片段 需要setuid(0) 使用gets函数设置指定内存为0,通过寻找pop ret片段形成libc链,最后调用setuid和system等函数 mprotect或memcpy使栈重新可执行,然后加入shellcode 传入0,通过gets覆盖指定内存为0,(教程上查看mprotect内部将参数放在了寄存器中,找pop 寄存器片段,然后inc/dec 寄存器片段,最后完成mprotect的调用) 遭遇可写和可执行不可同时出现,我们用mprotect(xx,xx,7)设置rwx权限就会失败 ASRL bruteforce 32位比64位更容易破解,只有几位发生变化 通过write泄露libc起始地址,多次调用程序vuln_function,通过偏移量不随机化计算system等函数地址,然后调用 return2plt,plt中偏移不会发生变化,适用于存在<system@plt>提供plt入口地址的程序 import xxx