论坛: 菜鸟乐园 标题: WIN常见漏洞攻击与防范实战>第二章 复制本贴地址    
作者: wish [wish259]    论坛用户   登录



第二章 攻击前奏――信息收集与端口扫描

2.1 什么是信息收集

中国有句古话叫做:“知己知彼,百战不殆!”

在黑客界这些午夜的幽灵都在默默的遵守着这条规则:从不进入自己不了解情况的主机。作为一个基本的准则,信息的收集在这种没有硝烟的战争中,显得格外的重要。一个成功的黑客不仅要掌握大量的计算机网络技术、编程技术等,在某些时候还要懂得社会工程学基础。只有完美的利用这些东西,充分发挥你的聪明才智,才能了解到更多的情报,以增加入侵的成功率。

什么是信息收集呢?信息收集就是对目标主机及其相关设施、管理人员进行非公开的检测、了解,用于对攻击目标安全防卫工作的掌握,这是一次攻击前奏,也是基础。

一个真实的故事:

几年前的一个早晨,一群陌生人走进了一家大型远洋运输公司并控制了该公司的整个计算机网络。他们是怎么做到的?是通过从该公司的许多不同的员工那里一点点的获得帮助来达到目的的。首先,他们在实地踩点的两天之前已经对该公司进行了研究了解。例如,通过给人力资源部门打电话获得了公司重要员工的姓名列表。然后,他们在大门前假装丢失了钥匙让别人开门放他们进去。最后在进入三楼的安全区域时他们又故伎重演,这次他们丢失的是他们的身份标志,而一名员工面带微笑的为他们开了门。

这群陌生人知道该公司的CFO那时不在公司,所以他们进入了他的办公室并从他没有锁定的个人电脑中获取了财务信息。他们将公司的垃圾堆翻了个遍,找到了各种有价值的文档。他们得到了管理垃圾的门房的帮忙使他们可以将这些东西顺利的带出了公司。这些人同样学会了模仿CFO的声音,所以他们可以在电话中冒充CFO的身份装作很焦急的样子来询问网络密码。自此,他们最后终于可以使用常规的黑客手段来获取系统的超级用户权限。

在这个案例中这些陌生人所扮演的角色是CFO请来对自己的计算机进行安全检查的网络安全顾问,而公司的员工对此都不知情。他们可以在没有从CFO那里获得任何权利的情况下运用社会工程学让自己畅通无阻。

2.2 信息搜集的步骤

1. 制定目标:

这里我们通常分为两种:

(1)有着明显的攻击目的、明确的攻击目标;

(2)随机扫描而至,事先没有明确的攻击意识,后来由于某些原因(如网站自身的缺陷等)制定的目标。

2.具体信息收集:

大概又可以分两个方面的:

(1)使用功能强大的系统安全检测软件对目标系统实施多方位安全检测,如使用流光,sfind等检测工具,

(2)使用社会工程学原理,进行入侵前的信息搜集,这个往往能起到一想不到的效果。

3. 总结整理收集结果,进行可行性分析:

这里将包括对方主机的物理情况、管理制度情况、管理员素质习惯等情况,绘制网络图。

示例说明:

目标制定:61.135.132.XXX(假想)

范性收集:(这里的输出都经过适当的修改)

单击“开始”→“运行”并输入如图2-1指令:

图2-1

点击确定后,将得到以下结果,如图2-2:

图2-2

上面的这些输出代表什么意思?“61.135.131.XXX”表示是所Ping网址的IP地址。“ time=62ms ”是指向那台计算机发送消息的往返时间,单位是微秒;“Minimum=55ms”表示最小往返时间为5.5ms,“Maximum =69ms”表示最大往返时间为69ms,“Average=62ms”表示平均时间为62ms。

其它信息收集方法请参考2.3。

2.3 Windows自带的网络信息查询命令

这里我们详细给出以下几个Windows系统自带的网络方面的命令,熟练使用它们将会给信息收集和安全防御带来极大的便利。

1. Ping

这是TCP/IP协议中最有用的命令之一。

它给另一个系统发送一系列的数据包,该系统本身又发回一个响应,这条实用程序对查找远程主机很有用,它返回的结果表示是否能到达主机,宿主机发送一个返回数据包需要多长时间。

比如大家可能都知道的一个命令“ # Ping -f -s 65000 XXX.XXX.XXX.XXX”,其实这个命令主要是用来看对方应答的速度,如果怎么Ping 得到的结果都是“request time out”。那恐怕你根本就不用你去找这台主机了,它不在你的射程之内。

下面是Ping命令的一些常用参数:

-a 将目标的机器标识转换为IP地址;

-t 若使用者不人为中断会不断的Ping下去;

-c count 要求Ping命令连续发送数据包,直到发出并接收到count个请求;

-d 为使用的套接字打开调试状态;

-f 是一种快速方式Ping。使得Ping输出数据包的速度和数据包从远程主机返回一样快,或者更快,达到每秒100次。在这种方式下,每个请求用一个句点表示。对于每一个响应打印一个空格键;

-i seconds 在两次数据包发送之间间隔一定的秒数。不能同“-f”一起使用;

-n 只使用数字方式。在一般情况下Ping会试图把IP地址转换成主机名。这个选项要求Ping打印IP地址而不去查找用符号表示的名字。如果由于某种原因无法使用本地DNS服务器这个选项就很重要了;

-p pattern 拥护可以通过这个选项标识16 pad字节,把这些字节加入数据包中。当在网络中诊断与数据有关的错误时这个选项就非常有用;

-q 使Ping只在开始和结束时打印一些概要信息;

-R 把ICMP RECORD-ROUTE选项加入到ECHO_REQUEST数据包中,要求在数据包中记录路由,这样当数据返回时Ping就可以把路由信息打印出来。每个数据包只能记录9个路由节点。许多主机忽略或者放弃这个选项;

-r 使Ping命令旁路掉用于发送数据包的正常路由表;

-s packetsize 使用户能够标识出要发送数据的字节数。缺省是56个字符,再加上8个字节的ICMP数据头,共64个ICMP数据字节;

-v 使Ping处于Verbose方式。它要Ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包。

2. WinIPcfg

这是用来看自己IP位址的小工具,Win98自带,NT里则网络监视器里就能看到IP了。这种程序网上其实相当之多,但既然“自带”,又何须外求,何况网上下载的黑客的东东里有没有特洛伊犹未可知。再说,如果你不是在自己的“爱机”上运行,岂不是就没法干活?――哈,不好意思,跑题了,但――接着跑两句:可以把一些常用的、经典的工具上传到网上,当作一个备份,什么时候在网吧、某家公司要干活的话,直接下载就是一个完整无缺的工具包了。

这个东东相当简单,直接在DOS下键入命令就是了,没有什么参数。

3. Tracert

是验证通往远程主机路径的实用程序

用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

参数:

-d Do not resolve addresses to hostnames(不将IP转为主机名)

-h maximum_hops Maximum number of hops to search for target(最大跟踪数量)

-j host-list Loose source route along host-list

-w timeout Wait timeout milliseconds for each reply(time out 的时间)

最简单的用法就是“tracert hostname”,其中“hostname”是计算机名或你想跟踪其路径的计算机的IP地址。Tracert将返回数据包借以到达最终目的地的各种IP地址。

4. Net

这是个非常棒的东西。

NET HELP SERVICES:列出用户可以启动的网络服务。

NET HELP SYNTAX:解释如何阅读 NET HELP 语法行。

NET HELP command | MORE:用于逐屏显示帮助。

说说常用的一个命令吧:

net use

这个命令的语法是:NET USE [devicename | *] [\computernamesharename[volume] [password | *]

[/USER:[domainname]username]

[/DELETE] | [/PERSISTENT:{YES | NO]}

NET USE [devicename | *] [password | *] [/HOME]

NET USE [/PERSISTENT:{YES | NO}]

NET USE 用于将计算机与共享的资源相连接,或者切断计算机与共享资源的连接。当不带选项使用本命令时,它会列出计算机的连接。(其余命令参考附录2)

5.Devicename

指定一个名字以便与资源相连接,或者指定要切断的设备。有两种类型的设备名:磁盘驱动器(D:至 Z:)和打印机 (LPT1:至 LPT3:)。输入一个星号来代替一个指定的设备名可以分配下一个可用设备名。

(1)\computername指控制共享资源的计算机的名字。如果计算机名中包含有空字符,就要将双反斜线 (\) 和计算机名一起用引号 (“ ”)括起来。计算机名可以有1到15个字符。

(2)sharename 指共享资源的网络名字。

(3)volume 指定一个服务器上的 NetWare 卷。用户必须安装 Netware 的客户服务.

(4)(Windows NT 工作站) 或者 Netware 的网关服务 (Windows NT 服务器) 并使之与NetWare 服务器相连。

(5)password 指访问共享资源所需要的密码。

(6)* 进行密码提示。当在密码提示符下输入密码时,密码是不会显示的。

(7)/USER 指定连接时的一个不同的用户名。

(8)domainname 指定另外一个域。如果缺省域,就会使用当前登录的域。

(9)username 指定登录的用户名。

(10)/HOME 将用户与他们的宿主目录相连。

(11)/DELETE 取消一个网络连接,并且从永久连接列表中删除该连接。

(12)/PERSISTENT 控制对永久网络连接的使用。其缺省值是最近使用的设置。

YES 在连接产生时保存它们,并在下次登录时恢复它们。

NO 不保存正在产生的连接或后续的连接;现有的连接将在下次登录时被恢复。可以使用 /DELETE 选项开关来删除永久连接。

在浏览器中输入 file:///\XXX.XXX.XX.XXXc$

则网上共享的C盘内容就会显示出来了,就仿佛用浏览器上FTP站点看到的一样。各位不妨试试,还可试试举一反三……

6.At

排定在特定的日期和时间运行某些命令和程序。

运行 AT 命令之前必须先启动 Schedule 服务。

C:>net start schedule

Schedule 正在启动服务.....

Schedulw 服务启动成功。

AT [\computername] [ [id] [/DELETE] | /DELETE [/YES]

AT [\computername] time [/INTERACTIVE]

[ /EVERY:date[,...] | /NEXT:date[,...] “command”

(1)\computername 指定远程计算机。 如果省略这个参数命令会被排定在本机上运行。

(2)id 指定给排定进度命令的识别号。

(3)/delete 删除某个已排定进度的命令。如果省略标识,计算机上所有已排定进度的命令都会被删除。

(4)/yes 用于删除所有作业,且不想在运行删除时显示确认信息 。

(5)time 指定命令运行的时间。

(6)/interactive 允许作业在运行时,与用户通过桌面交互。

(7)/every:date[,...] 指定在每周或每月的某日 (或某几日) 运行命令。

如果省略日期,则默认为在每月的本日运行。

(8)/next:date[,...] 指定在下一个指定日期 (如,下周三),运行命令。

如果省略日期,则默认为在每月的本日运行。

(9)Command 准备运行的 Windows NT 命令或批处理文件。

7. Netstat

这是一个观察网络连接状态的实用工具。

它能检验IP的当前连接状态,在断定你的基本级通信正在进行后,就要验证系统上的服务。这个服务包括检查正在收听输入的通信量和/或验证你正在创建一个与远程站点的会话,它可以很轻松地做到这一点。网上也可以看到很多如X-netstat之类的工具,是Windows界面的,更加直观而已,并没有多什么功能,这个命令的具体用法如下:

Displays protocol statistics and current TCP/IP network connections.(显示协议与当前网络连接)

Netstat [-a] [-e] [-n] [-s] [-p proto] [-r] [interval]

这是在本机未连接网络时运行的,第一列为协议,第二列为本地地址,第三列是与你进行连接的主机或用户的IP位址(IP后冒号之后的数字是端口号),最后一列是状态。这个命令以-n和-a的参数较常使用,读者可以参考使用。

2.4 什么是端口扫描

在正式开始介绍本节内容前,我们先打个比方:在一个充斥着0和1的星球上有无数的城堡,它们大多看起来壁垒森严,远远的把崇尚自由的人隔离在了自己的躯体之外,而在这些堡垒中,通常都留出了很多供人进出使用的道路,最初一些聪明的人发现,这些通道的功能各自不同,而且有规律可寻,如果仔细寻找,总能找到一些由于管理者或是城堡建造者的粗心大意而留下的漏洞供人们自由的进出城堡的内外,而完全不受城堡的管理者的约束。

在上面这个例子中,我们完全可以把星球本身看成是我们的网络,而城堡则是网络中一个个的主机,而计算机网络技术中的端口,我们通常可以形象的看作是城堡的一条条连接内外的道路。请大家注意,我们这里说的端口不是计算机硬件的I/O端口,而是软件形式上的概念。

比如说:在一台服务器上开了FTP服务和HTTP服务,为了保证两个服务的互不干扰,人们区分了他们进行通信时的出入口,如定义FTP服务通过21端口进行通信,而HTTP服务则通过80端口。这就是计算机为什么可以同时提供那么多服务而互不干扰的原因,由此我们看到了端口的重要性。

计算机提供服务类型的不同,端口也分为了两大类,一种是TCP端口,另一种是UDP端口。而计算机间相互通信也分为两大类,一种是发送方发送外信息后需要接受方响应这个信息并给与应答,及有应答方式;另一种则是发送发在发送外信息后不去理会接受方是否收到信息,及无应答方式。这两种计算机通讯方式与上边的两大类端口一一对应,即有应答(TCP端口)与无应答(UDP端口)。

端口扫描者,对网络中主机的端口进行一定规则的批量检测的意思,通常我们所掌握及使用的是以下三种方式:

1.是对某一特定端口进行指定IP段的检测,以了解该端口在该域段的使用情况。

通常我们使用这种扫描方式是在没有指定目标而针对某一以知存在漏洞的服务所进行的整域段的搜索。

2.是对某一特定主机进行全端口或指定端口区间的检测以了解该主机的端口使用情况。

通常我们使用这种扫描方式是在指定目标的前提下,对目标主机服务开放情况进行的检测分析,这将有助于我们尽快了解目标主机,并展开入侵。

3.前两者的综合。

通常进行这种扫描也是盲目的,没有具体攻击目标。

2.5 基于Windows的端口扫描

2.5.1常用的端口扫描技术介绍

扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息。

TCP Connect() 扫描

这是最基本的TCP扫描。操作系统提供的Connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么Connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的Connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。目标计算机的Logs文件会显示一连串的连接和连接是出错的服务消息,并且能很快的使它关闭。

TCP SYN扫描

这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样。一个Synlack的返回信息表示端口处于侦听状态。一个RST返回,表示端口没有处于侦听态。如果收到一个Synlack,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,必须要有Root权限才能建立自己的SYN数据包。

TCP FIN 扫描

有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系。有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。并且这种方法在区分Unix和NT时,是十分有用的。

IP段扫描

这种不能算是新方法,只是其它技术的变化。它并不是直接发送TCP探测数据包,是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。但必须小心。一些程序在处理这些小数据包时会有些麻烦。

TCP反向Ident扫描

Ident 协议允许看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。举个例子,连接到HTTP端口,然后用Identd来发现服务器是否正在以Root权限运行。这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。

UDP ICMP端口不能到达扫描

这种方法与上面几种方法的不同之处在于使用的是UDP协议。由于这个协议很简单,所以扫描变得相对比较困难。这是由于打开的端口对扫描探测并不发送一个“确认”,关闭的端口也并不需要发送一个错误数据包。幸运的是,许多主机在你向一个未打开的UDP端口发送一个数据包时,会返回一个“ICMP_PORT_UNRE ACH”错误。这样你就能发现哪个端口是关闭的。UDP和ICMP错误都不保证能到达,因此这种扫描器必须还实现在一个包看上去是丢失的时候才能重新传输。这种扫描方法是很慢的,因为RFC对ICMP错误消息的产生速率做了规定。同样,这种扫描方法需要具有Root权限。




地主 发表时间: 04-07-06 00:58

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号