首页
社区
课程
招聘
[原创]安全总结----栈溢出(一)
发表于: 2014-3-19 22:19 21192

[原创]安全总结----栈溢出(一)

2014-3-19 22:19
21192

也搞安全一段时间了,现在对过去看得东西做个总结。
先写一个关于栈溢出的东西。

首先,先了解一下什么是栈溢出。
程序在运行过程中的栈是由系统创建和维护的,同时也支持程序内的函数调用功能。在进行函数调用的时候,程序会将返回地址压入栈中,而执行完被调用函数代码之后,则会通过ret指令从栈中弹出压入的返回地址,然后将返回地址压入EIP指令寄存器中,从而程序继续执行。

但就是这种将控制程序流程的敏感数据与程序变量同时保存在同一段内存的冯诺依曼体系,必然会给传冲去溢出攻击带来本质上的可能性。

栈溢出发生在程序向位于栈中的内存地址写数据时,当写入的数据长度超过栈分配给传冲去的空间时,就会造成栈溢出。从栈溢出的原理出发,攻击者可以找到如下几种方式来利用这种类型的漏洞:
1.        覆盖缓冲区附近程序的变量,改变程序的执行流程和结果,从而达到攻击者的目的。
2.        覆盖战中保存的函数的返回地址,修改为攻击者指定的地址,当程序返回时,程序将跳转到攻击者指定的地址,理想情况下可以执行任意代码。
3.        覆盖某个函数指针或者程序异常处理结构,只要溢出后目标函数或者异常处理例程被执行,同样可以让程序流跳转到任意地址。

说了这么多,就是栈溢出的一些概念。

下面说说在C下的函数调用过程(其他语言大同小异),来理解一下栈溢出为什么会产生。参数入栈顺序如参考文献[1]。我们使用_stdcall模式,即从右至左顺序压入函数参数。

代码清单1:

#include <string.h>

void fun1(char * tmp)
{
	char c[8];
	strcpy(c,tmp);
}

int main()
{
	_asm
	{
		nop;
		nop;
		nop;
		nop;
		nop;
	}
	char array0[]="fffffff";
	char array1[]="ffffffff";	//f=0x66
	char array2[]="ffffffffgggg";
	char array3[]="ffffffffgggghhhh";
	fun1(array0);
	return 1;
}


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

上传的附件:
收藏
免费 11
支持
分享
最新回复 (24)
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark一下 留着以后看
2014-3-19 22:47
0
雪    币: 1145
活跃值: (4227)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
3
期待后面的续集[QUOTE][/QUOTE]
2014-3-20 08:23
0
雪    币: 341
活跃值: (85)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
mark
2014-3-20 08:43
0
雪    币: 51
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
马克。。。~~
2014-3-20 08:58
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
图文教程什么的最好了。。
2014-3-22 13:12
0
雪    币: 204
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
谢谢楼主分享。写的很好。对于我来说很有用。感谢了。
2014-3-22 18:38
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
mark,好好学习一下!
2014-3-23 10:03
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark
2014-3-23 12:21
0
雪    币: 620
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Mark
2014-3-25 13:59
0
雪    币: 68
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
mark电脑看
2014-3-25 14:25
0
雪    币: 71
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Niubility ~~
2014-3-25 14:35
0
雪    币: 26
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
谢谢分享!!!
2014-3-26 21:52
0
雪    币: 2559
活跃值: (176)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
mark一下 留着以后看
2014-3-29 09:55
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好久没来了,来到就看到这么个好东西 !!!
2014-3-29 13:35
0
雪    币: 240
活跃值: (443)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
mark `
2014-4-2 00:25
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
刚学完这个,复习一下
2014-4-2 08:11
0
雪    币: 96
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
mark,这种文章值得收藏
2014-4-10 09:17
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢分享
2014-4-15 14:31
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark 看完 感觉 明白了很多
2014-5-21 10:14
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这就是内核层使用UNICODE的原因了
2014-5-22 22:13
0
雪    币: 2522
活跃值: (5788)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习学习
2019-5-6 12:54
0
雪    币: 106
活跃值: (140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
xp环境,楼主能分享下非xp环境下的栈溢出吗?
2020-1-17 20:14
0
雪    币: 148
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
xp环境,楼主能分享下非xp环境下的栈溢出吗?
2020-5-20 02:40
0
雪    币: 5453
活跃值: (1482)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
收藏先,以后再学
2020-5-20 08:26
0
游客
登录 | 注册 方可回帖
返回
//