Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。Nmap是一款非常强大的实用工具
Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP反弹扫描等。
Nmap的使用取决于目标主机,因为有一个简单的(基本)扫描和预先扫描之间的差异。我们需要使用一些先进的技术来绕过防火墙和入侵检测/防御系统,以获得正确的结果。
nmap [扫描类型] [设置] {设备地址}
其中设备地址(主机名,IP地址,网段等)
可以通过以下方法:
1.-iL <文件名> 通过文件输入地址
2.-iR
3.–exclude
扫描中最经常使用的扫描方法为nmap后边直接输入ip地址:
如:
-sP:
ping扫描,加上这个参数会使用ping扫描,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
-sT:
TCP connect()扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
-sS:
半开扫描,一般不会记入日志,不过需要root权限。
-sU:
udp扫描,但是一般不可靠,
-sA:
用来穿过防火墙的规则集,速度慢。
-sV:
端口服务及版本
-A:
包含了-sV,-O,全面系统检测,启动脚本检测,扫描等。
-P0:
扫描之前不使用ping,适用于防火墙禁止ping,比较有用。
-v:
显示扫描进程,推荐添加
-O:
探测目标系统的漏洞,容易误报
-p:
指定端口扫描(全端口1-65535或-p-)
-oN/-oX/-oG:
将报告写入文件,格式分别为正常(自定义.txt),XML,grepable.
-iL:
扫描主机列表
-sC:
–script=default 默认的脚本扫描,主要是搜集各种应用服务的信息
设置参数:
–traceroute
-n(不要做DNS解析)
-R(DNS解析所有的地址,默认不解析不在线的IP)
-system-dns(使用系统DNS)
–dns-servers ,[,…]
命令:-p <端口号列表>
例如:nmap -p80 scanme.namp.org
常见的端口状态:
-sS TCP SYN扫描(匿名扫描,默认不加类型,需要root权限,扫描速度快)
-sT TCP全连接扫描(不需要root权限,TCP扫描的默认模式,端口状态和SYN相同,耗时长)
命令 | 举例 | 解释 |
---|---|---|
nmap localhost | nmap localhost | 查看主机当前开放的端口 |
nmap ip地址 | nmap 192.168.13.13 | 查看192.168.13.13 的开放端口 |
nmap 192.168.1.1/24 | ~ | 扫描整个子网 |
nmap 192.168.1.2 192.168.1.5 | ~ | 扫描多个目标 |
nmap 192.168.1.1-100 | ~ | 扫描IP地址为192.168.1.1-192.168.1.100内的所有主机 |
nmap -iL target.txt | ~ | 扫描在namp同一目录下target.txt文件内的所有主机 |
nmap -sL 192.168.1.1/24 | ~ | 扫描的所有主机的列表 |
nmap 192.168.1.1/24 -exclude 192.168.1.1 | ~ | 扫描除了某一个ip外的所有子网主机 |
nmap 192.168.1.1/24 -exclude file xxx.txt | ~ | xxx.txt中的文件将会从扫描的主机中排除 |
nmap -p 端口范围 localhost | nmap -p 1024-65535 localhost | 查看主机端口(1024-65535)中开放的端口 |
nmap -PS ip地址 | nmap -PS 192.168.21.163 | #探测目标主机开放的端口 |
nmap -PS端口列表 ip地址 | nmap -PS22,80,3306 192.168.21.163 | 探测所列出的目标主机端口 |
nmap -O ip地址 | nmap -O 192.168.21.163 | 探测目标主机操作系统类型 |
nmap -A ip地址 | nmap -A 192.168.21.163 | #探测目标主机操作系统类型 |
扫描技术 | 命令 | 举例 | 解释 |
---|---|---|---|
Tcp SYN Scan (sS) | nmap -sS ip地址 | nmap -sS 192.168.1.1 | 这是一个基本的扫描方式,它被称为半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.如果Nmap命令中没有指出扫描类型,默认的就是Tcp SYN.但是它需要root/administrator权限. |
Tcp connect() scan(sT) | nmap -sT ip地址 | nmap -sT 192.168.1.1 | 如果不选择SYN扫描,TCP connect()扫描就是默认的扫描模式.不同于Tcp SYN扫描,Tcp connect()扫描需要完成三次握手,并且要求调用系统的connect().Tcp connect()扫描技术只适用于找出TCP和UDP端口. |
Udp scan(sU) | nmap -sU ip地址 | nmap -sU 192.168.1.1 | 这种扫描技术用来寻找目标主机打开的UDP端口.它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的. |
FIN scan (sF) | nmap -sU ip地址 | nmap -sU 192.168.1.1 | 有时候Tcp SYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手.FIN扫描也不会在目标主机上创建日志(FIN扫描的优势之一).个类型的扫描都是具有差异性的,FIN扫描发送的包只包含FIN标识,NULL扫描不发送数据包上的任何字节,XMAS扫描发送FIN、PSH和URG标识的数据包. |
PING Scan (sP) | nmap -sP ip地址 | nmap -sP 192.168.1.1 | PING扫描不同于其它的扫描方式,因为它只用于找出主机是否是存在在网络中的.它不是用来发现是否开放端口的.PING扫描需要ROOT权限,如果用户没有ROOT权限,PING扫描将会使用connect()调用. |
版本检测(sV) | nmap -sV ip地址 | nmap -sV 192.168.1.1 | 版本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCP SYN扫描开放了哪些端口. |
Idle scan (sL) | nmap -sL ip地址1 ip地址2 | nmap -sL 192.168.1.6 192.168.1.1 | Idle scan是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包.Idle scan是一种理想的匿名扫描技术,通过目标网络中的192.168.1.6向主机192.168.1.1发送数据,来获取192.168.1.1开放的端口 |
有需要其它的扫描技术,如 FTP bounce(FTP反弹), fragmentation scan(碎片扫描), IP protocol scan(IP协议扫描),以上讨论的是几种最主要的扫描方式.
Nmap最重要的特点之一是能够远程检测操作系统和软件,Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的,通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。 Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照。
Initiating SYN Stealth Scan at 10:21
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 111/tcp on 127.0.0.1
Completed SYN Stealth Scan at 10:21, 0.08s elapsed (1000 total ports)
Initiating OS detection (try #1) against localhost (127.0.0.1)
Retrying OS detection (try #2) against localhost (127.0.0.1)
上面的例子清楚地表明,Nmap的首次发现开放的端口,然后发送数据包发现远程操作系统。操作系统检测参数是O(大写O)
如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机。
nmap -O -PN 192.168.1.1/24
以上命令告诉发信主机远程主机是存活在网络上的,所以没有必要发送ping请求,使用-PN参数可以绕过PING命令,但是不影响主机的系统的发现.
Nmap的操作系统检测的基础是有开放和关闭的端口,如果OS scan无法检测到至少一个开放或者关闭的端口,会返回以下错误:
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS Scan的结果是不可靠的,因为没有发现至少一个开放或者关闭的端口.
这种情况是非常不理想的,应该是远程主机做了针对操作系统检测的防范。如果Nmap不能检测到远程操作系统类型,那么就没有必要使用-osscan_limit检测。
想好通过Nmap准确的检测到远程操作系统是比较困难的,需要使用到Nmap的猜测功能选项, –osscan-guess 猜测认为最接近目标的匹配操作系统类型。
nmap -O --osscan-guess 192.168.1.1
Nmap是一个非常强大的工具,它具有覆盖渗透测试的第一方面的能力,其中包括信息的收集和统计。本文从初级到高级的讲解了Nmap入侵扫描工具的使用.希望对大家有所帮助.