缓冲区溢出GS

方便大家学习与共同进步


1、VS默认缓冲区溢出保护
VS缓冲区
VS时默认开启GS缓冲区溢出保护,我们可以关闭后来调试程序,查看缓冲区溢出保护的实现。


2、简单的示例代码

#include <stdio.h>
void test()
{
    char name[20];
    printf("请输入你的名字:");
    scanf("%s", name);
    printf("你的名字:%s\n", name);
}
int main()
{
    test();
    return 0;
}

3、缓冲区溢出原理
(1)未开GS缓冲区溢出检查的汇编(test函数段)
未开GS

(2)开了GS缓冲区溢出检查的汇编(test函数段)
开GS

(3)实现GS缓冲区检查的汇编解释
sub esp,0x18;开辟一部分的局部内存,用于局部变量。但是我们程序里面的局部变量为20字节为0x14,则 0x18-0x14=0x4多出来的4个字节,将用于GS缓冲区溢出检测。
mov eax,dword ptr ds:[0x1113004];将一个安全cookie保存到EAX寄存器,用于随机检查
xor eax,ebp;EAX(保存的cookie)与栈顶指针(EBP)进行异或xor运算(加密),将运算结果保存到EAX
mov [local.1],eax;local.1具体汇编代码为mov dword ptr ss:[ebp-0x4],意思是将EAX寄存器的值(cookie进行异或加密的值)存放在EBP-0x4的地址处,存放值的四个字节就是我们前面提到的多申请出来的0x4。

mov ecx,[local.1];取出[local.1]存放的用于GS检查的值存放到ECX寄存器中
add esp,0x14;ESP+=14后,当前的ESP对应的值就是前面(函数入口)动态计算出来用于GS检查的值(cookie进行异或加密的值)
xor ecx,ebp;ECX与EBP异或,还原原本的cookie值,将其保存到ECX中
call BUffOver.__security_check_cookie->这是我们开启GS后,VS生成的函数调用,通过校验我们的cookie值是否被修改,判断是否有缓冲区溢出

(4)函数栈的视图(结合上面解释查看)
函数栈
通过函数栈可以很好理解前面提到的安全Cookie,如果你还无法理解,可以结合下面的对比视图查看是否开GS缓冲区的差别
对比
我们知道,通过缓冲区溢出,可以使得EIP指向新的一个地址,执行特定shellcode(注册管理员、后台下载…),从而实现溢出攻击…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值