Chinaunix首页 | 论坛 | 博客
  • 博客访问: 275297
  • 博文数量: 188
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -30
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-29 11:17
文章分类
文章存档

2013年(8)

2012年(5)

2011年(13)

2010年(26)

2009年(63)

2008年(20)

2007年(32)

2006年(21)

分类:

2009-08-26 22:14:48

nmap使用方法
描述

   nmap被开发用于允许系统管理员察看一个大的网络系统有哪些主机以及其上运行何种服务。它支持多种协议的扫描如UDP,TCP connect(),TCP SYN (half open), ftp proxy (bounce attack),Reverse-ident, ICMP (ping sweep), FIN, ACK sweep,Xmas Tree, SYN sweep, 和Null扫描。你可以从SCAN TYPES一节中察看相关细节。nmap还提供一些实用功能如通过tcp/ip来甄别操作系统类型、秘密扫描、动态延迟和重发、平行扫描、通过并行的PING侦测下属的主机、欺骗扫描、端口过滤探测、直接的RPC扫描、分布扫描、灵活的目标选择以及端口的描述。  

   对非ROOT的用户来说,nmap的正式版可以做很多重要的东西了。不幸的是部份关键的核心功能(比如raw sockets)需要root权限。所以尽量以root的身份运行nmap。  

  运行nmap后通常会得到一个关于你扫描的机器的一个实用的端口列表。nmap总是显示该服务的服务名称,端口号,状态以及协议。状态有'open','filtered'和'unfiltered'三种。'open'指的是目标机器将会在该端口接受你的连接请求。'filtered'指的是有防火墙、过滤装置或者其它的网络障碍物在这个端口阻挡了nmap 进一步查明端口是否开放的动作。至于'unfiltered'则只有在大多数的扫描端口都处在'filtered'状态下才会出现的。  

  根据选项的使用,nmap还可以报告远程主机下面的特性:使用的操作系统、TCP连续性、在各端口上绑定的应用程序用户的用户名、DNS名、主机是否是个smurf地址以及一些其它功能。  

  选项
  ----*  

  这些选项通常都是可组合使用的。使用参数可以精确地定义一个扫描模式。nmap将会尽力捕捉并对不规范的参数组合作出提示。如果你急于开始,你可以跳过本文未尾的示例节——那儿有最基本的使用方法的示范。你也可以使用nmap -h来打开关于nmap选项参数的简介。
  
扫描类型
  --------*  

  -sT TCP connect()扫描:这是对TCP的最基本形式的侦测。在该操作下,该connect()对目标主机上你感兴趣的端口进行试探,如果该端口被监听,则连接成功——否则代表这个端口无法到达。这个技术的很大好处就是你无须任何特殊权限,在大多数的UNIX系统下这个命令可以被任何人自由地使用。

  但是这种形式的探测很容易被目标主机察觉并记录下来。因为服务器接受了一个连接但它却马上断开,于是其记录会显示出一连串的连接及错误信息。  

  -sS TCP SYN 扫描:这类技术通常涉及一种“半开”式的扫描——因为你不打开完整的TCP连接,你发送一个SYN信息包就象你要打开一个真正的连接而且你在等待对方的回应。一个SYN│ACK(应答)会表明该端口是开放监听的。一个RST(空闲?)则代表该端口未被监听。如果SYN│ACK的回应返回,则会马上发送一个RST包来中断这个连接(事实上是我们的系统核心在干这事)。这种扫描的最大好处是只有极少的站点会对它作出记录,但是——你需要有root权限来定制这些SYN包。  

  -sF -sX -sN

  Stealth FIN,Xmas Tree 或者Null扫描模式:有时甚至SYN扫描都不够隐蔽——一些防火墙及信息包过滤装置会在重要端口守护,SYN包在此时会被截获,一些应用软件如Synlogger以及Courtney对侦测这类型的扫描都是行家。所以呢,在另一方面要有更进一步的扫描能在不遇到麻烦的情况下通过它们……

  这个主意是关闭的端口会对你发送的探测信息包返回一个RST,而打开的端口则对其忽略不理(你可以参阅RFC 973 PP64)。所以FIN扫描使用空的FIN信息包作为探针、Xmas tree使用FIN,URG,PUSH标记、Null扫描则不用任何标记。但是不幸的是微软以他们一贯的风格不理睬这一标准……所以这一扫描在WINDOWS9X以及NT下不能工作。

  从积极方面来讲,这其实也是一个很好的区分两种平台的办法——如果这次扫描发现了打开的端口,那你就能明白这台机器不是运行WINDOWS。如果-sF,-sX,-sN的扫描显示所有端口都是关闭的但一个SYN(-sS)扫描却显示有打开端口,那你就能大致推断它是WINDOWS平台。这只是一个简单应用,因为现在nmap已经有了更彻底的操作系统判别方法——当然它的原理类似上面所提到的.

  这些平台包括Cisco, BSDI, HP/UX, MVS, 和IRIX。  

   -sP

  Ping扫描:有时你仅希望了解网络上有哪些主机是开放的,nmap可以通过对你指定的IP地址发送ICMP的echo request信息包来做到这一点,有回应的主机就是开放的啦。但令人讨厌的是一些站点比如microsoft.com对echo request包设置了障碍。这样的话nmap还能发送一个TCP ack包到80端口(默认),如果获得了RST返回,机器是开放的。第三个方法是发送一个SYN信息包并等待RST 或SYN/ACK响应了。作为非root的用户可以使用的,常用connect()模式。对root来说,默认的nmap同时使用ICMP和ACK的方法扫描,当然你也可以改变-P选项。注意你最好先ping一下用户,只有有回应的主机才有必要扫描,只有你不想探测任何的实际端口扫描只想大面积地搜索一下活动的主机,你可以使用此选项。
   -sU

   UDP扫描:这一方法是用来确定哪个UDP(User Datagram Protocol,RFC 768)端口在主机端开放。这一技术是以发送零字节的UDP信息包到目标机器的各个端口,如果我们收到一个ICMP端口无法到达的回应,那么该端口是关闭的,否则我们可以认为它是敞开大门的。有些人或许会认为UDP扫描是无意义的,我通常会以最近的Solaris rcpbind漏洞来提醒他们。Rpcbind会隐藏在一个非正式的UDP端口于32770口以上,因此对111进行防火墙过滤是无关紧要的.但你是否查找过在30000以上的端口是否处在监听状态中……,用UDP扫描你就能轻松地做到这一点!

   或者大家还可以想想cDc出品的Back Orifice木马(BO),它可以在Windows的机器中配置一个UDP端口,更不用说如此众多可以利用UDP的、易受攻击的服务如snmp,tftp,NFS等了。但有一点不得不提及的是UDP扫描在目标主机按照RFC 1812(4.3.2.8节)建议的那样限制ICMP错误信息的传送速率时会令人痛苦的缓慢。举例来说吧,Linux 的核心配置(在net/ipv4/icmp.h)限制了每4秒产生80次的无法到达信息——每次产生1/4秒的延迟。Solaris有着更严格的限制(大约每秒两次就会延迟),所以这要耗费相当长的时间。nmap会侦测到这种限制并自动减缓速度——这也胜过用无意义的会被目标主机忽略的大量信息包来填充这个网络。如以往一样,微软还是不在乎RFC所建议的事而且没有任何限制性措施实行于WINDOWS或NT上,这样我们可以把多达65K的端口以极高的速度扫描完毕,欢呼吧!  

   -sR

   RPC扫描:这一方法是结合nmap多种扫描的一种模式,它取得所有的TCP/UDP开放端口并且用SunRPC程序NULL命令来试图确定是否是RPC端口并且——如果是的话,其上运行什么程序,何种版本。这样你可以在目标主机躲在防火墙后或者由TCP wrappers防护着,它都能取得效果近似于'rpcinfo -p'的信息。但Decoys现在还不能正常工作在RPC扫描下,在以后我会在UDP RPC扫描中加入Decoy支持的。  

   -b(ftp relay host)

  FTP 跳跃攻击:FTP协议的一个有趣的特点是它支持代理FTP连接(RFC 959),用另一句话说,我可以从evil.com连接到一个FTP服务器target.com并且要求目标主机发送文件到因特网的*任何地方*!在1985年这一RFC被写下来后这一特性便渐渐施行,但在现在的网络上我们不允许人们能够随意地“抢劫”一个FTP SERVER并请求数据到任何地方。所以在Hobbit于1995年写下的有关这一协议缺陷时说到“它可以用来从许多站台上发出事实上难以追查的信件、新闻以及攻击性行为——填充你的硬盘,试图使防火墙失效或者更多是烦人而无意义的骚扰。我开发出它来是为了通过一个代理FTP服务器察看TCP端口,这样你可以连上一个在防火墙后的FTP服务器然后扫描它看来仿佛堵塞的端口(139是很好的例子)。如果FTP服务器允许你读甚至写进某些目录(比如/incoming),你可以发送任意信息到你发现打开了的端口(当然nmap不干这事)。对于你要通过'b'选项来使主机成为你的代理时,标准的URL格式形式是:username:password@server:port。要确定一个服务器是否易受这样的攻击,你可以看看我在Phrack 51期上的文章。它的更新版本在http://www.insecure.org/nmap。

  -D

  这是一种带有诱骗模式的扫描,在远程主机的连接记录里会记下所有你所指定的诱骗性的地址。这样的话他们的数据存储器会显示有一些端口扫描从某个IP发起,然而他们无法辩别哪个是真正的IP而哪个是用来作为掩护的,这可以击败一些通过路由进行跟踪的行为,所以它是一项隐藏你的IP的很实用的技术。用逗号分隔各个欺骗地址,你可以随意地将'me'放进任意一个你希望显示真实IP的地方,如果你将'ME'放在第六位甚至最后,有些端口扫描记录器(比如Solar Designer's excellent scanlogd)可能根本就不会显示你的IP,如果你不用'ME'的话,nmap将会将它随机放置。

  记住你用来诱骗的主机必须是开放的或者你可以半开扫描一下你的目标。因为要从一堆实际上没有用的IP地址里判别出哪个是真正的入侵者是相当容易的。你还可能要用IP地址来代替名字,这样诱骗主机的nameserver logs里才不会记录下你来。还要记得有些(愚蠢的)"端口扫描探测器"会拒绝到达主机的端口扫描尝试。这样你无意中就会导致你扫描的主机与“诱骗主机”连接的丢失,这样可能会带来一个很大的问题是——如果这个“诱骗主机”是一个网上的网关或者甚至就是其本地的机子,其连接一样会断开!所以大家最好小心使用这个参数——从道德上的原因——这仅仅是一个诱骗,不是么?这种诱骗可以用在最初的ping扫描(用ICMP,SYN,ACK或其它)与实际的端口状态扫描中,它还可以用于远程OS的判别(-O)。当然如果你写入太多的诱骗地址也是没什么用处的,那只能减缓扫描速度以及降低一些精确度。而且一些指令处理系统还可能会过滤掉你的欺骗包,虽然多数(几乎是全部了)不会对欺骗包作出任何限制。  

    目标说明
  --------*  

  所有不带参数的选项都会被视为是nmap的目标主机描述。最简单的实例是仅仅在命令行列出单一的主机名或IP地址。如果你希望扫描一个IP地址的子网,你可以在主机名和IP地址中加入'/mask'。mask必需是在0(扫描整个网络)和32(特定的单一主机)。用/24则表明扫找一个C类地址,而/16则是扫描B类

  nmap还有一些更有用的符号说明方式可以让你用list/ranges来为每个元素指定IP地址。比如你要扫描B类网址128.210.*.*,则可以用'128.210.*.*'或'128.210.0-255.0-255'或者甚至是'128.210.1-50,51-255.1,2,3,4,5-255'来表示。当然你也可以用上面提过的mask来表示:'128.210.0.0/16'。所有这些都是等价的,当你用'*'的时候记住多数的shell都要求用定界符比如引号将其标注。  

  另一个有趣的是你可以用其它方法将整个网络“分割”,比如你可以用'*.*.5.6-7'来扫描所有以.5.6或 .5.7结束的IP地址。要得到更多信息,你可以看看示例节。  

  扫描范例
  --------*

  这里是一些运用nmap的扫描范例,从最简单普通的到有一些复杂的例子都有。注意这里有真实的数字以及一些真实的域名——这样可以让扫描行为看起来更具体。在这里你可以用自己的网络里的名称代替其中的addresses/names。虽然端口扫描的结果分析可能会使某些人容易攻击,但我不认为它是不合法的,我曾经扫描过成百上千的机器但只收到一次抱怨。但我不是律师而一些(anal)人们对nmap探测觉得烦恼,所以最好在取得允许后扫描或者——冒险,后果由你自己承担。  

  nmap -v   

  这样对target.example.com上所有的保留TCP端口做了一次扫描,-v表示用详细模式。  

  nmap -sS -O /24

  这将开始一次SYN的半开扫描,针对的目标是target.example.com所在的C类子网,它还试图确定在其上运行的是什么系统。这需要root权限,因为用到了半开扫描以及系统侦测。  

  nmap -sX -p 22,53,110,143,4564 128.210.*.1-127  

  发送一个Xmas tree扫描到B类128.210所在子网的一半范围内,我们将检测系统是否运行sshd, DNS, pop3d, imapd, 或者端口4564。要注意由于微软TCP堆栈的不完善,Xmas扫描将不能在其平台上运行成功,同样的问题可能存在于CISCO, IRIX, HP/UX, 和BSDI。  

  nmap -v -p 80 '*.*.2.3-5'  

  这是定位一个网域(将整个网络分隔成许多小部份)再进行扫描的方式,这里扫描的是所有以.2.3,.2.4, 或.2.5结束的IP地址。如果你是ROOT的话也可以用-sS。同样的你可以从127开始搜寻更多有趣的机器,你可以用'127-222'替代前面的星号——恕我直言,那个区域有着大量有趣的机器。 

  host -l chkh.com │ cut '-d ' -f 4 │ ./nmap -v -i -  

  做一个DNS zone transfer来寻找在company.com进而的主机并且将IP地址送至nmap(feed the IP addresses to nmap)。这个命令是在我的GNU/Linux平台下运行的,你可能需要用不同的选项参数或者不同的操作系统。

阅读(806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~