ret2shellcode是指攻击者需要自己将调用shell的机器码(也称shellcode)注入至内存中,随后利用栈溢出复写return_address,进而使程序跳转至shellcode所在内存。
1.向stack段中注入shellcode
能向栈中注入shellcode的情况非常少见,这是因为目前的操作系统及程序一般都会开启对栈的保护。比较常见的保护手段有:
2.向bss段中注入shellcode
在虚拟内存中,bss段主要保存的是没有初值的全局变量或静态变量(在汇编语言中通过占位符?声明)。若某个程序的bss段可写且可执行,攻击者就可以尝试将shellcode注入写入全局变量或静态变量中。
3.向data段中注入shellcode
在虚拟内存中,data段主要保存的是已经初始化了的全局变量或静态变量。其攻击思路与向bss段中注入shellcode非常类似。
4.向heap段中注入shellcode
heap段主要保存的是通过动态内存分配产生的变量。若某个程序的heap段可写且可执行,攻击者就可以尝试将shellcode注入至动态分配的变量中。
注:上述攻击手段的总结很可能不全面甚至不正确,仅供参考!
以ctfwiki中的附件为例


shift+f12无后门函数或字符串,先看一下main