网络安全笔记_缓冲区溢出

缓冲区溢出

缓冲区溢出攻击的原理

1、缓冲区溢出攻击模式:

  • 找到可利用的缓冲区溢出隐患
  • 注入恶意代码
  • 溢出缓冲区
  • 重定向到攻击程序
  • 执行攻击程序
  • 获得控制权
  • 任意地执行程序

2、进程在内存的布局:

代码段/文本段:用于放置程序的可执行代码(机器码)。

数据段:用于放置已初始化的全局变量和已初始化的局部静态变量。 已初始化且不为0。

BSS(Block Started by Symbol)段:用于放置未初始化的全局变量和未初始化的局部静态变量。

堆:用于动态分配内存。

堆栈段:用于存放函数的参数,返回地址,调用函数的栈基址以及局部非静态变量。

进程的环境变量和参数

缓冲区溢出可能发生的位置:栈、堆、数据段和BSS段。

3、被调函数栈布局:

函数调用堆栈的操作:

main栈帧:

  • 参数入栈,一般从右到左压栈。push
  • 返回地址的压栈。call function(返回地址压栈;跳转到function)。

function栈帧:

  • push ebp
  • 被调函数的局部变量分配内存空间。
  • 函数体执行
  • 执行完成,ret

潜在危害:

  • 改写返回地址
  • 改写调用函数栈的栈帧地址
  • 改写函数指针
  • 改写虚函数指针
  • 改写异常处理指针
  • 改写数据指针

4、缓冲区溢出的途径:

  • 内存拷贝。
  • 利用数组的最大下标和数组长度的差异产生。
  • 利用有符号整数与无符号整数的转换。
  • 恶意代码(注入)。exec(/bin/sh)
0%