广西经贸职业技术学院论坛
标题:
[转帖]要学黑客的同学 近来看了 。绝对有用。。。
[打印本页]
作者:
無盡等待
时间:
2005-1-12 11:23
标题:
[转帖]要学黑客的同学 近来看了 。绝对有用。。。
菜鸟100问</p><p> 菜鸟100问(一)<br/> 第一个 : HTTP是什么? <br/> 当我们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就可以了,例如www.microsoft.com,但是在浏览器的地址栏里面出现的却是:http://www.microsoft.com ,你知道为什么会多出一个“http”吗? <br/> 一、HTTP协议是什么 <br/> 我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。因此,在我们认识HTTP之前,有必要先弄清楚URL的组成,例如:http://www.microsoft.com/china/index.htm。它的含义如下: <br/> 1. http://:代表超文本传输协议,通知microsoft.com服务器显示Web页,通常不用输入; <br/> 2. www:代表一个Web(万维网)服务器; <br/> 3. Microsoft.com/:这是装有网页的服务器的域名,或站点服务器的名称; <br/> 4. China/:为该服务器上的子目录,就好像我们的文件夹; <br/> 5. Index.htm:index.htm是文件夹中的一个HTML文件(网页)。 <br/> 我们知道,Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Application layer),它包含所有高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。 <br/> HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以http://开头的原因。 <br/> 自WWW诞生以来,一个多姿多彩的资讯和虚拟的世界便出现在我们眼前,可是我们怎么能够更加容易地找到我们需要的资讯呢?当决定使用超文本作为WWW文档的标准格式后,于是在1990年,科学家们立即制定了能够快速查找这些超文本文档的协议,即HTTP协议。经过几年的使用与发展,得到不断的完善和扩展,目前在WWW中使用的是HTTP/1.0的第六版。<br/> 二、HTTP是怎样工作的 <br/> 既然我们明白了URL的构成,那么HTTP是怎么工作呢?我们接下来就要讨论这个问题。 <br/> 由于HTTP协议是基于请求/响应范式的(相当于客户机/服务器)。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。 <br/> 许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理和服务器之间通过一个单独的连接来完成。在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP 80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可*的传输。 <br/> 这个过程就好像我们打电话订货一样,我们可以打电话给商家,告诉他我们需要什么规格的商品,然后商家再告诉我们什么商品有货,什么商品缺货。这些,我们是通过电话线用电话联系(HTTP是通过TCP/IP),当然我们也可以通过传真,只要商家那边也有传真。 <br/> 以上简要介绍了HTTP协议的宏观运作方式,下面介绍一下HTTP协议的内部操作过程。 <br/> 在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。这就好像上面的例子,我们电话订货的全过程。 <br/> 其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。 <br/> 也就是说商家除了拥有商品之外,它也有一个职员在接听你的电话,当你打电话的时候,你的声音转换成各种复杂的数据,通过电话线传输到对方的电话机,对方的电话机又把各种复杂的数据转换成声音,使得对方商家的职员能够明白你的请求。这个过程你不需要明白声音是怎么转换成复杂的数据的。<br/> 第2个什么是FTP?FTP是英文File Transfer Protocol的缩写,意思是文件传输协议。它和HTTP一样都是Internet上广泛使用的协议,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。 </p><p> 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此</p><p> 第三个 : ipc$ 是什么? <br/> IPC$(Internet Process Connection)是共享"命名管道"的资源(大家都是这么说的),它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。 <br/> 利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。 <br/> 我们总在说ipc$漏洞ipc$漏洞,其实,ipc$并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$)。 <br/> 所有的这些,初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者(到底是什么用心?我也不知道,代词一个)会利用IPC$,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测,寄希望于获得更高的权限,从而达到不可告人的目的. <br/> 解惑: <br/> 1)IPC连接是Windows NT及以上系统中特有的远程网络登陆功能,其功能相当于Unix中的Telnet,由于IPC$功能需要用到Windows NT中的很多DLL函数,所以不能在Windows 9.x中运行。 <br/> 也就是说只有nt/2000/xp才可以建立ipc$连接,98/me是不能建立ipc$连接的(但有些朋友说在98下能建立空的连接,不知道是真是假,不过现在都2003年了,建议98的同志换一下系统吧,98不爽的) <br/> 2)即使是空连接也不是100%都能建立成功,如果对方关闭了ipc$共享,你仍然无法建立连接 <br/> 3)并不是说建立了ipc$连接就可以查看对方的用户列表,因为管理员可以禁止导出用户列表 </p><p> 第四个 : ASP 是什么? <br/> ASP即Active Server Page的缩写。它是一种包含了使用VB Script或Jscript脚本程序代码的网页。当浏览器浏览ASP网页时, Web服务器就会根据请求生成相应的HTML代码然后再返回给浏览器,这样浏览器端看到的 就是动态生成的网页。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互。是一种简单、方便的编程工具。在了解了VBSCRIPT的基本语法后,只需要清楚各个组件的用途、属性、方法,就可以轻松编写出自己的ASP系统。ASP的网页文件的格式是.ASP。 </p><p> 第5个.什么是肉鸡.<br/> 肉鸡就是具有最高管理权限的远程电脑。简单的说就是受你控制的远程电脑。肉鸡可以是win、Unix/Linux……等各种系统;肉鸡可以是一家公司的服务器,一家网站的服务器,甚至是美国白宫或军方的电脑,只要你有这本事入侵并控制他,呵呵。莱鸟所说用的肉鸡一般是开了3389端口的Win2K系统的服务器。 <br/> 要登陆肉鸡,必须知道3个参数:远程电脑的IP、用户名、密码。第6个:什么是shell <br/> 操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。 <br/> shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。 <br/> Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。交互式shell和非交互式shell <br/> 交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。 <br/> shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。shell的类型 <br/> 在UNIX中主要有两大类shell <br/> Bourne shell (包括 sh, ksh, and bash) <br/> Bourne shell ( sh) <br/> Korn shell ( ksh) <br/> Bourne Again shell ( bash) <br/> POSIX shell ( sh) <br/> C shell (包括 csh and tcsh) <br/> C shell ( csh) <br/> TENEX/TOPS C shell ( tcsh)Bourne Shell <br/> 最初的UNIX shell是由Stephen R. Bourne于20世纪70年代中期在新泽西的AT&T贝尔实验室编写的,这就是Bourne shell。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。C Shell <br/> Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。Korn Shell <br/> 有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。Bourne Again Shell (bash) <br/> bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。POSIX Shell <br/> POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh. 各主要操作系统下缺省的shell: <br/> AIX 下是Korn Shell. <br/> Solaris和FreeBSD缺省的是Bourne shell. <br/> HP-UX缺省的是POSIX shell. <br/> Linux是Bourne Again shell. </p><p> 7【TIP】 <br/> #!/usr/bin/sh的用途 <br/> shell script的第一行一般都是#!/usr/bin/sh或#!/usr/bin/ksh等,它的用途就是指出本脚本是用的哪种shell写的,执行时系统应该用哪种shell来解释执行它。附:LINUX系统的shell原理 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。 shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。 有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。 shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。 shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。 当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。 一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。 当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。 我们来实习一下shell是如何工作的。 $ make work make:***No rule to make target ‘work’. Stop. $ 注释:make是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后,shell便执行它。本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。 在例子中,shell会寻找名为make的程序,并以work为参数执行它。make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在“make work”中,make编译的目标是work。因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。 另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入: $ myprog bash:myprog:command not found $ 可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息 <br/> <br/>
作者:
無盡等待
时间:
2005-1-12 11:24
第八个:(2)什么是Suid Shell (下面这些并不是所讲的基础范围,但与第八个有关,所以顺便介绍一下) <br/> +++++++++================++++++++++ <br/> Suid shell是一种可用于以拥有者权限运行的shell。也就是说,如果拥有者是root,那你就可能以root的身份执行命令。普通的shell文件属性为rwxr-xr-x,拥有者为root,root可读/写/执行这个shell,而其他用户则只能以自己的权限读和运行它。然而,如果有一个文件属性为rwsr-xr-x的shell,就可以获得文件拥有者权限;如果文件拥有者是root,那么任何运行了这个shell的用户便可以控制整个系统,如增加用户、修改root口令、清除日志等等。 <br/> 为什么需要它? <br/> 这是一个非常容易回答的问题。当通过某些方法进入系统后,如果系统管理员有一定的水平,会很快发现问题。通常他们会查看日志和修改root口令,你可能就要跟这个系统说再见了。这就是需要suid shell的原因 。:) <br/> 怎样才能得到suid shell呢? <br/> 首先你要足够狡猾,这取决于你面对的是什么样的系统管理员。当你用尽一切方法,如猜口令、苦难root 、安全漏洞攻击等等,终于成功地取得了root权限,尽快找到一个几乎从未使用过的目录。无论如何,不要将suid shell放在你的主目录下。一个比较好的地方是/usr下的深层子目录,如/usr/X11/include/X11/。这个目录几乎不会有人进去的,而且很少会因存放过多文件而使系统管理员检查里面的文件。另外,suid shell的名字应该尽量与其它文件相似。例如,在这个目录下有sync.h、shape.h等文件,suid shell可以取part.h这种隐蔽性较好的名字。 <br/> 另一个比较好的地方是将suid shell与其它suid程序放置在一起,如/usr/sbin,并同样取一个隐蔽的名字。 接着,就是在这些目录下创建suid shell了。如:cp /bin/sh /usr/X11/include/X11/extensions/part.h <br/> chmod 4755 /usr/X11/include/X11/extensions/part.h 注意,为了使整个过程在最短的时间内完成,应该在进入系统前做好相应准备。最好在尝试攻击前仔细研究系统和计划。另外总是多创建几个suid shell,这样即使其中一个被发现了,仍然有通过使用其它suid shell控制系统的机会。 <br/> 如何利用suid shell呢? 在许多系统中,往往限制用户所能使用的shell。这个只要检查一下/etc下的相应文件就能知道。在Linux系统中这个文件是/etc/shells,其中列出了所有的shell程序。但你可以用suid shell做任何事!例如,你准备将/etc/passwd改名为/etc/passwd.heh,编写如下脚本即可:#!/usr/X11/include/X11/extensions/part.hmv /etc/passwd /etc/passwd.heh <br/> exit <br/> (这只是个示例,最好别这样做) <br/> 上面的例子好象只提供了一个非交互的程序,但只要精心编写脚本,同样可以实现虚拟的“交互”程序。如果你仍然想真正得到可交互的访问,请阅读以下内容。首先将/etc/passwd复制到主目录下,编辑它以删除root的加密口令。接着输入"ps ax|grep syslog'取得syslogd的进程号。现在以'interactive XX'(XX是syslogd的进程号)格式运行如下脚本:#!/usr/X11/include/X11/extensions/part.hkill -9 $1 <br/> rm -f /var/adm/syslog <br/> cp /etc/passwd /etc/passwd.OLD <br/> cp ~backend/passwd /etc/passwd <br/> chmod 644 /etc/passwd <br/> exit 现在可以无须口令就成为root了 <br/> 一旦完成所要做的”工作“后,记住运行如下脚本,替换回最初的口令文件。#!/usr/X11/include/X11/extensions/part.hcp /etc/passwd.OLD /etc/passwd <br/> chmod 644 /etc/passwd <br/> exit下一步的工作就是擦PP了。:) </p><p> 9:什么是端口? <br/> 在开始讲什么是端口之前,我们先来聊一聊什么是 port 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全?又,我的服务应该对应什么 port 呀!?』呵呵!很神奇吧!怎么一部主机上面有这么多的奇怪的 port 呢?这个 port 有什么作用呢?! <br/> 由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以啰,当你的主机同时开启了 FTP 与 WWW 服务的时候,那么别人送来的资料封包,就会依照 TCP 上面的 port 号码来给 FTP 这个服务或者是 WWW 这个服务来处理,当然就不会搞乱啰!(注:嘿嘿!有些很少接触到网络的朋友,常常会问说:『咦!为什么你的计算机同时有 FTP、WWW、E-Mail 这么多服务,但是人家传资料过来,你的计算机怎么知道如何判断?计算机真的都不会误判吗?!』现在知道为什么了吗?!对啦!就是因为 port 不同嘛!你可以这样想啦,有一天,你要去银行存钱,那个银行就可以想成是『主机』,然后,银行当然不可能只有一种业务,里头就有相当多的窗口,那么你一进大门的时候,在门口的服务人员就会问你说:『嗨!你好呀!你要做些什么事?』你跟他说:『我要存钱呀!』,服务员接着就会告诉你:『喝!那么请前往三号窗口!那边的人员会帮您服务!』这个时候你总该不会往其它的窗口跑吧?! ""这些窗口就可以想成是『 port 』啰!所以啦!每一种服务都有特定的 port 在监听!您无须担心计算机会误判的问题呦!)· 每一个 TCP 联机都必须由一端(通常为 client )发起请求这个 port 通常是随机选择大于 1024 以上的 port 号来进行!其 TCP 封包会将(且只将) SYN 旗标设定起来!这是整个联机的第一个封包; · 如果另一端(通常为 Server ) 接受这个请求的话(当然啰,特殊的服务需要以特殊的 port 来进行,例如 FTP 的 port 21 ),则会向请求端送回整个联机的第二个封包!其上除了 SYN 旗标之外同时还将 ACK 旗标也设定起来,并同时时在本机端建立资源以待联机之需; · 然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带 ACK 旗标(事实上﹐后继联机中的所有封包都必须带有 ACK 旗标)﹔ · 只有当服务端收到请求端的确认( ACK )封包(也就是整个联机的第三个封包)之后﹐两端的联机才能正式建立。这就是所谓的 TCP 联机的'三段式交握( Three-Way Handshake )'的原理。 经过三向交握之后,呵呵!你的 client 端的 port 通常是高于 1024 的随机取得的 port 至于主机端则视当时的服务是开启哪一个 port 而定,例如 WWW 选择 80 而 FTP 则以 21 为正常的联机信道! 总而言之,我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念.工具提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。 <br/> 那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。我们都知道,提供服务就一定有服务软件的漏洞,根据这些,攻击者可以达到对目标计算机的初步了解。如果计算机的端口打开太多,而管理者不知道,那么,有两种情况:一种是提供了服务而管理者没有注意,比如安装IIS的时候,软件就会自动增加很多服务,而管理员可能没有注意到;一种是服务器被攻击者安装木马,通过特殊的端口进行通信。这两种情况都是很危险的,说到底,就是管理员不了解服务器提供的服务,减小了系统安全系数。 </p><p> 第十个:什么是扫描 <br/> 如果你的机子连入互联网,那么你就有被扫描的危险。这里要给大家介绍的就是:什么是扫描,为什么有人要扫描,以及有趣的秘密握手机制和不同的扫描技术。 <br/> 扫描一个系统或者一个网络,通常是为了发现这个被扫描的对象在提供哪些服务。扫描者可以分成两种类型,一种是“好人”:比如系统管理员和网络安全顾问,他们扫描的目的纯粹是外了找出系统的缺陷或漏洞,进而想办法弥补。当然另一类的就只能是“坏人”了,比如有“脚本小孩”或者更“坏”的,他们的目的是为了找出漏洞,进而实施攻击。 扫描就象是去一栋公寓然后挨家敲门看谁在家。你是否在运行一个WEB服务器,或者邮件服务器、BIND、Telnet、FTP、RPC等等。这些问题的答案扫描都可以给出。遗憾的是,这些答案通常很明显的暴露在外,使得那些技术不是很高明的人可以轻而易举的进去“参观”。 当然,我这里指的并非是那些极为高明,技术顶尖的黑客,我指的是那些只知道如何从网络上下载文件或收发EMAIL的大学生,当然中学生也不例外,他们通常被称为“脚本孩子”,因为他们并没有高深的技术知识作后盾,仅仅是通过运行别人写出的脚本程序来扫描或攻击别人的系统。 除了这些可以随意下载的脚本外,攻击者通常还会下载一个叫做端口扫描器的软件工具。这种工具较旧的比如有ISS,较新的则如NMAP2.54的BETA22.1等。如果攻击者可以在你的系统中找到一个明显的漏洞,那么完了,你的系统很快将会属于他了,而且,扫描并不犯法,它并不是抢劫,你还无处申诉。 如今,“坏人”的扫描通常会遇到这样的问题,就是他们扫描过的系统往往会记录扫描行为所利用的每一个连接信息,或许扫描的人的确很浅薄,没有意识到在他们扫描过程中会在系统中留下“犯罪”的记录,但稍微留意的人都会想法抹除他们的犯罪记录。有很多方法可以达到这个目的。比如,许多黑客通过他预先攻击过的主机来扫描远程主机,这样,即使被扫描的主机记录了这一信息,逆向搜索的人能知道的也仅限于黑客预先攻击过的主机,真正的黑客信息并不能找到。这里介绍的秘密扫描就属于这样一种扫描方式,它使得逆向搜索变的更为困难,因为它的工作机制甚至不需要建立连接。 为了理解什么是秘密扫描以及它的工作原理,你首先应该对TCP/IP数据包的内容以及TCP的秘密握手机制有所了解。除了携带发送和接收方的IP地址和端口号外,TCP的报头还包含一个序列号和一些起着特殊作用的标记位。这里仅提到其中的三个标记位:SYN,ACK和FIN。因为它们三个的作用与这里讨论的主题密切相关。 当系统间彼此说“HELLO”或道“GOODBYE”时,就会用到所谓的握手机制。让我们先看看如何利用TCP/IP的握手机制来建立一个连接。本文中所提到的连接均指的是发生在两个IP地址间,有一定的端口号的连接。当你想网上冲浪,或者想TELNET到远程主机时,三次握手机制就会为你生成一个这样的连接。 它的工作原理大致如下:握手的第一步,一台计算机首先请求和另外一台计算机建立连接,它通过发送一个SYN请求来完成,也即将前面提到的SYN标记位置位。消息的内容就象是说:“HI,听着,我想和你的机子端口X上的服务说话,咱们先同步一下,我用序列号Y来开始连接。” 端口X表示了连接的服务类型。至于哪些端口支持哪些类型的服务,可以参考UNIX下面的/etc/services文件。两台计算机间的每条信息都有一个由发送方产生的序列号,序列号的使用使得双方知道他们之间是同步的,而且还可以起到丢失信息时或接收顺序错误时发送警告信息的作用。 握手的第二步,接收到SYN请求的计算机响应发送来的序列号,它会将ACK标记位置位,同时它也提供自己的序列号,这个做法类似于说:OH,亲爱的,我已经收到了你的号码,这是我的号码。 到现在为止,发起连接建立请求的计算机认为连接已经建立起来,然而对方却并不这样认为,对方还要等到它自己的序列号有了应答后才能确认连接建立起来。因此现在的状态可以称为“半连接”。如果发起连接请求的计算机不对收到的序列号作出应答,那么这个连接就永远也建立不起来,而正因为没有建立连接,所以系统也不会对这次连接做任何记录。 握手的第三步,发起连接请求的计算机对收到的序列号作出应答,这样,两台计算机之间的连接才算建立起来。 两台计算机说”GOODBYE“时的握手情况与此类似:当一台计算机说没有更多的数据需要发送了,它发送一个FIN信号(将FIN标记位置位)通知另一端,接收到FIN的另一端计算机可能发送完了数据,也可能没发送完,但它会对此作出应答,而当它真正完成所有需要发送的数据后,它会再发送一个自己的FIN信号,等对方对此作出应答后,连接才彻底解除。FIN秘密扫描的工作原理就是向它的目的地一个根本不存在的连接发送FIN信息,如果这项服务没有开,那么目的地会响应一条错误信息,但如果是有这项服务,那么它将忽略这条消息。这样,扫描者的问题“你运行X吗”就有了答案,而且还不会在系统中有所记录。 还有两种其他的扫描手段值得注意。一种叫做圣诞树扫描,因为,它将所有的标记位都置位(不仅仅是SYN,ACK,FIN);另一种叫做空扫描,因为所有的标记位都被复位。这些秘密的扫描行为将会根据接收端所运行的平台不同而产生不同的错误响应信息。 现代的端口扫描工具,象NMAP就是利用这样的原理来检测在一个系统上有那些服务是开着的。NMAP不光是最著名的,同时也是最出色的端口扫描工具。它被系统管理人员和“坏人”们广泛的应用,有关NMAP的介绍,大家可以通过搜索引擎去查找相关的资料。++++++++不过对于扫描工具来说,菜鸟们用Scan和流光比较简单,功能也不错!+++++++++ </p><p>
作者:
無盡等待
时间:
2005-1-12 11:25
<br/> 第十一个:什么是钩子函数 <br/> WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。一共有两种类型的钩子:局部的和远程的。 <br/> 局部钩子仅钩挂您自己进程的事件。 <br/> 远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种: <br/> 基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。 <br/> 系统范围的 将捕捉系统中所有进程将发生的事件消息。 当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。 <br/> 钩子一共有14种,以下是它们被调用的时机: <br/> WH_CALLWNDPROC 当调用SendMessage时 <br/> WH_CALLWNDPROCRET 当SendMessage的调用返回时 <br/> WH_GETMESSAGE 当调用GetMessage 或 PeekMessage时 <br/> WH_KEYBOARD 当调用GetMessage 或 PeekMessage 来从消息队列中查询WM_KEYUP 或 WM_KEYDOWN 消息时 <br/> WH_MOUSE 当调用GetMessage 或 PeekMessage 来从消息队列中查询鼠标事件消息时 <br/> WH_HARDWARE 当调用GetMessage 或 PeekMessage 来从消息队列种查询非鼠标、键盘消息时 <br/> WH_MSGFILTER 当对话框、菜单或滚动条要处理一个消息时。该钩子是局部的。它时为那些有自己的消息处理过程的控件对象设计的。 <br/> WH_SYSMSGFILTER 和WH_MSGFILTER一样,只不过是系统范围的 <br/> WH_JOURNALRECORD 当WINDOWS从硬件队列中获得消息时 <br/> WH_JOURNALPLAYBACK 当一个事件从系统的硬件输入队列中被请求时 <br/> WH_SHELL 当关于WINDOWS外壳事件发生时,譬如任务条需要重画它的按钮. <br/> WH_CBT 当基于计算机的训练(CBT)事件发生时 <br/> WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的应用程序很少使用 <br/> WH_DEBUG 用来给钩子函数除错 <br/> 附:如何使用钩子函数(接收到字母A按下时,窗体由最小化弹出的完整的代码) <br/> Public Declare Function CallNextHookEx Lib "user32" _ <br/> (ByVal hHook As Long, _ <br/> ByVal nCode As Long, _ <br/> ByVal wParam As Long, _ <br/> ByVal lParam As Long) As LongPublic Declare Function UnhookWindowsHookEx Lib "user32" _ <br/> (ByVal hHook As Long) As LongPublic Declare Function SetWindowsHookEx Lib "user32" _ <br/> Alias "SetWindowsHookExA" _ <br/> (ByVal idHook As Long, _ <br/> ByVal lpfn As Long, _ <br/> ByVal hmod As Long, _ <br/> ByVal dwThreadId As Long) As Long <br/> Public Const WH_KEYBOARD = 2Public Const KEY_WINSTART = 91 <br/> Public Const KEY_WINMENU = 93 <br/> Global hHook As LongPublic Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long <br/> If nCode >= 0 Then <br/> If wParam = KEY_WINMENU Or wParam = KEY_WINSTART Then <br/> If (lParam And &HC0000000) = 0 Then <br/> MsgBox "", , "" <br/> KeyboardProc = 1 <br/> Exit Function <br/> End If <br/> End If <br/> End If <br/> KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam) <br/> End FunctionOption Explicit <br/> Private Sub Command1_Click() <br/> form2.Show 1End SubPrivate Sub form_Load() <br/> hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID) <br/> Me.Show <br/> End SubPrivate Sub form_Unload(Cancel As Integer) <br/> Call UnhookWindowsHookEx(hHook) <br/> End Sub </p><p> 第十二个:什么是加壳和脱壳! <br/> 加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。现在的CPU都很快,所以这个解压过程你看不出什么东东。软件一下子就打开了,只有你机器配置非常差,才会感觉到不加壳和加壳后的软件运行速度的差别。当你加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。所以,这些的工作只是在内存中运行的,是不可以了解具体是怎么样在内存中运行的。通常说的对外壳加密,都是指很多网上免费或者非免费的软件,被一些专门的加壳程序加壳,基本上是对程序的压缩或者不压缩。因为有的时候程序会过大,需要压缩。但是大部分的程序是因为防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕。 <br/> 脱壳,是完全破除压缩后软件无法编辑的限制,去掉头部的解压缩指令,然后解压出加壳前的完整软件。这样,你就可以对其“动刀”了。呵呵~~当然是和加壳相反哟。从字面上也该明白了吧,我就不多说了~</p><p> 第十三个:什么是代理服务器 <br/> 代理有很多种解释,而我们常常提到的代理,从计算机专业角度来说就是指代理服务器相关,针对syx-kn 的提问,我先把代理服务器向大家简单的介绍一下吧!! <br/> 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server (代理服务器)是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层。 <br/> 代理服务器(Proxy Server)就是个人网络和因特网服务商之间的中间代理机构,它负责转发合法的网络信息,并对转发进行控制和登记。在使用网络浏览器浏览网络信息的时候,如果使用代理服务器,浏览器就不是直接到Web服务器去取回网页,而是向代理服务器发出请求,由代理服务器取回浏览器所需要的信息。目前使用的因特网是一个典型的客户机/服务器结构,当用户的本地机与因特网连接时,通过本地机的客户程序比如浏览器或者软件下载工具发出请求,远端的服务器在接到请求之后响应请求并提供相应的服务。 <br/> 代理服务器处在客户机和服务器之间,对于远程服务器而言,代理服务器是客户机,它向服务器提出各种服务申请;对于客户机而言,代理服务器则是服务器,它接受客户机提出的申请并提供相应的服务。也就是说,客户机访问因特网时所发出的请求不再直接发送到远程服务器,而是被送到了代理服务器上,代理服务器再向远程的服务器提出相应的申请,接收远程服务器提供的数据并保存在自己的硬盘上,然后用这些数据对客户机提供相应的服务。 <br/> 讲了这么多,其实对于菜鸟们所提的代理,主要是应用,这里我再附加上设置代理服务器的方法: <br/> IE4.01:菜单栏“查看”-> 下拉菜单“Internet选项”-> 选项卡“连接”-> 在“代理服务器”一栏选中“通过代理服务器访问Internet”,输入地址和端口号。-> 确定。IE 5.0:菜单栏“工具”-> 下拉菜单“Internet选项”-> 选项卡“连接”-> 在“拨号设置”中选中您目前使用的连接,然后点击右侧的“设置”-> 在中间的“代理服务器”栏选中“使用代理服务器”-> 在“地址”和“端口”栏输入HTTP代理服务器地址和端口-> 确定 -> 确定。 </p><p> 第十四个:什么是协议 <br/> 协议就是对计算机之间连接的信息格式、能被收/发双方接受的传送信息内容的一组定义。协议有“多层”结构,高层协议如IPX或TCP/IP负责点到点传送信息包,较低层协议提供专门的信息和命令允许系统操作。 </p><p> 第十五个:什么是数据包 <br/> “包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。 <br/> 名词解释:OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。OSI模型有7层,17层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI模型在逻辑上可分为两个部分:低层的14层关注的是原始数据的传输;高层的57层关注的是网络下的应用程序。 <br/> 我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。 “包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。比如在Windows 2000 Server中,把鼠标移动到任务栏右下角的网卡图标上(网卡需要接好双绞线、连入网络),就可以看到“发送:××包,收到:××包”的提示。通过数据包捕获软件,也可以将数据包捕获并加以分析。(见:附件图)就是用数据包捕获软件Iris捕获到的数据包的界面图,在此,大家可以很清楚地看到捕获到的数据包的MAC地址、IP地址、协议类型端口号等细节。通过分析这些数据,网管员就可以知道网络中到底有什么样的数据包在活动了。附: <br/> 数据包的结构 <br/> 数据包的结构非常复杂,不是三言两语能够说清的,在这里我们主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。 <br/> 数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 <br/> 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。 <br/> 第十六个:什么是IPX <br/> IPX(Internetwork Packet eXchange‘网络报文分组交换’)是Novell公司用于Netware网络操作系统的通信协议。基于此协议可实现客户机/服务器模式的局域网,因此在局域网领域被广泛采用。随着Internet和Intranet的迅速发展,这种协议将被Internet的基本通信协议TCP/IP协议取代,因为采用TCP/IP协议可建立更加简单而统一的信息交换平台 <br/> 第十七个:什么是Internet/Intranet <br/> Internet(国际互联网)是一个由各种不同类型和规模的独立运行与管理的计算机网络组成的全球范围的计算机网络。组成Internet的计算机网络包括局域网(LAN)、城域网(MAN)以及大规模的广域网(WAN)等。这些网络通过普通电话线、高速率专用线路、卫星、微波和光缆等通信线路把不同国家的大学、公司、科研机构以及军事和政府等组织的网络连接起来。Internet网络互连采用的基本协议是TCP/IP。 <br/> 任何一个地方的任意一个Internet用户都可以从Internet中获得任何方面的信息,如自然、社会、政治、历史、科技、教育、卫生、娱乐、政治决策、金融、商业和天气预报等等。Intranet(内部网)指采用Internet技术建立的企业内部专用网络。它以TCP/IP协议作为基础,以Web为核心应用,构成统一各便利的信息交换平台。Intranet可实现的功能极为广泛和强大。 </p><p> 第十八个:什么是IRC(Internet转播交谈)? <br/> IRC(Internet Relay Chat)是一种基于Internet的通信协议,中文一般称为互联网中继聊天。它是由芬兰 人Jarkko Oikarinen于1988年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过60个国家提供了IRC的服务。在人气最旺的EFnet上,您可以看到上万的使用者在同一时间使用IRC。 <br/> IRC采用客户机/服务器模式, 它能使Internet用户实时地与其他用户交谈,每个用户通过客户端程序与远程主机建立连接,远程主机接受多个来自客户端程序的连接,并实现多个用户之间的实时通话。在海湾战争期间,IRC受到了全世界的关注。当时以色列特拉维夫的居民们在空袭期间通过IRC方式,向世界各地的听众现场描述所发生的事件。 <br/> IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以 IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为\"Channel\"(频道)的地方 就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),所有的沟通就在他们所在的Channel内以不同的Nickname进行交谈。 <br/> IRC工具中国际上比较好用的是英文的mirc,在国内,比较好用的是中文的Chatkey。你可以到有关的网站下载。mirc的网址为:http://www.mirc.com (英文),Chatkey的网址是: http://www.chatkey.com (中文)。这里以中文的Chatkey为例,带你玩转IRC。 </p><p> 什么是Ping <br/> Ping是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,你就可以推断TCP/IP参数是否设置得正确以及运行是否正常。需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示TCP/IP配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信TCP/IP的正确性。 <br/> 简单的说,Ping就是一个测试程序,如果Ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送,Ping也被某些别有用心的人作为DDOS(拒绝服务攻击)的工具,曾经Yahoo就是被黑客利用数百台可以高速接入互联网的电脑连续发送大量Ping数据包而瘫痪的。 按照缺省设置,Windows上运行的Ping命令发送4个ICMP(网间控制报文协议)回送请求,每个32字节数据,如果一切正常,你应能得到4个回送应答。 Ping能够以毫秒为单位显示发送回送请求到返回回送应答之间的时间量。如果应答时间短,表示数据报不必通过太多的路由器或网络连接速度比较快。Ping还能显示TTL(Time To Live存在时间)值,你可以通过TTL值推算一下数据包已经通过了多少个路由器:源地点TTL起始值(就是比返回TTL略大的一个2的乘方数)-返回时TTL值。例如,返回TTL值为119,那么可以推算数据报离开源地址的TTL起始值为128,而源地点到目标地点要通过9个路由器网段(128-119);如果返回TTL值为246,TTL起始值就是256,源地点到目标地点要通过9个路由器网段。 通过Ping检测网络故障的典型次序 正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障: ping 127.0.0.1--这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。 ping 本机IP--这个命令被送到你计算机所配置的IP地址,你的计算机始终都应该对该Ping命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。 ping 局域网内其他IP--这个命令应该离开你的计算机,经过网卡及网络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。 ping 网关IP--这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。 ping 远程IP--如果收到4个应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。 ping localhost--localhost是个作系统的网络保留名,它是127.0.0.1的别名,每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件(/Windows/host)中存在问题。 ping www.yahoo.com--对这个域名执行Ping命...是通过DNS服务器 如果这里出现故障,则表示DNS服务器的IP地址配置不正确或DNS服务器有故障(对于拨号上网用户,某些ISP已经不需要设置DNS服务器了)。顺便说一句:你也可以利用该命令实现域名对IP地址的转换功能。 如果上面所列出的所有Ping命令都能正常运行,那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。 Ping命令的常用参数选项 ping IP -t--连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断。 ping IP -l 2000--指定Ping命令中的数据长度为2000字节,而不是缺省的32字节。 ping IP -n--执行特定次数的Ping命令 </p><p> 第十九个:什么是代码 <br/> 代码是一组有序的数字或字母的排列,是代表客观实体及其属性的符号。 <br/> 代码设计的原则包括惟一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。</p><p> <br/>
作者:
無盡等待
时间:
2005-1-12 11:25
第二十:TCP/IP协议介绍 <br/> TCP/IP的通讯协议 <br/> 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。 <br/> TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。 TCP/IP中的协议 以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的: 1. IP 网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可*的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依*IP源地址做确认的服务将产生问题并且会被非法入侵。 2. TCP 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。 面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可*性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。 3.UDP UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。 欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。 4.ICMP ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。 5. TCP和UDP的端口结构 TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。 两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认: 源IP地址---发送包的IP地址。 目的IP地址---接收包的IP地址。 源端口---源系统上的连接的端口。 目的端口---目的系统上的连接的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯</p><p> 第二十一个:什么是系统的进程 <br/> 对于hejb 的提问,不是我钻牛角尖,而是我太忙,没时间细看提问,如果我大至发现是针对主题的提问,我就答,否我就不答,见谅。最近太忙了,希望支持我,等我闲下来会好好和各位朋友交流的!!下面针对hejb的提问,我先让朋友们了解一下在任务管理器里的进程。其实在谈到进程时,还要涉及到线程的概念。 进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操 作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。 <br/> 那进程与线程的区别到底是什么?进程是执行程序的实例。例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成Notepad.exe的代码及其所需调用动态链接库的进程。每个进程均运行在其专用且受保护的地址空间内。因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。 <br/> 我这里以沙箱为例进行阐述。一个进程就好比一个沙箱。线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。因此,每个进程就象一个被保护起来的沙箱。未经许可,无人可以进出。 <br/> 实际上线程运行而进程不运行。两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。这是一种协作策略。下面让我们分析一下任务管理器里的进程选项卡。 <br/> 这里的进程是指一系列进程,这些进程是由它们所运行的可执行程序实例来识别的,这就是进程选项卡中的第一列给出了映射名称的原因。请注意,这里并没有进程名称列。进程并不拥有独立于其所归属实例的映射名称。换言之,如果你运行5个记事本拷贝,你将会看到5个称为Notepad.exe的进程。它们是如何彼此区别的呢?其中一种方式是通过它们的进程ID,因为每个进程都拥有其独一无二的编码。该进程ID由Windows NT或Windows 2000生成,并可以循环使用。因此,进程ID将不会越编越大,它们能够得到循环利用。第三列是被进程中的线程所占用的CPU时间百分比。它不是CPU的编号,而是被进程占用的CPU时间百分比。此时我的系统基本上是空闲的。尽管系统看上去每一秒左右都只使用一小部分CPU时间,但该系统空闲进程仍旧耗用了大约99%的CPU时间。第四列,CPU时间,是CPU被进程中的线程累计占用的小时、分钟及秒数。请注意,我对进程中的线程使用占用一词。这并不一定意味着那就是进程已耗用的CPU时间总和,因为,如我们一会儿将看到的,NT计时的方式是,当特定的时钟间隔激发时,无论谁恰巧处于当前的线程中,它都将计算到CPU周期之内。通常情况下,在大多数NT系统中,时钟以10毫秒的间隔运行。每10毫秒NT的心脏就跳动一下。有一些驱动程序代码片段运行并显示谁是当前的线程。让我们将CPU时间的最后10毫秒记在它的帐上。因此,如果一个线程开始运行,并在持续运行8毫秒后完成,接着,第二个线程开始运行并持续了2毫秒,这时,时钟激发,请猜一猜这整整10毫秒的时钟周期到底记在了哪个线程的帐上?答案是第二个线程。因此,NT中存在一些固有的不准确性,而NT恰是以这种方式进行计时,实际情况也如是,大多数32位操作系统中都存在一个基于间隔的计时机制。请记住这一点,因为,有时当你观察线程所耗用的CPU总和时,会出现尽管该线程或许看上去已运行过数十万次,但其CPU时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。上述也就是我们在任务管理器的进程选项卡中所能看到的基本信息列。 <br/> 说到这里,我想大家对进程有一定的认识了吧,最后我对平时见到的各进程项细述一下,有哪些是能关的,有哪些是不能关的........最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行): <br/> smss.exe Session Manager <br/> csrss.exe 子系统服务器进程 <br/> winlogon.exe 管理用户登录 <br/> services.exe 包含很多系统服务 <br/> lsass.exe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序。(系统服务) <br/> 产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务) <br/> svchost.exe 包含很多系统服务 <br/> svchost.exe <br/> SPOOLSV.EXE 将文件加载到内存中以便迟后打印。(系统服务) <br/> explorer.exe 资源管理器 <br/> internat.exe 托盘区的拼音图标 <br/> 附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少): <br/> mstask.exe 允许程序在指定时间运行。(系统服务) <br/> regsvc.exe 允许远程注册表操作。(系统服务) <br/> winmgmt.exe 提供系统管理信息(系统服务)。 <br/> inetinfo.exe 通过 Internet 信息服务的管理单元提供 FTP 连接和管理。(系统服务) <br/> tlntsvr.exe 允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务) <br/> 允许通过 Internet 信息服务的管理单元管理 Web 和 FTP 服务。(系统服务) <br/> tftpd.exe 实现 TFTP Internet 标准。该标准不要求用户名和密码。远程安装服务的一部分。(系统服务) <br/> termsrv.exe 提供多会话环境允许客户端设备访问虚拟的 Windows 2000 Professional 桌面会话以及运行在服务器上的基 <br/> 于 Windows 的程序。(系统服务) <br/> dns.exe 应答对域名系统(DNS)名称的查询和更新请求。(系统服务) <br/> 以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉 <br/> tcpsvcs.exe 提供在 PXE 可远程启动客户计算机上远程安装 Windows 2000 Professional 的能力。(系统服务) <br/> 支持以下 TCP/IP 服务:Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。(系统服务) <br/> ismserv.exe 允许在 Windows Advanced Server 站点间发送和接收消息。(系统服务) <br/> ups.exe 管理连接到计算机的不间断电源(UPS)。(系统服务) <br/> wins.exe 为注册和解析 NetBIOS 型名称的 TCP/IP 客户提供 NetBIOS 名称服务。(系统服务) <br/> llssrv.exe License Logging Service(system service) <br/> ntfrs.exe 在多个服务器间维护文件目录内容的文件同步。(系统服务) <br/> RsSub.exe 控制用来远程储存数据的媒体。(系统服务) <br/> locator.exe 管理 RPC 名称服务数据库。(系统服务) <br/> lserver.exe 注册客户端许可证。(系统服务) <br/> dfssvc.exe 管理分布于局域网或广域网的逻辑卷。(系统服务) <br/> clipsrv.exe 支持“剪贴簿查看器”,以便可以从远程剪贴簿查阅剪贴页面。(系统服务) <br/> msdtc.exe 并列事务,是分布于两个以上的数据库,消息队列,文件系统,或其它事务保护资源管理器。(系统服务) <br/> faxsvc.exe 帮助您发送和接收传真。(系统服务) <br/> cisvc.exe Indexing Service(system service) <br/> dmadmin.exe 磁盘管理请求的系统管理服务。(系统服务) <br/> mnmsrvc.exe 允许有权限的用户使用 NetMeeting 远程访问 Windows 桌面。(系统服务) <br/> netdde.exe 提供动态数据交换 (DDE) 的网络传输和安全特性。(系统服务) <br/> smlogsvc.exe 配置性能日志和警报。(系统服务) <br/> rsvp.exe 为依赖质量服务(QoS)的程序和控制应用程序提供网络信号和本地通信控制安装功能。(系统服务) <br/> RsEng.exe 协调用来储存不常用数据的服务和管理工具。(系统服务) <br/> RsFsa.exe 管理远程储存的文件的操作。(系统服务) <br/> grovel.exe 扫描零备份存储(SIS)卷上的重复文件,并且将重复文件指向一个数据存储点,以节省磁盘空间。(系统服务) <br/> SCardSvr.exe 对插入在计算机智能卡阅读器中的智能卡进行管理和访问控制。(系统服务) <br/> snmp.exe 包含代理程序可以监视网络设备的活动并且向网络控制台工作站汇报。(系统服务) <br/> snmptrap.exe 接收由本地或远程 SNMP 代理程序产生的陷阱消息,然后将消息传递到运行在这台计算机上 SNMP 管理程序 <br/> 。(系统服务) <br/> UtilMan.exe 从一个窗口中启动和配置辅助工具。(系统服务) <br/> msiexec.exe 依据 .MSI 文件中包含的命令来安装、修复以及删除软件。(系统服务) 详细说明: <br/> win2k运行进程 <br/> Svchost.exe <br/> Svchost.exe文件对那些从动态连接库中运行的服务来说是一个普通的主机进程名。Svhost.exe文件定位 <br/> 在系统的%systemroot%\system32文件夹下。在启动的时候,Svchost.exe检查注册表中的位置来构建需要 <br/> 加载的服务列表。这就会使多个Svchost.exe在同一时间运行。每个Svchost.exe的回话期间都包含一组服务, <br/> 以至于单独的服务必须依*Svchost.exe怎样和在那里启动。这样就更加容易控制和查找错误。 <br/> Svchost.exe 组是用下面的注册表值来识别。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost <br/> 每个在这个键下的值代表一个独立的Svchost组,并且当你正在看活动的进程时,它显示作为一个单独的 <br/> 例子。每个键值都是REG_MULTI_SZ类型的值而且包括运行在Svchost组内的服务。每个Svchost组都包含一个 <br/> 或多个从注册表值中选取的服务名,这个服务的参数值包含了一个ServiceDLL值。 <br/> HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Service 更多的信息 <br/> 为了能看到正在运行在Svchost列表中的服务。 <br/> 开始-运行-敲入cmd <br/> 然后在敲入 tlist -s (tlist 应该是win2k工具箱里的冬冬) <br/> Tlist 显示一个活动进程的列表。开关 -s 显示在每个进程中的活动服务列表。如果想知道更多的关于 <br/> 进程的信息,可以敲 tlist pid。 Tlist 显示Svchost.exe运行的两个例子。 <br/> 0 System Process <br/> 8 System <br/> 132 smss.exe <br/> 160 csrss.exe Title: <br/> 180 winlogon.exe Title: NetDDE Agent <br/> 208services.exe <br/> Svcs: AppMgmt,Browser,Dhcp,dmserver,Dnscache,Eventlog,<br/> lanmanserver,LanmanWorkstation,LmHosts,Messenger,PlugPlay, <br/> ProtectedStorage,seclogon,TrkWks,W32Time,Wmi <br/> 220 lsass.exe Svcs: Netlogon,PolicyAgent,SamSs <br/> 404 svchost.exe Svcs: RpcSs <br/> 452 spoolsv.exe Svcs: Spooler <br/> 544 cisvc.exe Svcs: cisvc <br/> 556 svchost.exe Svcs: EventSystem,Netman,NtmsSvc,RasMan,SENS,TapiSrv <br/> 580 regsvc.exe Svcs: RemoteRegistry <br/> 596 mstask.exe Svcs: Schedule <br/> 660 snmp.exe Svcs: SNMP <br/> 728 winmgmt.exe Svcs: WinMgmt <br/> 852 cidaemon.exe Title: OleMainThreadWndName <br/> 812 explorer.exe Title: Program Manager <br/> 1032 OSA.EXE Title: Reminder <br/> 1300 cmd.exe Title: D:\WINNT5\System32\cmd.exe - tlist -s <br/> 1080 MAPISP32.EXE Title: WMS Idle <br/> 1264 rundll32.exe Title: <br/> 1000 mmc.exe Title: Device Manager <br/> 1144 tlist.exe <br/> 在这个例子中注册表设置了两个组。 <br/> HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost: <br/> netsvcs: Reg_Multi_SZ: EventSystem Ias Iprip Irmon Netman Nwsapagent Rasauto Rasman Remoteaccess SENS Sharedaccess <br/> Tapisrv Ntmssvc <br/> rpcss :Reg_Multi_SZ: RpcSs smss.exe csrss.exe 这个是用户模式Win32子系统的一部分。csrss代表客户/服务器运行子系统而且是一个基本的子系统 <br/> 必须一直运行。csrss 负责控制windows,创建或者删除线程和一些16位的虚拟MS-DOS环境。 explorer.exe <br/> 这是一个用户的shell(我实在是不知道怎么翻译shell),在我们看起来就像任务条,桌面等等。这个 <br/> 进程并不是像你想象的那样是作为一个重要的进程运行在windows中,你可以从任务管理器中停掉它,或者重新启动。 <br/> 通常不会对系统产生什么负面影响。 internat.exe 这个进程是可以从任务管理器中关掉的。 <br/> internat.exe在启动的时候开始运行。它加载由用户指定的不同的输入点。输入点是从注册表的这个位置 <br/> HKEY_USERS\.DEFAULT\Keyboard Layout\Preload 加载内容的。 <br/> internat.exe 加载“EN”图标进入系统的图标区,允许使用者可以很容易的转换不同的输入点。 <br/> 当进程停掉的时候,图标就会消失,但是输入点仍然可以通过控制面板来改变。 lsass.exe <br/> 这个进程是不可以从任务管理器中关掉的。 <br/> 这是一个本地的安全授权服务,并且它会为使用winlogon服务的授权用户生成一个进程。这个进程是 <br/> 通过使用授权的包,例如默认的msgina.dll来执行的。如果授权是成功的,lsass就会产生用户的进入 <br/> 令牌,令牌别使用启动初始的shell。其他的由用户初始化的进程会继承这个令牌的。 mstask.exe <br/> 这个进程是不可以从任务管理器中关掉的。 <br/> 这是一个任务调度服务,负责用户事先决定在某一时间运行的任务的运行。 smss.exe <br/> 这个进程是不可以从任务管理器中关掉的。 <br/> 这是一个会话管理子系统,负责启动用户会话。这个进程是通过系统进程初始化的并且对许多活动的, <br/> 包括已经正在运行的Winlogon,Win32(Csrss.exe)线程和设定的系统变量作出反映。在它启动这些 <br/> 进程后,它等待Winlogon或者Csrss结束。如果这些过程时正常的,系统就关掉了。如果发生了什么 <br/> 不可预料的事情,smss.exe就会让系统停止响应(就是挂起)。 spoolsv.exe <br/> 这个进程是不可以从任务管理器中关掉的。 <br/> 缓冲(spooler)服务是管理缓冲池中的打印和传真作业。 service.exe <br/> 这个进程是不可以从任务管理器中关掉的。 <br/> 大多数的系统核心模式进程是作为系统进程在运行。 System Idle Process <br/> 这个进程是不可以从任务管理器中关掉的。 <br/> 这个进程是作为单线程运行在每个处理器上,并在系统不处理其他线程的时候分派处理器的时间。 <br/> winlogon.exe <br/> 这个进程是管理用户登录和推出的。而且winlogon在用户按下CTRL+ALT+DEL时就激活了,显示安全对话框。 winmgmt.exe <br/> winmgmt是win2000客户端管理的核心组件。当客户端应用程序连接或当管理程序需要他本身的服务时这个进程初始化taskmagr.exe <br/> 这个进程当然就是任务管理器了.不要忘哟. </p><p>
作者:
無盡等待
时间:
2005-1-12 11:26
第二十二个:什么是Sniffer <br/> 现在人们谈到黑客攻击,一般所指的都是以主动方式进行的,例如利用漏洞或者猜测系统密码的方式对系统进行攻击。但是其实还有一类危害非常大的被动攻击方式往往为大家所忽视,那就是利用Sniffer进行嗅探攻击。 <br/> Sniffer,中文可以翻译为嗅探器,是一种威胁性极大的被动攻击工具。使用这种工具,可以监视网络的状态、数据流动情况以及网络上传输的信息。当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。黑客们常常用它来截获用户的口令。据说某个骨干网络的路由器曾经被黑客攻人,并嗅探到大量的用户口令。本文将详细介绍Sniffer的原理和应用。 <br/> 一、Sniffer 原理1.网络技术与设备简介 <br/> 在讲述Sni计er的概念之前,首先需要讲述局域网设备的一些基本概念。 <br/> 数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会带来安全方面的问题。 <br/> 每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。 <br/> 在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。如果某个工作站的网络接口处于混杂模式(关于混杂模式的概念会在后面解释),那么它就可以捕获网络上所有的数据包和帧。 2.网络监听原理 <br/> Sniffer程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包。 <br/> 普通的情况下,网卡只接收和自己的地址有关的信息包,即传输到本地主机的信息包。要使Sniffer能接收并处理这种方式的信息,系统需要支持BPF,Linux下需要支持SOCKET一PACKET。但一般情况下,网络硬件和TCP/IP堆栈不支持接收或者发送与本地计算机无关的数据包,所以,为了绕过标准的TCP/IP堆栈,网卡就必须设置为我们刚开始讲的混杂模式。一般情况下,要激活这种方式,内核必须支持这种伪设备Bpfilter,而且需要root权限来运行这种程序,所以sniffer需要root身份安装,如果只是以本地用户的身份进人了系统,那么不可能唤探到root的密码,因为不能运行Sniffer。 <br/> 基于Sniffer这样的模式,可以分析各种信息包并描述出网络的结构和使用的机器,由于它接收任何一个在同一网段上传输的数据包,所以也就存在着捕获密码、各种信息、秘密文档等一些没有加密的信息的可能性。这成为黑客们常用的扩大战果的方法,用来夺取其他主机的控制权 3 Snifffer的分类 <br/> Sniffer分为软件和硬件两种,软件的Sniffer有 NetXray、Packetboy、Net monitor等,其优点是物美价廉,易于学习使用,同时也易于交流;缺点是无法抓取网络上所有的传输,某些情况下也就无法真正了解网络的故障和运行情况。硬件的Sniffer通常称为协议分析仪,一般都是商业性的,价格也比较贵。 <br/> 实际上本文中所讲的Sniffer指的是软件。它把包抓取下来,然后打开并查看其中的内容,可以得到密码等。Sniffer只能抓取一个物理网段内的包,就是说,你和监听的目标中间不能有路由或其他屏蔽广播包的设备,这一点很重要。所以,对一般拨号上网的用户来说,是不可能利用Sniffer来窃听到其他人的通信内容的。 4.网络监听的目的 当一个黑客成功地攻陷了一台主机,并拿到了root权限,而且还想利用这台主机去攻击同一网段上的其他主机时,他就会在这台主机上安装Sniffer软件,对以太网设备上传送的数据包进行侦听,从而发现感兴趣的包。如果发现符合条件的包,就把它存到一个LOg文件中去。通常设置的这些条件是包含字“username”或“password”的包,这样的包里面通常有黑客感兴趣的密码之类的东西。一旦黑客截获得了某台主机的密码,他就会立刻进人这台主机。 <br/> 如果Sniffer运行在路由器上或有路由功能的主机上,就能对大量的数据进行监控,因为所有进出网络的数据包都要经过路由器。 <br/> Sniffer属于第M层次的攻击。就是说,只有在攻击者已经进入了目标系统的情况下,才能使用Sniffer这种攻击手段,以便得到更多的信息。 <br/> Sniffer除了能得到口令或用户名外,还能得到更多的其他信息,比如一个重要的信息、在网上传送的金融信息等等。Sniffer几乎能得到任何在以太网上传送的数据包。 <br/> Sniffer是一种比较复杂的攻击手段,一般只有黑客老手才有能力使用它,而对于一个网络新手来说,即使在一台主机上成功地编译并运行了Sniffer,一般也不会得到什么有用的信息,因为通常网络上的信息流量是相当大的,如果不加选择地接收所有的包,然后从中找到所需要的信息非常困难;而且,如果长时间进行监听,还有可能把放置Sniffer的机器的硬盘撑爆。5.一个简单的Sniffer程序 下面是一个非常简单的C程序,它可以完成一般的监听功能,/* */中的内容是本文的注解。/*下面是包含进行调用系统和网络函数的头文件*/ #include〈stdio.h〉 <br/> #include〈sys/socket.h〉 <br/> #include〈netinet/in.h〉 <br/> #include〈arpa/inet.h〉 <br/> /*下面是IP和TCP包头结构*/ <br/> struct IP{ <br/> unsigned int ip_length:4; <br/> /*定义IP头的长度*/ <br/> unsigned int ip_version:4; <br/> /*IP版本,Ipv4 */ <br/> unsigned char ip_tos; <br/> /*服务类型*/ <br/> unsigned short <br/> ip_total_length; /*IP数据包的总长度*/ <br/> unsigned short ip_id; <br/> /*鉴定城*/ <br/> unsigned short ip_flags; <br/> /*IP 标志 */ <br/> unsigned char ip_ttl; <br/> /*IP 包的存活期*/ <br/> unsigned char ip_protocol; <br/> /*IP 上层的协议*/ <br/> unsigned short ip_cksum; <br/> /*IP头校验和*/ <br/> unsigned int ip_source ; <br/> /*源IP地址*/ <br/> unsigned int ip_source; <br/> /*目的IP地址*/ <br/> }; <br/> struct tcp{ <br/> unsigned short tcp_source_port; <br/> /*定义TCP源端口* <br/> unsigned short tcp_dest_port; <br/> /*TCP目的端口*/ <br/> unsigned short tcp_seqno; <br/> /*TC P序列号*/ <br/> unsigned int tcp_ackno; <br/> /*发送者期望的下一个序列号*/ <br/> unsigned int tcp_res1:4; <br/> /*下面几个是TCP标志*/ <br/> tcp_hlen:4 <br/> tcp_fin:1, <br/> tcp_syn:1, <br/> tcp_rst:1, <br/> tcp_psh:1, <br/> tcp_ack:1, <br/> tcp_urg:1, <br/> tcp_res2:2; <br/> unsignd short tcp_winsize; /*能接收的最大字节数*/ <br/> unsigned short tcp_cksum; <br/> /* TCP校验和*/ <br/> unsigned short tcp_urgent; <br/> /* 紧急事件标志*/ <br/> };<p> /*主函数*/ <br/> int main() <br/> { <br/> int sock,bytes_recieved,fromlen; <br/> char buffer[65535]; <br/> struct sockaddr_in from; <br/> /*定义socket结构*/ <br/> struct ip ip; <br/> /*定义IP和TCP*/ <br/> struct tcp *tcp; <br/> sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP); <br/> /* 上面是建立socket连接,第一个参数是地址族类型,用INTERNET类型*/ <br/> /* 第二个参数是socket类型,这里用了SOCK_RAW,它可以绕过传输层*/ <br/> /* 直接访问IP层的包,为了调用SOCK_RAW,需要有root权限*/ <br/> /* 第三个参数是协议,选IPPROTO_TCP指定了接收TCP层的内容*/ <br/> while(1) <br/> /*建立一个死循环,不停的接收网络信息*/ <br/> { <br/> fromlen=sizeof from; <br/> bytes_recieved=recvfrom(sock,buffer,sizeofbuffer,0,(struct sockaddr *)&from,&fromlen); <br/> /*上面这个函数是从建立的socket连接中接收数据*/ <br/> /*因为recvfrom()需要一个sockaddr数据类型,所以我们用了一个强制类型转换*/ <br/> print("\nBytes received ::: %5d\n",bytes_recieved); <br/> /*显示出接收的数据字节数*/ <br/> printf("source address ::: %s\n",inet_ntoa(from.sin_addr)); <br/> /*显示出源地址*/ <br/> ip=(struct ip *)buffer; <br/> /*把接收的数据转化为我们预先定义的结构,便于查看*/ <br/> printf("IP header length ::: %d\n",ip->ip_length); <br/> /*显示IP头的长度*/ <br/> print("
rotocol ::: %d\n",ip->ip_protocol); <br/> /*显示协议类型,6是TCP,17是UDP*/ <br/> tcp=(struct tcp *)(buffer + (4*ip->ip_iplength)); <br/> /*上面这名需要详细解释一下,因为接收的包头数据中,IP头的大小是固定的4字节*/ <br/> /*所以我用IP长度乘以4,指向TCP头部分*/ <br/> printf("Source port ::: %d\n",ntohs(tcp->tcp_source_port); /*显示出端口*/ <br/> printf("Dest prot ::: %d\n",ntohs(tcp->tcp_dest_port));/*显示出目标端口*/ </p><p> 以上这个C程序是为了说明Sniffer的接收原理而列举的一个最简单的例子,它只是完成了Sniffer的接收功能,在运行它之前,我们还需要手工把同卡设为混杂模式,在root权限下用如下命令设置: ifconfig eth0 promisc 假设etho是你的以太网设备接口,然后运行编译好的程序,就可以看到接收的数据包了。 <br/> 这个程序虽然简单,但是它说明了Sniffer的基本原理,就是先把同卡设备设为混杂模式,然后直接接收IP层的数据。 <br/> 当然这个程序的功能也太简单,只能显示源地址、目标地址和源端口、目标端口等极为简单的信息,这对于黑客来说是没有什么用处的,黑客要的是密码之类的信息,这可以使用一些免费的Sniffer程序来完成<br/>
作者:
無盡等待
时间:
2005-1-12 11:27
呵呵 差点没死
作者:
爱呢?
时间:
2005-1-12 16:15
提示:
作者被禁止或删除 内容自动屏蔽
作者:
無盡等待
时间:
2005-1-13 20:45
丢死
作者:
神的化身
时间:
2005-4-16 11:15
看了半个小时<br/> 就只看得懂一点~~~<br/>
作者:
無盡等待
时间:
2005-4-18 08:12
呵呵 不错了 有些人还什么都没懂先
作者:
saviour
时间:
2005-4-22 09:01
跌地,在ZHU你才看懂一点啊,大概看过一篇,基本上的东西我都看过,都不知道他是从哪个古董店里找出来的,哎,啊ZHU好想你啊,好久不见你了。
作者:
你够狠我够蠢
时间:
2005-4-25 08:10
。。。。。。。。<br/> 要死了。这么鬼多,有些东西老师不是教过了嘛。
作者:
無盡等待
时间:
2005-4-25 09:21
记下先 以后有用嘛
作者:
saviour
时间:
2005-5-2 09:25
[em12]老实说只有那么一点点东西有用而已
作者:
你够狠我够蠢
时间:
2005-5-8 08:15
[em12]挖哈哈,不是我说的
作者:
saviour
时间:
2005-5-8 16:00
我说的有错吗
作者:
無盡等待
时间:
2005-5-9 08:14
那是对你来说。。<br/> 对我这样没记性的 就不同了
作者:
香香
时间:
2005-5-9 08:15
真的好长啊<br/> 我好晕哦(汗!!~~~~~~)
作者:
wuqing
时间:
2005-5-11 08:53
好恐怖~~比我这几年来学的还多!有谁能亲手教我就好了
作者:
到处逛逛
时间:
2005-5-12 09:28
看完文章都被淹死罗..............虽然文字多,实用的就少了点!!!<br/> 下次去网站找些精华来发啊!
作者:
阳光Q仔
时间:
2005-7-26 16:38
我晕死了 ~ 一个字长 啊!!!!
作者:
ws845415
时间:
2006-1-4 17:54
太长了 没时间看 不要删啊 用空再来逛逛
作者:
layo
时间:
2006-3-10 16:50
唉。。这么长。死人咯。
欢迎光临 广西经贸职业技术学院论坛 (http://gxjmbbs.com/)
Powered by Discuz! X3.2