buffer overflow

Stack

常见的安全机制以及相关绕过方法

security cookies

编译的时候会在运行栈RET的上面加上一个随机的4字节数值(32位系统), 该值来自于(.data节的前四个字节,并通过一定的算法计算), 在函数运行栈前面会将该值与esp进行亦或并放置在栈中, 在函数返回前会对该值进行检查. 如果该值被修改将直接异常.
** 稳定利用主要思想是检查前利用(SEH, 虚表) **
Linux -fno-stack-protector

safeseh

在异常处理器被调用时, 会先检查, 若不满足条件则不会执行
检测方式(和操作系统以及编译器选项有关):

  1. 先获取栈的高地址和低地址, 通过查询TEB中的FS:[4]和FS:[8], 若指针指向该范围则不会执行.
  2. 检查是否在加载模块列表的某个模块的地址范围中, 继续检测 是否有”Load Configuration Directory”.
  3. 其余的有, 将SEH链复制一遍存储, 然后进行比较

DEP

使得栈区被覆盖的位置数据不允许执行, CPU的NX(无执行页-AMD), XD(不能执行-intel)
硬件DEP, 64位系统DEP总是开启, 不允许关闭(?)

ROP链

VirtualAlloc, VirtualProtect

ASLR

Windows

Linux使用 echo “0” > /proc/sys/kernel/randomize_va_space 关闭ASLR
/proc/sys/kernel/randomize_va_space:
0 关闭
1 开启
2 在1的基础上增加了heap随机化

Heap

常见的安全机制

freelists的保护
** 稳定利用可以借助快表(lookaside lists) **
lookaside攻击导致任意四字节写, 可以覆盖SEH, 然后执行一个除0异常导致利用

ASLR

** heap spray **

DEP

Linux NX:不可执行内存
** rop **

参考

http://blog.sina.com.cn/s/blog_702eef6501011v07.html

BuTags - a chrome plugin 内存对齐
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×