免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1577 | 回复: 2

--缓冲区溢出思想-- [复制链接]

论坛徽章:
0
发表于 2005-05-17 20:48 |显示全部楼层
大家有些人对关于缓冲区溢出攻击问题比较模糊。
我想当你知道什么是缓冲区,怎么样溢出,缓冲区溢出后做什么?
这些道理你懂了以后,就会知道缓冲区溢出是不是限制特定的语言或是
应用程序的BUG了.

像典型C语言的缓冲区溢出例子[1],大部分使用strcpy()函数[2],为什么?
因为这个函数有BUG,不检查越界问题[3]。
所以,导缓冲区溢出攻击.针对这个例子,什么是缓冲区?缓冲区是调用这个
函数时候的堆栈(为临时变量分配空间)空间.怎么样溢出?由于不
检查越界问题,用原字符串(长的)复制给目标字符串(短的),
这样导致了原字符串(长的)覆盖了预先分配给目标字符串(短的)空间以后
的空间内容,当然,是用特定的值(一个跳转地址)覆盖了特定的位置(eip取值
的地方).缓冲区溢出后做什么?然后跳(上边溢出的结果)到事先准备的一段通
常叫做"shellcode"的代码段上执行.这个"shellcode"的作用可以和任何应
用程序一样,但是,这是理想的状态.实际由于受到空间的限制,通常"shellcode"比较小.

同样是perl的话,这个缓冲区溢出攻击问题比较少,因为,perl核心VM对越界问
题提供很好检查.

结合上边的说明,你可以考虑一下,如果有一个应用程序使用了C语言编写,并且,使用了
像strcpy()函数(不检查越界问题),然后由用户输入源字符串!
那我们认为这个程序的存在缓冲区溢出攻击问题。因为,一些恶意的用户可能精心布置一个
字符串作为源字符串输入给程序,那将导致程序被缓冲区溢出攻击!

上述还说明一个问题,就是"越界问题"基本是导致缓冲区溢出攻击一大诱因.
任何语言只要对"越界问题"检查比较松散的话,那这个语言容易遭受缓冲区溢出攻击。
但是,我们也要知道缓冲区溢出攻击其实是利用了语言,函数或者程序的BUG。
如果,你的程序不存在这样的BUG,那缓冲区溢出攻击是不可能产生的。



[1]
#include <stdio.h>;
#include <string.h>;
char src[] =
"jjjjjjjjjj==ADDR";
int main (void)
{
    char dest[8];
    strcpy (dest, src);
}
这个程序只是为了说明缓冲区溢出例子,我并没有实际测试过是否可以使用。
src字符串的组成可以包含"shellcode+溢出后用的跳转地址",这个src字符
串的长度在相对的条件下是固定的。还有"shellcode"和"跳转地址"是根据不同的语言,程序,系统等的不同而变化的,当然,这些内容到底是什么也就是
研究缓冲区溢出攻击的人,所研究的主要内容。
[2]char        *_Cdecl strcpy        (char *dest, const char *src);
这个是strcpy()的原型声明,这个函数声明在string.h这个头文件里边。
作用是把const char *src所指向的字符串,符值给char *dest所指向的地址空间。
[3]strcpy()不检查char *src所指向的字符串的长度是否超出
预留给char *dest所指向的地址空间。
[4]通常,我们把一个针对某BUG缓冲区溢出攻击的应用程序叫做"exploit"。

论坛徽章:
0
发表于 2005-05-18 00:03 |显示全部楼层

--缓冲区溢出思想--

可以让我看懂一点溢出的样子,深得还是不是很懂,可否再细一点,先顶一下了,谢谢

论坛徽章:
0
发表于 2005-05-18 09:56 |显示全部楼层

--缓冲区溢出思想--

1.stack溢出是最初级的一种,strcpy()通常只用在演示教学文档
除了栈溢出,还有很多其他的攻击方式

2.这种技术寿命也不长了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP