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

本文详细解析了VS2010环境下GS安全保护机制的工作原理,包括其如何防止缓冲区溢出攻击,以及在特定条件下(如函数使用无保护关键字标记或缓冲区大小限制)的局限性。通过实例演示了如何启用GS保护,并展示了未受保护函数与受保护函数在IDA下的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验环境:

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
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值