标签:
ret2libc是绕过DEP的一个思路,顾名思义是利用系统中已经存在的系统函数来构造对DEP的攻击,思路大概有三种,通过ZwSetInformationProcess函数将DEP关闭、通过VirtualProtect函数将shellcode所在内存设为可执行、通过VirtualAlloc函数开辟具有执行权限的空间。
format string利用基本上是为了达到一个内存任意写的目的,利用printf函数不定参数个数的参数寻址方式的漏洞,以及转换指示符%n。
举一个简单例子,说明ROP构造Gadget过程,栈空间形式化表示如下:
Gadget构造过程描述:
假设攻击者打算将V1值写入V2所指向的内存空间,即Memory[V2] = V1;攻击者控制了栈空间,能够构造栈空间布局;攻击者采用间接方式,寻找等效指令实现,通过寻找Gadget指令实现;
Gadget执行过程描述:
1) 初始时,栈顶指针为ESP,所指向内容为V1,EIP=a1。2) POP操作,ESP值加4,POP相当于内存传送指令。3) POP和MOV指令执行完,CPU会继续向下顺序执行。4) RET相当于POP+JMP,所以RET操作,ESP值也会加4。
ROP利用Gadget图形示意(摘自国外一份ppt):
标签:
原文地址:http://www.cnblogs.com/windcarp/p/4394896.html