第6章 网络威胁.ppt

缓冲区溢出攻击原理——内存模型 在应用程序的一次动态执行过程中,内存分为三部分:文本区、数据区和堆栈区。 堆栈区 数据区 文本区 内存高址 内存低址 内存增长方向 由程序确定,包括代码和只读数据,该区域标记为只读 存放全局的、静态的数据,程序编译时分配 存放动态的数据,以及用于函数调用、返回等。 函数调用时缓冲区模型 程序运行时,操作系统会分配每个进程独立的地址空间,包括代码区、数据区和堆栈区。 缓冲区溢出攻击就是利用动态的堆栈区内容进行操作达到攻击的目的。 C程序中,每当调用函数时就会自动处理堆栈分配。 堆栈作用:保存有关当前函数调用上下文信息的容器。 被调用函数所需的参数入栈 指令寄存器EIP内容(指向下一条将要被执行的指令)入栈,作为函数返回的地址。 堆栈的基址寄存器EBP内容(指向当前堆栈底部)入栈 预留出函数的动态局部变量值空间 当实际输入局部变量的值长度超出缓冲区长度,而程序中又缺乏边界检查机制时,数据就会继续向栈底写入,导致栈中旧的数据被覆盖。 只要在程序运行时传送给它一个足够大的参数,就可以在返回地址中填入一个希望程序转到的任意内存地址,从而控制程序的运行权。 实际操作中存在两个问题: 攻击代码植入目标程序地址空间 改写返回地址为攻击代码地址以获得程序控制权 常见的缓冲区溢出攻击都是一次完成攻击代码植入和程序转向攻击代码两种功能。 缓冲区溢出攻击原理 缓冲

文档评论(0)

1亿VIP精品文档

相关文档