首页
社区
课程
招聘
[原创]缓冲区溢出攻击浅析,写给初学者
2011-3-25 12:04 25185

[原创]缓冲区溢出攻击浅析,写给初学者

2011-3-25 12:04
25185
收藏
点赞6
打赏
分享
最新回复 (129)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑仔猪 2011-7-4 10:02
101
0
学习了~谢谢分享
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ninino 2011-7-4 15:41
102
0
有点不明白,在哪里溢出的呢?
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smallfishl 2011-7-4 15:49
103
0
studying
.
雪    币: 131
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nin 2011-7-4 16:42
104
0
好東西啊,下載了慢慢消化
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nerdpal 2011-7-28 13:10
105
0
图文并茂,写的真好!
雪    币: 345
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jacalhu 2011-7-28 13:49
106
0
收藏下学习。。。
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
RockyBoy 2011-8-18 15:08
107
0
greate
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
angelwf 2011-8-18 16:15
108
0
写的很详细啊,正好适合我们这样的新手,太感谢了
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
firfor 1 2011-8-19 00:15
109
0
great
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D。s 2011-8-19 10:49
110
0
学习了,很强大。
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zccz 2011-8-19 17:50
111
0
针对缓冲区的部分 还真是有点不明白的啦 多了解看看
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
接下来 2011-8-24 17:12
112
0
写的不错呢
新手学习了啊
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuedongzhi 2011-11-21 20:08
113
0
请问,这句"在windows上,不幸的是这个栈起始地址很低,0x00130000,所以无法保证没有00字节出现这个要求,而且多线程的特性,有使得这个值变化不定,更不可能事先计算出来“能不能解释下,菜鸟看不懂
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
firfor 1 2011-11-22 10:35
114
0
很久没有看这个帖子了。因为没有做这个方向的,所以大家的疑问没有及时回复。
再者我也是初学者。所以有很多的地方自己也不甚明白。
关于你的这个问题应该是这样的。
高地址:EIP
            EBP(标准栈帧,有的程序,特别 是在release)版本有各种情况
低地址:局部变量空间
        xxxx
            xxxx
            xxxx
            xxxx<----这个就假如是一个char buffer[16]的起始地方吧。
大家知道在x86机器中。DF标志位一般为0也就是在拷贝字串的时候会往高地址方向拷。
所以字串的最后的字节会往eip在的地方靠近。当超过了buffer预分配的长度的时候就有
会把EIP值给覆盖掉。 这个应该你理解了。现在往这个char buffer中赋值的时候一般用的是
strcpy这样的字串拷贝函数。所以它是以字串的\0结束符来判断一个字串到底拷贝完全没有。
这样就完全 有可能超过上面给出的16字节的预留空间。因为只要这个字串太长久久没有出现
\0结束符。这样就会溢出了。而我们要利用这一个溢出。只能在这们能够控制这一个拷贝到buffer
中的字串源。也就是说:
                    程序中有可能出现的strcpy把某一个串拷到这个buffer中去。而这一个源串
                    是我们自己输入的。这样就们就有可能构造shellcode。
上面说了若是用strcpy函数:而这一个函数是以\0来判断一个字串是否结束的。也就是说我们输入的数据中不能在中间有内码为0的数据。不然就是拷贝截断。
但是这有一个问题。若直接把EIP赋值成自己的shellcode所在的地址的话。必定要写入中间有0的数据。因为windows的栈的地址很低。所以我们的shellcode在栈上的话。我们的shellocde 的入口地址中必定有0.如0x00 80 00 00 这四个字节为我们的shellcode的地址。但是把这一个值写到了EIP所在的栈上位置,则再往上我们的shellcode就被截断了。所以这是一个问题。因此不能直接跳到我们的代码所在的地方。要找一个跳板 jmp esp。
1:ret返回后把栈中的值写入了eip寄存器中去了。而这个值已经被我们修改过了。
2:当然那个jmp esp 所在的地址中不能有0字节。这样在windows的高地址中去找这么一条指令。
3:ret 后。执行eip指向的指令。jmp esp 。请记得:上面的ret后。esp不再指向eip值。已经向上移一个位置了。因此jmp esp 刚好把下一条执行指令跳转到我们的shellcode中去。
不知说清楚没有。没有的话自己再找些相关的资料来看下吧。
雪    币: 47
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fzman 2011-11-22 11:06
115
0
回复看有多少Kx 币
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kxzjchen 2011-11-22 11:10
116
0
楼主写得不错
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuedongzhi 2011-11-22 20:29
117
0
大概看懂了,不过我有个问题就是为什么非得用char,不可以用BYTE吗?这样不就不需要拷贝字符串了,还有拷贝字符串也可以不用那些函数,可以自己判断结束
雪    币: 970
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
devalone 2011-11-22 22:00
118
0
思路很清晰,文章不错。顶!
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
radar蝙蝠 2011-11-23 02:10
119
0
感谢楼主无私奉献
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lvpiggy 2011-11-23 08:30
120
0
感激不尽
雪    币: 122
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
firfor 1 2011-11-23 10:16
121
0
其实char就是byte.这里其实 说明的就是一种针对strcpy函数可能出现的这一个漏洞而展开的讨论,当然拷贝时不能让它被0截断了.如一些网络传送的数据一般都会有一个域来表明传送的数据的长度.有可能它就是用的是memcpy,不过这样的说应该一般是在堆上分配内存.也就是说一般会进行比较严格的长度检查.这样出现漏洞的机会就更小了.
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lvpiggy 2011-11-23 10:20
122
0
感谢楼主带我入门,今生今世无以为报
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lvpiggy 2011-11-23 13:57
123
0
/*
    pop   eax;
    push  eax;
//相当于先弹到eax中,得到了第一个结构体的地址。再入栈就是最后一个参数的指针。
    */

这个看不懂- - 请赐教

还有啊 你说的韩老师是谁呀~   我才入门,都不知道有哪些大神 。
能告知学习这方面知识的途径么。
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jimmyleeee 2011-11-23 16:43
124
0
Very Good!
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
realright 2011-11-23 19:44
125
0
mark for next time
游客
登录 | 注册 方可回帖
返回