0day 第10章 --栈中的保护机制:GS

实验环境:

winxp sp3 、vs2010

实验要求:

vs编译时要求禁用优化、release版本

GS的保护原理

看图就明白了
在这里插入图片描述
在这里插入图片描述

在vs2010中可通过以下选项选择是否开启GS,默认开启:
在这里插入图片描述

GS保护的局限性:

(1) 函数不包含缓冲区

(2) 函数被定义为具有变量参数列表

(3) 函数使用无保护的关键字标记

(4) 函数在第一个语句中包含内嵌汇编代码

(5)缓冲区不是8字节类型且大小小于等于4个字节

针对(3)和(5)进行说明:

(3)通过添加 #pragma strict_gs_check(on) 可以对任意类型的函数添加Security Cookie,如:
在这里插入图片描述

(5)对上述不加关键字保护的程序进行编译运行,会出现内存访问冲突。其中0x75662065是“e fu”经过ASCII码转换后的值,说明返回地址已经被字符串覆盖了!
在这里插入图片描述
用IDA加载,观察到vulfunction函数在返回前果然没有Security Cookie
在这里插入图片描述
如果添加了关键字保护,编译运行直接弹出“缓冲区溢出”的框框
在这里插入图片描述
用IDA加载,观察到vulfunction函数在返回前添加了Security Cookie
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_15727809/article/details/83001048