无 | 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入口地址的程序 | |