Nmap
Nmap
主机发现(思考一下可以用来做什么?)
在许多网络上,在给定的时间,往往只有小部分的IP地址是活动的。这种情况在私有地址空间如10.0.0.0/8尤其普遍。私有网络有16,000,000个IP,但一些使用它的公司连1000台机器都没有。主机发现能够找到零星分布于IP地址海洋上的机器。
-sL (列表扫描)
-sP (Ping扫描)
-P0 (无ping)
端口扫描基础
Nmap所识别的6个端口状态。
open(开放的)
应用程序正在该端口接收TCP连接或者UDP报文。发现这一点常常是端口扫描的主要目标。安全意
识强的人们知道每个开放的端口都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。
而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的
端口也感兴趣,因为它们显示了网络上那些服务可供使用。
closed(关闭的)
关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应),但没有应用程序在其
上监听。它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行,也对部分操作系统
探测有所帮助。因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。系
统管理员可能会考虑用防火墙封锁这样的端口,那样的话就会被显示为被过滤的状态,下面讨论。
filtered(被过滤的)
unfiltered(未被过滤的)
open|filtered(开放或者被过滤的)
closed|filtered(关闭或者被过滤的)
端口扫描技术
-sS (TCP SYN扫描)
SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。它执行得很快,在一个没有入侵
防火墙的快速网络上,每秒钟可以扫描数千个端口。SYN扫描相对来说不张扬,不易被注意到,因
为它从来不完成TCP连接。它也不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平台,而可以应对任何兼容的 TCP协议栈。它还可以明确可靠的区分open(开放的), closed(关闭的),和
filtered(被过滤的) 状态,常常被称为半连接扫描, 因为它不打开一个完全的TCP连接。它发送一个SYN报文,就像您真的要打开一个连接,然后等待响应。 SYN/ACK表示端口在监听 (开放),而RST (复位)表示没有监听者。如果数次重发后仍没响应,该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。
-sT (TCP connect()扫描)
当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描。当用户没有权限发送原始报文或
者扫描IPv6网络时,就是这种情况。 Instead of writing raw packets as most other scan typesdo,Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。 这是和Web浏览器,P2P客户端以及大多数其它网络应用程序用以建立连接一样的高层系统调用。它是叫做Berkeley Sockets API编程接口的一部分。Nmap用该API获得每个连接尝试的状态信息,而不是读取响应的原始报文。当SYN扫描可用时,它通常是更好的选择。因为Nmap对高层的connect()调用比对原始报文控制更少, 所以前者效率较低。 该系统调用完全连接到开放的目标端口而不是像SYN扫描进行半开放的复位。这不仅花更长时间,需要更多报文得到同样信息,目标机也更可能记录下连接。IDS(入侵检测系统)可以捕获两者,但大部分机器没有这样的警报系统。当Nmap连接,然后不发送数据又关闭连接,许多普通UNIX系统上的服务会在syslog留下记录,有时候是一条加密的错误消息。 此时,有些真正脆弱的服务会崩溃,虽然这不常发生。如果管理员在日志里看到来自同一系统的一堆连接尝试,他应该知道系统被扫描了。
-sU (UDP扫描)
虽然互联网上很多流行的服务运行在TCP协议上,UDP服务也不少。 DNS,SNMP,和DHCP (注
册的端口是53,161/162,和67/68)是最常见的三个。 因为UDP扫描一般较慢,比TCP更困难,一些安全审核人员忽略这些端口。 这是一个错误,因为可探测的UDP服务相当普遍,攻击者当然不会忽略整个协议。 所幸,Nmap可以帮助记录并报告UDP端口。UDP扫描用-sU选项激活。它可以
和TCP扫描如 SYN扫描 (-sS)结合使用来同时检查两种协议。UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包过滤器正在封锁通信。 可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。UDP扫描的巨大挑战是怎样使它更快速。 开放的和被过滤的端口很少响应,让Nmap超时然后再探测,以防探测帧或者 响应丢失。关闭的端口常常是更大的问题。 它们一般发回一个ICMP端口无法到达错误。但是不像关闭的TCP端口响应SYN或者Connect 扫描所发送的RST报文,许多主机在默认情况下限制ICMP端口不可到达消息。 Linux和Solaris对此特别严格。例如, Linux 2.4.20内核限制一秒钟只发送一条目标不可到达消息 (见net/ipv4/icmp。c)。Nmap探测速率限制并相应地减慢来避免用那些目标机会丢弃的无用报文来阻塞 网络。不幸的是,Linux式的一秒钟一个报文的限制使65,536个端口的扫描要花 18小时以上。加速UDP扫描的方法包括并发扫描更多的主机,先只对主要端口进行快速 扫描,从防火墙后面扫描,使用--host-timeout跳过慢速的 主机。
-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)
-sA (TCP ACK扫描)
-sW (TCP窗口扫描)
-sM (TCP Maimon扫描)
--scanflags (定制的TCP扫描)
-sI <zombie host[:probeport]> (Idlescan)
-sO (IP协议扫描)
-b (FTP弹跳扫描)
端口说明和扫描顺序
-p (只扫描指定的端口)
该选项指明想扫描的端口,覆盖默认值,单个端口和用连字符表示的端口范围(如1-1023)都可以。
-F (快速 (有限的端口) 扫描)
-r (不要按随机顺序扫描端口)
服务和版本探测
-sV (版本探测)
打开版本探测,也可以用 -A 同时打开操作系统探测和版本探测。
--allports (不为版本探测排除任何端口)
操作系统探测
-O (启用操作系统检测)
也可以使用 -A 来同时启用操作系统检测和版本检测。
时间和性能
Nmap提供了一些简单的方法,使用6个时间模板,使用时
采用-T选项及数字(0 - 5) 或名称。模板名称有paranoid (0)、sneaky (1)、polite (2)、
normal(3)、 aggressive (4)和insane (5)。默认模式为Normal(T3),因此 -T3
实际上是未做任何优化。例如,-T4 针对TCP端口禁止动态扫描延迟超过10ms,-T5对应的值为5ms。
防火墙/IDS躲避和哄骗
-f (报文分段); --mtu (使用指定的MTU)
-S <IP_Address> (源地址哄骗)
--source-port ; -g (源端口哄骗)
--data-length (发送报文时附加随机数据)
输出
-oN (标准输出)
要求将标准输出直接写入指定的文件。
-oX (XML输出)
细节和调试选项
-v (提高输出信息的详细度)
通过提高详细度,Nmap可以输出扫描过程的更多信息。
实例
nmap -v scanme.nmap.org
这个选项扫描主机scanme.nmap.org中所有的保留TCP端口,选项-v启用细节模式。
nmap -sS -O scanme.nmap.org/24
进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描和操作系统检测,这个扫描需要有根权限。
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
进行主机列举和TCP扫描,对象为B类198.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口打开,将使用版本检测来确定哪种应用在运行。
nmap -A -T4 -sS -O -sV scanme.nmap.org