Shellcode可以放到bss段然后去执行我们的shell可以控制好几段位置不相邻的代码(gadgets),用rop技术
随着nx保护技术的开启,往堆栈写代码的方式已经发挥不了效果
Rop:Return-oriented Programming(面向返回的编程)
在缓冲区溢出的基础上利用程序已有的小片段,来改变我们程序寄存器变量的值,从而达到控制程序执行流程的效果
所以gadgets是以ret结尾的指令序列,通过这些序列我们可以修改某些地址内容,控制流程
但是gadgets的地址不是固定的,所以我们每次都要想办法获取动态的地址
实验:
Checksec: nx开启了
Disass main
调用的setbuf是优化内存ro的,就是我们有大量内存读写的时候,他会优化你内存的ro读写
Rop两点要求:溢出;能控制返回地址
Gets不控制溢出