首页
社区
课程
招聘
[讨论]_security_cookie的问题
发表于: 2010-12-20 23:18 8485

[讨论]_security_cookie的问题

2010-12-20 23:18
8485
#include <stdlib.h>
void study1()
{
	char str[4];  //标记一
	gets(str);
	printf("你输入的内容是\n%s",str);
 }

int main(int argc, char* argv[])
{
	study1();
	system("PAUSE");
	return 0;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
2
当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返
回地址和局部变量的中间)。

[buffer][cookie][savedEBP][savedEIP]
在函数的结尾处,程序会把这个cookie和保存在.data节中的cookie进行比较。
如果不相等,就说明进程栈被破坏,进程必须被终止。

为了尽量减少额外的代码行对性能带来的影响,只有当一个函数中包含字符串缓冲区或使用_alloca函数
在栈上分配空间
的时候编译器才在栈中保存cookie。另外,当缓冲区至少于5个字节时,在栈中也不保
存cookie。

在典型的缓冲区溢出中,栈上的返回地址会被数据所覆盖,但在返回地址被覆盖之前,cookie早已经被
覆盖了,因此就导致了exploit的失效(但仍然可以导致拒绝服务),因为在函数的结尾程序会发现cookie
已经被破坏,接着应用程序会被结束。
2010-12-21 08:11
0
雪    币: 57
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=wingdbg;905394]当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返
回地址和局部变量的中间)。

[buffer][cookie][savedEBP][...[/QUOTE]

谢谢 wingdbg
2010-12-22 00:13
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=wingdbg;905394]当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返
回地址和局部变量的中间)。

[buffer][cookie][savedEBP][...[/QUOTE]

强人啊!!!
严重膜拜
2010-12-22 08:53
0
雪    币: 608
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
强悍..学到了.谢谢牛人.
2011-6-14 11:47
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
那个cookie好像一般都是π值
2011-6-14 20:56
0
游客
登录 | 注册 方可回帖
返回
//