由于没有对 buffer 长度进行检查,导致写入的数据可以超过 buffer 容量,覆盖后续的数据

根据 buffer 的位置可以分为:

  • stack base (stack smashing)
  • data base
  • heap base

危险函数:gets, scanf, strcpy, sprintf, memcpy, strcat

保护机制(Linux 平台):

  • ASLR: 内存位置随机变化,主要是 stack, heap, library
  • DEP(NX): 可写的 segment 不可执行,可执行的 segment 不可写
  • PIE: 开启之后,data 和 code 也会跟着 ASLR 随机变化
  • StackGuard: function call 时在栈中插入一个随机数(canary), 如果 return 时检查到这个数被修改过就会终止程序
  • RELRO: 控制.got/.got.plt的写权限