论坛: 菜鸟乐园 标题: 如何使用nmap 复制本贴地址    
作者: laievf [laievf]    论坛用户   登录
dos中,谢谢

地主 发表时间: 02/08 12:47

回复: gefujian [gefujian]   论坛用户   登录
扫描器之王-----nmap(一) 
一。简介 
nmap用于允许系统管理员察看一个大的网络系统有哪些主机以及其上运行的何种服务程序。它支持多种协议的扫描,如udp、tcp connect()、tcp syn(半开)、ftp proxy(跳板攻击)、reverse-ident、icmp(ping)、fin、ack sweep、xmas tree、syn sweep和null扫描。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[扫描选项][扫描目标]即可进行扫描分析。 
使用扫描选项可以精确的定义扫描的模式。下面就介绍一些nmap的常用扫描选项,这些选项通常都是可组合使用的。即使错误的使用了选项也没有关系,nmap将会对不规范的参数组合作出提示。如果你在扫描过程中需要查询nmap的选项用法,可以使用nmap -h来打开关于nmap选项参数的简介。 
-sT:tcp connect()扫描 
这是对tcp得最基本形式的侦测。在该操作下,该connect()对目标主机上感兴趣的端口进行试探,如果该端口被监听,则连接成功,否则代表这个端口无法到达。 
-sS:tcp syn扫描 
“半开”式的扫描----不打开完整的tcp连接,发送一个syn信息包并等待对方的回应。这种扫描的的最大好处是只有极少的站点会对他作出记录,但是需要有root权限来定制这些syn包。 
-sF -sX -sNtealth FIN、Xmas Tree或者Null扫描模式 
有时甚至syn扫描都不够隐蔽,一些防火墙及信息包过滤装置会在重要端口守护,syn包在此时会被截获,一些应用软件如Synlogger以及Courtney对侦测这种类型的扫描都是行家。所以,要有更进一步的扫描。 
由于关闭的端口会对发送的探测信息返回一个rst,而打开得端口则对其忽略不理(想要了解详细资料可以参阅rfc973第64页)。所以fin扫描使用空的fin信息包作为探针,Xmas tree使用fin、urg、push标记,Null扫描则不用任何标记。但是不幸的是,微软以它一贯的风格不理睬这一标准,所以这一扫描在windows 9x以及nt下不能工作。 
从积极的方面来讲,这其实也是一个很好的区分两种平台的办法---如果这次扫描发现了打开的端口,那就能知道这台机器运行的不是windows。如果-sF、-sX、-sN的扫描显示所有端口都是关闭的,但一个syn(-sS)扫描却显示有打开端口,那就能大致推断他是windows平台。这只是一个简单应用,因为现在nmap已经有了更彻底的操作系统辨别方法。 
-sPing扫描 
有时攻击者仅希望了解网络上有哪些主机是开放的,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端口在主机端开放。这一技术是发送零字节的udp信息包到目标机器的各个端口,如果收到一个icmp端口无法到达的回应,那么该端口是关闭的,否则可以认为它是敞开的。有些人或许认为udp扫描是无意义的,但现在的solaris rpcbind漏洞否定了这一点。 
rpcbind会把一个非正式的udp端口隐藏在32770以上的端口,因此仅对 
rpcbind得端口(111)进行防火墙过滤是毫无用处的。通过查找30000以上的端口是否处在监听状态中就可以发现相关的rpc服务,而使用udp扫描就能轻松的做到这一点。 
或者我们还可以想想cdc出品的back orifice木马。它可以在windows的机器中配置一个udp端口,更不用说如此众多可以利用udp的易受攻击的服务,如snmp、ftp、nfs等。但有一点不得不提及的是udp扫描,在目标主机按照rfc1812建议的那样限制icmp错误信息的传送速率时,会造成及其运行非常慢。举例来说,linux的核心配置限制了每4秒产生80次得无法到达信息----每次产生1/4秒的延迟。solaris有着更严格的限制(大约每秒两次就会延迟),所以这要耗费相当长的时间。nmap会侦测到这种限制并自动减缓速度----这也胜过用无意义的、会被目标主机忽略的大量信息包来填充这个网络。微软不在乎rfc所建议的事,而且没有任何限制性措施实行与windows9x或nt上,这样我们就可以把多达65k得端口以极高的速度扫描完毕。 
------未完,待续。 



-sR:RPC扫描 
这一方法是结合nmap多种扫描的一种模式,它取得所有的tcp/udp开放端口,并且用sunrpc程序的null命令来试图确定是否是rpc端口,如果是的话,就察看其上运行的是什么程序、何种版本。这样,在目标主机多在防火墙后或者由tcp wrappers防护时,它都能取得效果近似于“rpcinfo-p”的信息。Decoy现在还不能正常工作在rpc扫描下,但相信以后会在udp rpc扫描中加入Decoy支持的。 
-b (ftp relay host):FTP跳跃攻击 
ftp协议的一个有趣的特点是它支持代理ftp连接,也就是说,可以从evil.com连接到一个ftp服务器target.com,并且要求目标主机发送文件到因特网的任何地方。ftp这一特性被公布并逐渐地施行起来。但现在的网络上不允许人们能够随意的“抢劫”一个ftp服务器,并请求数据到任何地方。所以在hobbit于1995年写下有关这一协议的缺陷时说到,它可以用来从许多站点上发出事实上难以追查的信件、新闻以及攻击性行为来填充硬盘,试图使防火墙失效或者更多的是烦人而无意义的骚扰。开发nmap是为了通过一个代理ftp服务器察看tcp端口,这样可以连上一个在防火墙后的ftp服务器,然后扫描他的看起来被关闭的端口(例如139端口)。如果ftp服务器允许读甚至写进行某些目录(比如/incoming),可以发送任意信息到打开的端口(当然nmap不能进行这项工作)。要通过“b"选项来使主机成为代理时,标准的url格式形式是:usenameassword@serverort。它的更新本本在http://www.insecure.org/nmap。下面我要说的是一些常规选项,这些选项并非必须,但有些是非常实用的。 
-P0 
在扫描前不尝试 ping主机。这是用来扫描那些不允许icmp echo请求的主机。microsoft.com就是其中的一个例子,我们必须使用-p0或者-p80来查看microsoft.com的端口。 
-PT 
用tcp的ping来确定主机是否打开。作为替代发送icmp echo请求抱并等待回应,打开的主机会返回一个rst。这一参数可以使用ping信息包被阻塞时仍能高效率的扫描一个网络/主机。对于非root的用户,可以用connect(),以如下格式设置目标探针:PT<portnumber>,默认的端口是80,因为这个端口往往被过滤。 
-PS 
这一选项是root用户使用的,能用syn(连接请求)包替代ack包,打开的主机会有一个rst(或者syn/ack,但比较少见)应答。 
―Pl 
这一选项是使用一个真正的ping(icmp echo request)包,它找到开放的主机并且将该子网中的广播地址全数搜寻----该广播地址能够到达并能正确解析ip包。如果其被大量的dos攻击时,我们就能找到它。 
-PB 
默认的ping形式,用于ack(-PT)与icmp(-pI)并行攻击,以这一形式可以通过防火墙或包过滤。 
-O 
经由tcp/ip获取“指纹”来判别主机的操作系统类型,用另一种说法,就是用一连串的信息包探测出所扫描的主机位于操作系统有关堆栈的信息,并区分其精细差异,以此判别操作系统。它用搜集到的信息建立一个“指纹”,用来同已知的操作系统的指纹相比较(the nmap-os-fingerrprints file),这样判定操作系统就有了依据。 
但有时nmap也会得到错误的诊断信息,比如系统有端口开放。但nmap返回不可识别的操作系统,这也是有可能的,这时可以用另一个办法----nmap的-d参数来测试。 
-l 
这是用ident扫描方式的参数,如Dave Goldsmith于1996年在bugtraq中所说的,这个ident协议允许通过tcp连接到拥有进程的用户名----即使这个连接不是有该进程发起的。所以可以通过ident连接到一个http端口并找出该进程是否由root运行,但这只能在“全开”的对目标端口的tcp连接中使用(像-sT扫描参数)。当用-I参数时,远程主机的ident在开放的端口接收连接查询-----很明显,如果主机不运行ident的话,它就无法正常工作。 
-f 
这个参数配置以细小的ip碎片包实现syn、fin、xmas或null扫描请求。这个想法是把tcp包头分别放在不同的信息包中,使包过滤器难以运作,而后黑客就可以闯进系统作她想做的事了。但要注意,某些部分程序可能对这些小信息包处理错误。比如说sniffer segmentation在接受第一个36字节的信息碎片时就可能会出现错误,之后如果有接收到24字节得信息包,那肯定无法完成扫描。当包过滤器和能将iP碎片进行排列的防火墙没有获得这个序列时,一些网络系统就不能反映出是否找到目标,这样她就会放弃。 
-v 
详细模式。这是被强烈推荐使用的选项,因为它能带来想要的更多信息。可以重复使用它以获得更多效果。如果需要大量翻动屏幕请使用 -d命令两次。 
-h 
这是一个快捷键的帮助选项,可以在屏幕上显示nmap的参数使用方法。 
-o<logfilename> 
这是用来指定一个放置扫描结果的文件的参数-------此结果是易于阅读的。 
-m<logfilename> 
这也是存放扫描结果的参数,但它是存放机器可解析结果的,可以用-m将其输出到标准输出及终端屏幕上,或者用shell的管道符保存进文件。在这种形式下,正常的输出被禁止了,需要察看一些错误信息来了解情况。 
-i<inputfilename> 
从指定稳健而不是从命令行读取数据。该文件可以存放一个主机或网络的列表,中间用空格、tab键或者换行符来分隔。如果希望从标准输入输出设备(文件)读取----比如在管道符的末端,要将连字号(-)用于文件名。可以从目标规格里找到更多关于这一文件的资料。 
-p<port ranges> 
这一参数可以指定希望扫描的端口。举例来说,“-p 23“择只会对主机的23端口进行探测,默认扫描的是从1到1024端口,或者也可以用nmap自带的services file里的端口列表 
-F 
快速扫描模式。指定只希望扫描nmap里提供的Services File中列出的端口列表里的端口。这明显回避扫描所有65535个端口来得快。 
-D<decoy[,decoy2][,ME],...> 
这是一种带有诱骗模式的扫描,在远程主机的连接纪录里会记下所有指定的诱骗性的地址。这样的话它们的数据存储器会显示有一些端口扫描从某个IP发起,然而它们无法辨别哪个是真正的IP,哪个是用来作为掩护的,这可以击败一些通过路由进行跟踪的行为,所以它是一项隐藏IP的很实用的技术。其中“me”代表扫描者的真实地址,扫描时用逗号分隔各个欺骗地址,然后可以随意的将“me”放进任意一个希望显示真实IP的地方。如果将“me”放在第六位甚至最后,有些端口扫描纪录器(比如solar designer's excellent scanlogd)可能根本就不会显出扫描者的真实IP。如果不用“me”的话,nmap将会将它随机放置。记住,用来诱骗的主机必须是开放的,可以用半开扫描他一下。因为从一堆实际上没有用的IP地址里判别出那个是真正的入侵者是相当容易的。还可能要用IP地址来代替名字,这样诱骗主机的域名服务器日志才不会纪录下来真实的Ip地址。还要记得有些愚蠢得端口扫描探测器会拒绝到达主机的端口扫描尝试。这样无意中就会导致扫描的主机与“诱骗主机”的连接丢失,可能会带来一个很大的问题------如果这个“诱骗主机”是一个网上的网关或者甚至就是其本地的机器,其连接一样会断开!所以最好小心使用这个参数。由于道德上的原因,这仅仅是一个诱骗。这种诱骗可以用在最初的ping扫描(用icmp、syn、ack或其他)与实际的端口状态扫描中。它还可以用于远程os的判别(-O)。当然如果写入太多的诱骗地址也是没什么用出的,只能减缓扫描速度以及降低一些精确度;而且一些指令处理系统还可能会过滤掉欺骗包,虽然多数(几乎是全部)指令系统不会对欺骗包做出任何限制。 
------未完,待续。 

-S<interface> 
告诉nmap哪个界面要发送或接受。nmap能够自动探测它,如果无法做到,也会有提示信息。 
-g <portnumber> 
在扫描中设定源端口号,许多“天真”的防火墙或包过滤器出了他们建立的允许的包(例如DNS[53端口]或FTP-DATA[20端口])进来建立连接外,其余一概过滤,显然这是很轻率的做法,因为入侵者能够轻易的编辑一个来自FTP或DNS的源端口。比如,如果无法从一个主机的hostort通过tcp isn取得信息,那么通过-g命令,nmap会改变源端口再次尝试。需要了解的是,使用这个选项可能会有小小的延迟,因为有时需要在源端口号中存储有用的信息。 
-M<max sockets> 
设定用来进行tcp connect()扫描的最大的sockets数目(默认)。这对将扫描进度减缓是相当有效的,它可以避免把远程主机crash。另一个途径是用-sS。 
虽然nmap在一般情况下都能够很好的在运行时间里尽可能迅速的完成扫描任务,但偶尔还是会有一些主机或端口无法侦测,这可能是nmap默认的时间策略和目标不太一致(相当于timeout的设定)。下面这些选项能对扫描的时间进行控制: 
-T<Paranoid|Sneaky|Normal|Aggressive|Insane> 
这是一个可以用来便利的表达nmap时间策略优先权的参数设置。Paranoid模式用极慢的速度来扫描以避免被数字记录系统记录,它使扫描连续而不是并发,而且通常等待至少五分钟才发送一个信息包。Sneaky也类似,只是它是每15秒发送一个信息包。Polite模式用来减轻网络负载以减少死机的可能性,它连续发送探针并在两个包的间隙等待0.4秒。Normal是nmap的常规用法,是尽其所能的快速扫描---------除非主机或端口连接丢失。Aggressive模式对每台主机设定了五分钟的tineout,并且等待每个探针应答不超过1.25秒。insane模式用于适应非常快的网络或者不在乎丢失一些信息,因为它太快了。它的timeout设定为75秒并且只等待回应0.3秒,允许对一个很快的网络系统进行“扫荡”。也可以用数字(0~5)来代表参数,比如“-t 0”表示Paranoid而“-t 5”代表Insane模式。注意,这些时间设定无法在底层的控制中联合使用。 
--host_timeout<milliseconds> 
具体制定nmap对某个IP的扫描时间总量,超过则作不通处理,默认值是不做设定。 
--max_rtt_timeout<milliseconds> 
指定nmap对一个探针从远程端返回回应的最大时间,默认值是9000。 
--initial_rtt_timeout<milliseconds> 
指定最初探针的timeout时间,这通常在用-P0扫描有防火墙保护的主机时很有效。nmap会通过ping得到一个好的rtt评估以及最初少数的探针。默认值为6000。 
--max_parallelism<number> 
指定nmap允许的最大并行扫描数目。设定1表明nmap每次只扫描一个端口,它同样会对其他扫描如ping sweep、RPC scan等产生影响。 
--scan_delay<milliseconds> 
指定nmap必须等待的两个探针间的最小时间。这是减少网络负载及使扫描在综合数据存储的记录下不那么明显的办法。 
所有不带参数的选项都会被视为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”或者甚至“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进行扫描的范例。很简单的 
nmap -v rarget.example.com 
这样对rarget.example.com上所有的保留tcp端口进行了一次扫描,-v表示用详细模式。 
nmap -sS -O rarget.example.com/24 
这将开始一次sym的半开扫描,针对的目标是rarget.example.com所在的c类子网,它还试图确定在其上运行的是什么系统。这需要root权限,因为用到了半开扫描以及系统侦测。 
还有好多例子我就不一一说了,有兴趣的朋友自己试了,:)
    楼上的兄弟,我也听说它的种种优点,但由于懒惰一直没有试,如果你用过后有什么心得话,希望贴出来,也让我学习一下,先谢过!


B1层 发表时间: 02/08 13:02

回复: yjfwindows [yjfwindows]   论坛用户   登录
谢谢。

B2层 发表时间: 02/08 13:13

回复: baboo [baboo]   论坛用户   登录
呵呵,怎么详细,不错啊,谢啦

B3层 发表时间: 02/08 15:05

回复: xxzfbest [xxzfbest]   论坛用户   登录
我晕!!他累不累呀!!!!真时佩服!!!谢谢呀!!!!高!!!

B4层 发表时间: 02/08 15:18

回复: laievf [laievf]   论坛用户   登录
nmap有个半开放式扫描,不知道在程序设计上如何实现!~~~
谢谢,挺详细的

B5层 发表时间: 02/08 22:54

论坛: 菜鸟乐园

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

粤ICP备05087286号