PWN入门系列(2)ROP
基本ROP
在上一篇博客中我们介绍了在ELF文件经过checksec查看保护措施后,有一个叫做NX的保护措施,即数据执行保护,在此保护措施开启后,很难直接向栈或者堆上直接注入代码,所以攻击者得想办法绕过NX的保护机制,而ROP(Return Oriented Programming)就是主要的绕过措施,主要的思想是在栈缓冲溢出的基础上,利用程序中已经有的小片段,也被称作(gadgets)来改变某些寄存器或者变量的值,进而达到控制程序的执行流程。那么什么是gadgets呢?
gadgets
gadgets就是以ret结尾的指令序列,通过这些指令序列,我们可以改变地址的内容,方便进行控制程序。
ROP的攻击条件
- 程序存在溢出,并且可以控制返回地址。
可以找到满足条件的gadgets
来讲一个典型的例子:
ret2text
原理
ret2text 即控制程序执行程序本身已经有的代码(.text).也可以控制程序执行多段不相邻的程序(gadgets),这就是我们说的ROP
此时,代码返回的位置就很重要了。
例子
这个例子相信接触过PWN的师傅们都见过,是bamboofox师傅中介绍ROP用的例子,
现提供源程序