|
楼主 |
发表于 2006-2-25 19:15:00
|
显示全部楼层
第二十四章------关于UNIX/Linux
简单说明: UNIX/Linux无疑是比windows更历史悠久更出色的OS。可惜缺少了一些“平易近人”,让许多人望而却步。这里也不打算讲些什么,想学它的人不如从学习怎么找相关资料开始吧,呵呵。不过还是建议初学者从WINDOWS入手比较好一些,而且按市占有率看,也应该多接触WINDOWS系统。当然抽空熟悉一下U系统也是不错的选择,这里简单介绍大家一点资料。
相关资料: rootkit综述 http://www.sixthroom.com/ailan/f ;... 3&RootID=332&ID=332 Linux 使用技巧33条 http://www.sixthroom.com/ailan/f ;... 3&RootID=335&ID=335 Linux配置与优化经验谈 http://www.sixthroom.com/ailan/f ;... 3&RootID=337&ID=337 Unix**初学者指导 http://www.sixthroom.com/ailan/f ;... 3&RootID=336&ID=336 入侵UNIX http://www.sixthroom.com/ailan/f ;... 3&RootID=339&ID=339
相关网址: 蓝森林 http://lslnet.com/linux/ Linux大本营 http://lydr.myrice.com/ ; LINUX-AID技术支持中心 http://www.linuxaid.com.cn/ LINUX-NOW http://new.linuxnow.com/ 台湾LINUX协会 http://www.linux.org.tw/ GNU的官方网站 http://www.gnu.org/ 中国科学技术大学Linux使用者协会 http://lug.ustc.edu.cn/
第二十五章------溢出
简单说明: 溢出对我们这些小鸟们属于比较高级的玩意了。所以在这里也不准备多提,否则就违反了这篇文章写给初学者的初衷了。 缓冲区溢出 缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。 缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方。一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生root权限的地方。单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以root权限运行命令的区域才行。这样,一个缓冲区利用程序将能运行的指令放在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控制了计算机。总结一下上面的描述。缓冲区溢出指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:
example0.c ----------------------------------------------------------- void function(char *str) { char buffer[16]; strcpy(buffer,str); } -----------------------------------------------------------
上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循环内的getc(),fgetc(),getchar()等。在C语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出是利用堆栈段的溢出的。一个程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程序的机器码和只读数据,这个段通常是只读,对它的写操作是非法的。数据段放的 |
|