Nmap是一款开源的扫描工具,用于系统管理员查看一个大型的网络有哪些主机以及其上运行何种服务。它支持多种协议的扫描如UDP,TCP connect(),TCP SYN(半连接),Ftp Proxy(暴力攻击),Reverse-Ident,ICMP(Ping Sweep),FIN,ACK Sweep,Xmas Tree,SYN Sweep和Null扫描。Nmap还提供一些实用功能如通过TCP/IP来鉴别操作系统类型、秘密扫描、动态延迟和重发、平行扫描、通过并行的PING鉴别下属的主机、欺骗扫描、端口过滤探测、直接的RPC扫描、分布扫描、灵活的目标选择以及端口的描述。NMAP主要的特色就是多种扫描模式以及指纹识别技术。还可以将所有探测结果记录到各种格式的日志中,供进一步分析操作。
Nmap运行灵活。使用Nmap进行单机扫描或是整个网络的扫描很简单,只要将带有"/mask"的目标地址指定给Nmap即可。地址是"victim/24",则目标是c类网络,地址是"victim/16",则目标是 B 类网络。另外,Nmap允许你使用各类指定的网络地址,比如 192.168.0.*,是指192.168.0.0/24,或192.168.0.1,4,8-12,对所选子网下的主机进行扫描。
Ping扫描(Ping Sweeping)
Nmap可以对整个网络进行扫描。通过使用"-sP"命令,进行ping扫描。缺省情况下,Nmap给每个扫描到的主机发送一个ICMP、echo和一个TCP ACK,主机对任何一种的响应都会被Nmap得到。
举例:扫描192.168.0.0网络:
# nmap -sP 192.168.0.0/24
Starting nmap V.3.00( www.insecure.org/nmap/)
Host app-01 (192.168.0.1) appears to be up
Host app-02 (192.168.0.2) appears to be up
Nmap run completed -- 2 IP addresses (2 hosts up) scanned in 1 second
如果不发送ICMP echo请求,但要检查系统的可用性,这种扫描可能得不到一些站点的响应。在这种情况下,一个TCP"ping"就可用于扫描目标网络。
端口扫描(Port Scanning)
Nmap支持不同类别的端口扫描TCP连接,TCP SYN,Stealth FIN,Xmas Tree,Null和UDP扫描。
使用TCP连接扫描很容易发现端口,因为Nmap将使用connect()系统调用打开目标机上相关端口的连接,并完成三次TCP握手。一个tcp连接扫描使用"-sT"命令如下。
# nmap -sT 192.168.0.1
Starting nmap V.3.00 (www.insecure.org/nmap/)
Interesting ports on 192.168.0.1:
(The 1587 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
25/tcp open smtp
80/tcp open http
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
隐蔽扫描(Stealth Scanning)
Nmap扫描时可以隐藏自身IP,使用TCP SYN扫描可实现,它很少会在目标机上留下记录,三次握手的过程从来都不会完全实现。通过发送一个SYN包(是TCP协议中的第一个包)开始一次SYN的扫描。任何开放的端口都将有一个SYN|ACK响应。然而,攻击者发送一个RST替代ACK,连接中止。三次握手得不到实现,也就很少有站点能记录这样的探测。如果是关闭的端口,对最初的SYN信号的响应也会是RST,让Nmap知道该端口不在监听。"-sS"命令将发送一个SYN扫描探测主机或网络:
# nmap -sS 192.168.0.1
Starting nmap V.3.00 (www.insecure.org/nmap/)
Interesting ports on 192.168.0.1:
(The 1587 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
25/tcp open smtp
80/tcp open http
Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
虽然SYN扫描可能不被注意,但他们仍会被一些入侵检测系统捕捉。Stealth FIN,Xmas 树和Null scans可用于躲避包过滤和可检测进入受限制端口的SYN包。这三个扫描器对关闭的端口返回RST,对开放的端口将吸收包。一个FIN "-sF"扫描将发送一个FIN包到每个端口。然而Xmas扫描 "-sX" 打开FIN,URG和PUSH的标志位,一个Null scans"-sN"关闭所有的标志位。因为微软不支持TCP标准,所以FIN,Xmas Tree和Null scans在非微软公司的操作系统下才有效。
UDP扫描(UDP Scanning)
如果想要寻找一个流行的UDP漏洞,比如rpcbind漏洞或cDc Back Orifice。为了查出哪些端口在监听,则进行UDP扫描,即可知哪些端口对UDP是开放的。Nmap将发送一个O字节的UDP包到每个端口。如果主机返回端口不可达,则表示端口是关闭的。但这种方法受到时间的限制,因为大多数的UNIX主机限制ICMP错误速率。幸运的是,Nmap本身检测这种速率并自身减速,也就不会产生溢出主机的情况。
# nmap -sU 192.168.0.1
Starting nmap V.3.00 (www.insecure.org/nmap/)
Interesting ports on 192.168.0.1:
(The 1464 ports scanned but not shown below are in state: closed)
Port State Service
53/udp open domain
137/udp open netbios-ns
138/udp open netbios-dgm
658/udp open unknown
Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds
操作系统识别(OS Fingerprinting)
Nmap还可以对操作系统进行识别。Nmap's操作系统的检测是很准确也是很有效的。
举例:对Redhat 9.0进行扫描
# nmap -sS -O 192.168.0.1
Starting nmap V.3.00 (www.insecure.org/nmap/)
Interesting ports on 192.168.0.1:
(The 1587 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
25/tcp open smtp
80/tcp open http
Remote operating system guess: Linux Kernel 2.4.0 - 2.5.20
Uptime 1.954 days (since Fri Sep 3 10:46:41 2004)
Nmap run completed -- 1 IP address (1 host up) scanned in 9 seconds
其它选项(Options)
除了以上这些扫描,Nmap还提供了无数选项。有一个是"-PT",我们已经介绍过了。在目标机或网络上常见的未经过滤的端口,进行TCP"ping"扫描。
另一个选项是"-P0"。在缺省设置下试图扫描一个端口之前,Nmap将用TCP“ping”和ICMP echo命令ping一个目标机,如果ICMP和TCP的探测扫描得不到响应,目标主机或网络就不会被扫描,即使他们是运行着的。而"-P0"选项允许在扫描之前不进行ping,即可进行扫描。
你应该习惯使用"-v"命令,它详细列出所有信息,能和所有的扫描选项一起使用。你能反复地使用这个选项,获得有关目标机的更多信息。
使用"-p"选项,可以指定扫描端口。比如,攻击者想探测你的web服务器的ftp(port 21),telnet(port 23),dns(port 53),http(port 80),想知道你所使用的操作系统,它将使用SYN扫描。
作者:高国新
|