2004-4-1 17:44
gandalf
Nmap扫描器的使用 (阅览 9173 次)<br /><br />摘自nsfocus论坛<br /><br />--------------------------------------------------------------------------------<br /><br /><br />[Ping扫描(Ping Sweeping)] <br /><br />[端口扫描(Port Scanning)] <br /><br />[隐蔽扫描(Stealth Scanning)]<br /><br />[UDP扫描(UDP Scanning)]<br /><br />[操作系统识别(OS Fingerprinting)]<br /><br />[Ident扫描(Ident Scanning)] <br /><br />[选项(Options)]<br /><br />[小结]<br /><br /> <br /> <br /><br />简介:<br />最近媒体报道了许多关于入侵网络的新闻,使人们总以为入侵者只需通过简单工具就可获得电脑的访问权限。但实际上,事情并不是想象中的这么简单。黑客想要入侵一台电脑,首先要有一套完整的计划。在入侵系统之前,黑客必须先找到一台目标主机,并查出哪些端口在监听之后才能进行入侵。<br /><br />找出网络上的主机,测试哪些端口在监听,这些工作通常是由扫描来实现的。扫描网络是黑客进行入侵的第一步。通过使用扫描器(如Nmap)扫描网络,寻找存在漏洞的目标主机。一旦发现了有漏洞的目标,接下来就是对监听端口的扫描。Nmap通过使用TCP协议栈指纹准确地判断出被扫主机的操作系统类型。<br /><br />本文全方位地介绍Nmap的使用方法,可以让安全管理员了解在黑客眼中的站点。并通过使用它,安全管理员可以发现自己网站的漏洞,并逐步完善自己的系统。<br /><br />Nmap 是在免费软件基金会的GNU General Public License (GPL)下发布的,可从www.insecure.org/nmap站点上免费下载。下载格式可以是tgz格式的源码或RPM格式。目前较稳定的版本是 2.12。带有图形终端,本文集中讨论Nmap命令的使用。 Nmap的语法相当简单。Nmap的不同选项和-s标志组成了不同的扫描类型,比如:一个Ping-scan命令就是"-sP"。在确定了目标主机和网络之后,即可进行扫描。如果以root来运行Nmap,Nmap的功能会大大的增强,因为超级用户可以创建便于Nmap利用的定制数据包。<br /><br />在目标机上,Nmap运行灵活。使用Nmap进行单机扫描或是整个网络的扫描很简单,只要将带有"/mask"的目标地址指定给Nmap即可。地址是"victim/24", 则目标是c类网络,地址是"victim/16", 则目标是B类网络。<br /><br />另外,Nmap允许你使用各类指定的网络地址,比如 192.168.7.*,是指192.168.7.0/24, 或 192.168.7.1,4,8-12,对所选子网下的主机进行扫描。<br /><br />Ping扫描(Ping Sweeping)<br /><br />入侵者使用Nmap扫描整个网络寻找目标。通过使用" -sP"命令,进行ping扫描。缺省情况下,Nmap给每个扫描到的主机发送一个ICMP echo和一个TCP ACK, 主机对任何一种的响应都会被Nmap得到。<br />举例:扫描192.168.7.0网络:<br /><br /># nmap -sP 192.168.7.0/24<br /><br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Host (192.168.7.11) appears to be up.<br />Host (192.168.7.12) appears to be up.<br />Host (192.168.7.76) appears to be up.<br />Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second<br /><br />如果不发送ICMP echo请求,但要检查系统的可用性,这种扫描可能得不到一些站点的响应。在这种情况下,一个TCP"ping"就可用于扫描目标网络。<br /><br />一个TCP"ping"将发送一个ACK到目标网络上的每个主机。网络上的主机如果在线,则会返回一个TCP RST响应。使用带有ping扫描的TCP ping选项,也就是"PT"选项可以对网络上指定端口进行扫描(本文例子中指的缺省端口是80(http)号端口),它将可能通过目标边界路由器甚至是防火墙。注意,被探测的主机上的目标端口无须打开,关键取决于是否在网络上。<br /># nmap -sP -PT80 192.168.7.0/24<br />TCP probe port is 80<br /><br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Host (192.168.7.11) appears to be up.<br />Host (192.168.7.12) appears to be up.<br />Host (192.168.7.76) appears to be up.<br />Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second<br /><br />当潜在入侵者发现了在目标网络上运行的主机,下一步是进行端口扫描。<br />Nmap支持不同类别的端口扫描TCP连接, TCP SYN, Stealth FIN, Xmas Tree,Null和UDP扫描。<br /><br /><br />端口扫描(Port Scanning)<br /><br />一个攻击者使用TCP连接扫描很容易被发现,因为Nmap将使用connect()系统调用打开目标机上相关端口的连接,并完成三次TCP握手。黑客登录到主机将显示开放的端口。一个tcp连接扫描使用"-sT"命令如下。<br /># nmap -sT 192.168.7.12<br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Interesting ports on (192.168.7.12):<br />Port State Protocol Service<br />7 open tcp echo<br />9 open tcp discard<br />13 open tcp daytime<br />19 open tcp chargen<br />21 open tcp ftp<br />...<br />Nmap run completed -- 1 IP address (1 host up) scanned in 3 seconds<br /><br />隐蔽扫描(Stealth Scanning)<br /><br />如果一个攻击者不愿在扫描时使其信息被记录在目标系统日志上,TCP SYN扫描可帮你的忙,它很少会在目标机上留下记录,三次握手的过程从来都不会完全实现。通过发送一个SYN包(是TCP协议中的第一个包)开始一次 SYN的扫描。任何开放的端口都将有一个SYN|ACK响应。然而,攻击者发送一个RST替代ACK,连接中止。三次握手得不到实现,也就很少有站点能记录这样的探测。如果是关闭的端口,对最初的SYN信号的响应也会是RST,让NMAP知道该端口不在监听。"-sS"命令将发送一个SYN扫描探测主机或网络:<br /><br /># nmap -sS 192.168.7.7<br /><br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Interesting ports on saturnlink.nac.net (192.168.7.7):<br />Port State Protocol Service<br />21 open tcp ftp<br />25 open tcp smtp<br />53 open tcp domain<br />80 open tcp http<br />...<br /><br />Nmap run completed -- 1 IP address (1 host up) scanned in 1 second<br /><br />虽然SYN扫描可能不被注意,但他们仍会被一些入侵检测系统捕捉。Stealth FIN,Xmas树和Null scans可用于躲避包过滤和可检测进入受限制端口的SYN包。这三个扫描器对关闭的端口返回RST,对开放的端口将吸收包。一个 FIN "-sF"扫描将发送一个FIN包到每个端口。<br />然而Xmas扫描"-sX"打开FIN, URG和PUSH的标志位,一个Null scans "-sN"关闭所有的标志位。因为微软不支持TCP标准,所以FIN, Xmas Tree和Null scans在非微软公司的操作系统下才有效。<br /><br /><br />UDP扫描(UDP Scanning)<br /><br />如果一个攻击者寻找一个流行的UDP漏洞,比如 rpcbind漏洞或cDc Back Orifice。为了查出哪些端口在监听,则进行UDP扫描,即可知哪些端口对UDP是开放的。Nmap将发送一个O字节的UDP包到每个端口。如果主机返回端口不可达,则表示端口是关闭的。但这种方法受到时间的限制,因为大多数的UNIX主机限制ICMP错误速率。幸运的是,Nmap本身检测这种速率并自身减速,也就不会产生溢出主机的情况。<br /><br /><br /># nmap -sU 192.168.7.7<br /><br />WARNING: -sU is now UDP scan -- for TCP FIN scan use -sF<br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Interesting ports on saturnlink.nac.net (192.168.7.7):<br />Port State Protocol Service<br />53 open udp domain<br />111 open udp sunrpc<br />123 open udp ntp<br />137 open udp netbios-ns<br />138 open udp netbios-dgm<br />177 open udp xdmcp<br />1024 open udp unknown<br /><br />Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds<br /><br /><br />操作系统识别(OS Fingerprinting)<br /><br />通常一个入侵者可能对某个操作系统的漏洞很熟悉,能很轻易地进入此操作系统的机器。一个常见的选项是TCP/IP上的指纹,带有"-O"选项决定远程操作系统的类型。这可以和一个端口扫描结合使用,但不能和ping扫描结合使用。Nmap通过向主机发送不同类型的探测信号,缩小查找的操作系统系统的范围。指纹验证TCP包括使用FIN探测技术发现目标机的响应类型。BOGUS的标志探测,发现远程主机对发送的带有SYN包的不明标志的反应,TCP 初始序列号(ISN)取样发现ISN数值的样式,也可以用另外的方式决定远程操作系统。有一篇权威的关于指纹(fingertprinting)的文章, 作者:Fyodor,也是namp的作者,参见地址:http://www.insecure.org/nmap/nmap- fingerprinting-article.html<br /><br />Nmap's操作系统的检测是很准确也是很有效的,举例:使用系统Solaris 2.7带有SYN扫描的指纹验证堆栈。<br /># nmap -sS -O 192.168.7.12<br /><br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Interesting ports on comet (192.168.7.12):<br />Port State Protocol Service<br />7 open tcp echo<br />9 open tcp discard<br />13 open tcp daytime<br />19 open tcp chargen<br />21 open tcp ftp<br />...<br />TCP Sequence Prediction: Class=random positive increments<br />Difficulty=17818 (Worthy challenge)<br />Remote operating system guess: Solaris 2.6 - 2.7<br /><br />Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds<br /><br /><br />Ident扫描(Ident Scanning)<br /><br />一个攻击者常常寻找一台对于某些进程存在漏洞的电脑。比如,一个以root运行的WEB服务器。如果目标机运行了identd,一个攻击者使用Nmap通过"-I"选项的TCP连接,就可以发现哪个用户拥有http守护进程。我们将扫描一个Linux WEB服务器为例:<br /><br /># nmap -sT -p 80 -I -O www.yourserver.com<br /><br />Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)<br />Interesting ports on www.yourserver.com (xxx.xxx.xxx.xxx):<br />Port State Protocol Service Owner<br />80 open tcp http root<br /><br />TCP Sequence Prediction: Class=random positive increments<br />Difficulty=1140492 (Good luck!)<br />Remote operating system guess: Linux 2.1.122 - 2.1.132; 2.2.0-pre1 - 2.2.2<br /><br />Nmap run completed -- 1 IP address (1 host up) scanned in 1 second<br /><br />如果你的WEB服务器是错误的配置并以root来运行,象上例一样,它将是黎明前的黑暗。<br /><br />Apache 运行在root下,是不安全的实践,你可以通过把/etc/indeed.conf中的auth服务注销来阻止ident请求,并重新启动ident。另外也可用使用ipchains或你的最常用的防火墙,在网络边界上执行防火墙规则来终止ident请求,这可以阻止来路不明的人探测你的网站用户拥有哪些进程。<br /><br /><br />选项(Options)<br /><br />除了以上这些扫描,Nmap还提供了无数选项。有一个是"-PT",,我们已经介绍过了。在目标机或网络上常见的未经过滤的端口,进行TCP "ping"扫描。<br /><br />另一个选项是"-P0"。在缺省设置下试图扫描一个端口之前,Nmap将用TCP ping" 和 ICMP echo命令ping一个目标机,如果ICMP 和TCP的探测扫描得不到响应,目标主机或网络就不会被扫描,即使他们是运行着的。而"-P0"选项允许在扫描之前不进行ping,即可进行扫描。<br /><br />你应该习惯使用"-v"命令,它详细列出所有信息,能和所有的扫描选项一起使用。你能反复地使用这个选项,获得有关目标机的更多信息。<br /><br />使用"-p "选项,可以指定扫描端口。比如 ,攻击者想探测你的web服务器的ftp(port 21),telnet (port 23), dns (port 53), http (port 80),想知道你所使用的操作系统,它将使用SYN扫描。<br /><br /># nmap -sS -p 21,23,53,80 -O -v www.yourserver.com<br /><br /><br />小结:<br />使用什么样的方法来抵制一个黑客使用Nmap,这样的工具是有的,比如 Scanlogd, Courtney, and Shadow;,然而使用这样的工具并不能代替网络安全管理员。因为扫描只是攻击的前期准备,站点使用它只可以进行严密的监视。<br />使用Nmap监视自己的站点,系统和网络管理员能发现潜在入侵者对你的系统的探测。<br /><br /><br /><br /><br /><br />==============================================<br />Nmap网络安全扫描器说明(5) (阅览 5934 次)<br /><br />Nmap网络安全扫描器说明(5)<br /><br /><br />作者:作者:Fyodor 译者:quack<br />发布日期:2002-2-6<br />上传日期:2002-2-6<br />来源:不详<br /><br /><br />扫描范例<br />--------*<br /><br />这里是一些运用nmap的扫描范例,从最简单普通的到有一些复杂的例子都有。注意这里有真实的数字以及<br />一些真实的域名——这样可以让扫描行为看起来更具体。在这里你可以用自己的网络里的名称代替其中的<br />addresses/names。虽然端口扫描的结果分析可能会使某些人容易攻击,但我不认为它是不合法的,我曾经<br />扫描过成百上千的机器但只收到一次抱怨。但我不是律师而一些(anal)人们对nmap探测觉得烦恼,所以最<br />好在取得允许后扫描或者——冒险,后果由你自己承担。<br /><br />nmap -v target.example.com<br /><br />这样对target.example.com上所有的保留TCP端口做了一次扫描,-v表示用详细模式。<br /><br />nmap -sS -O target.example.com/24<br /><br />这将开始一次SYN的半开扫描,针对的目标是target.example.com所在的C类子网,它还试图确定在其上运<br />行的是什么系统。这需要root权限,因为用到了半开扫描以及系统侦测。<br /><br />nmap -sX -p 22,53,110,143,4564 128.210.*.1-127<br /><br />发送一个Xmas tree扫描到B类128.210所在子网的一半范围内,我们将检测系统是否运行sshd, DNS,<br />pop3d, imapd, 或者端口4564。要注意由于微软TCP堆栈的不完善,Xmas扫描将不能在其平台上运行成功,<br />同样的问题可能存在于CISCO, IRIX, HP/UX, 和BSDI。<br /><br />nmap -v -p 80 '*.*.2.3-5'<br /><br />这是定位一个网域(将整个网络分隔成许多小部份)再进行扫描的方式,这里扫描的是所有以.2.3,.2.4,<br />或.2.5结束的IP地址。如果你是ROOT的话也可以用-sS。同样的你可以从127开始搜寻更多有趣的机器,你<br />可以用'127-222'替代前面的星号——恕我直言,那个区域有着大量有趣的机器。<br /><br />host -l company.com | cut '-d ' -f 4 | ./nmap -v -i -<br /><br />做一个DNS zone transfer来寻找在company.com进而的主机并且将IP地址送至nmap(feed the IP<br />addresses to nmap)。这个命令是在我的GNU/Linux平台下运行的,你可能需要用不同的选项参数或者不同<br />的操作系统。<br /><br /><br />臭虫<br />----*<br />臭虫?有什么臭虫?如果你找到了,请告诉我,修订版将会更完善<!--emo&:)--><img src='style_emoticons/default/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo-->,记住要连同OS的“指印”一起给我,<br />这样我才能有足够的数据进行修改……<br /><br />作者<br />----*<br /><br />Fyodor <fyodor@dhp.com><br /><br />发放<br />----*<br /><br />最新版本的nmap可以从以下URL获得(以下为版权信息)<br /><br /><a href='http://www.insecure.org/nmap/' target='_blank'>http://www.insecure.org/nmap/</a><br /><br />nmap is © 1997,1998,1999 by Fyodor (fyodor@dhp.com, fyodor@insecure.org)<br /><br />libpcap is also distributed along with nmap. It is copy-righted by Van Jacobson, Craig Leres<br />and Steven McCanne,all of the Lawrence Berkeley National Laboratory, University of<br />California, Berkeley, CA.The Version distributed with nmap may be modified,pristine sources<br />are available from <a href='ftp://ftp.ee.lbl.gov/libpcap.tar.Z' target='_blank'>ftp://ftp.ee.lbl.gov/libpcap.tar.Z</a> .<br /><br />This program is free software; you can redistribute it and/or modify it under the terms of<br />the GNU General Public License as published by the Free Software Foundation; Version 2. This<br />guarantees your right to use, modify, and redistribute Nmap under certain conditions. If this<br />license is unacceptable to you, Insecure.Org may be willing to sell alternative licenses<br />(contact fyodor@dhp.com).<br /><br />This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;<br />without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See<br />the GNU General Public License for more details (it is in the COPYING file of the nmap<br />distribution).<br /><br />It should also be noted that Nmap has been known to crash certain poorly written<br />applications, TCP/IP stacks, and even operating systems. Nmap should never be run against<br />mission critical systems unless you are prepared to suffer downtime. We acknowledge here that<br />Nmap may crash your systems or networks and we disclaim all liability for any damage or<br />problems Nmap could cause.<br /><br />All versions of Nmap equal to or greater than 2.0 are believed (through informal testing) to<br />be Year 2000 (Y2K) compliant in all respects. That being said, we reiterate that Nmap comes<br />with no warranty. There is no reason to believe versions earlier than 2.0 are susceptible to<br />problems, but we have not tested them.<br /><br /><br />附:<br /><br />nmap的运行平台<br />--------------*<br /><br />可移植性<br />NMAP发展于LINUX下,但现在可以在许多平台上运行。这得感谢Lamont Granquist<br /><lamontg@u.washington.edu>他为NMAP自动控制台运行于许多我无法存取的平台做出了巨大的帮助。下面<br />是支持NAMP运行的系统的简表:<br /><br />OS Compiles TCP scan (-sT) SYN scan (-sS) FIN scan (-sF) Frag scan (-f) OS Detection (-O)<br />Linux Yes! Yes! Yes! Yes! Yes! Yes!<br />FreeBSD Yes! Yes! Yes! Yes! Yes! Yes!<br />OpenBSD Yes! Yes! Yes! Yes! Yes! Yes!<br />NetBSD Yes! Yes! Yes! Yes! Yes! Yes!<br />Solaris 2.4-7 Yes! Yes! Yes! Yes! No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> Yes!<br />SunOS4.1.4 w/gcc Yes! Yes! Yes! Yes! No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> Yes!<br />IRIX 5.3-6.4 Yes! Yes! Yes! Yes! No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> Yes!<br />HP/UX 10.20 Yes! Yes! Yes! Yes! Yes! Unknown<br />BSDI 2.1 and up Yes! Yes! Yes! Yes! Unknown Yes!<br />AIX(use cc,not gcc) Yes! Yes! No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--><br />Digital UNIX/Alpha Yes! Yes! POSSIBLE KERNEL PANIC!<br />Cray UNICOS 10.0 Yes! Yes! No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> No <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->