Nmap常用命令详解

一、nmap简介

1、Namp简介

Nmap是一款网络扫描和主机检测的非常有用的工具。Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。Nmap是一款非常强大的实用工具,可用于:

  • 检测网络上的主机(主机发现)
  • 检测主机上开放的端口(端口发现和枚举)
  • 检测到相应的端口(服务发现)的软件和版本
  • 检测操作系统,硬件地址,以及软件版本
  • 检测脆弱性的漏洞(Nmap的脚本)

Nmap是一个非常普遍的工具,它有命令行界面(kali)和图形用户界面(windos)。

2、Nmap功能分类

Nmap主要包括四个方面的扫描功能,主机发现、端口扫描、应用与版本侦测、操作系统侦测。

二、主机发现

1、主机发现原理

使用Nmap进行主机发现时,主要是为了找到存活主机,方便我们进行后续测试。主机发现的原理和我们使用的ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。

默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否存活:
① ICMP echo request
② a TCP SYN packet to port
③ a TCP ACK packet to port
④ an ICMP timestamp request
依次发送这四个报文对目标主机进行探测,只要收到其中一个包的回复,目标主机存活。使用四种不同类型的数据包可以避免因防火墙或丢包造成错误判断。

2、主机发现用法以及讲解

1、-sL(列表扫描):
列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机,不发送任何报文到目标主机。默认情况下,Nmap仍然对主机进行反向域名解析以获取它们的名字。简单的主机名能给出的有用信息常常令人惊讶。
2、-sP(ping扫描):
进行ping扫描 (主机发现),然后打印出对扫描做出响应的主机。

3、-P0或者-Pn(无ping):
该选项完全跳过Nmap发现阶段。 通常Nmap在进行高强度的扫描时用它确定正在运行的机器。 默认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描,版本探测,或者操作系统探测。用-P0禁止主机发现会使Nmap对每一个指定的目标IP地址 进行所要求的扫描。所以如果在命令行指定一个B类目标地址空间(/16), 所有 65,536 个IP地址都会被扫描。-P0的第二个字符是数字0而不是字母O。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表, 而是继续执行所要求的功能,就好像每个IP都是活动的。
4、-PS(TCP SYN Ping):
发送一个设置了SYN标志位的空TCP报文,默认目的端口为80,不同的端口也可以作为选项指定。 甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在这种情况下,每个端口会被并发地扫描。
5、-PA(TCP ACK ping):

发送一个设置了ACK标志位的空TCP报文,默认目的端口为80。和刚才讨论的SYN ping相当类似。区别就是设置TCP的ACK标志位而不是SYN标志位。 ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。所以远程主机应该总是回应一个RST报文,因为它们并没有发出过连接请求到运行Nmap的机器,如果它们正在运行的话。

-PA选项使用和SYN探测相同的默认端口(80),也可以 用相同的格式指定目标端口列表。如果非特权用户尝试该功能, 或者指定的是IPv6目标,前面说过的connect()方法将被使用。这个方法并不完美,因为它实际上发送的是SYN报文,而不是ACK报文。

提供SYN和ACK两种ping探测的原因是使通过防火墙的机会尽可能大。 许多管理员会配置他们的路由器或者其它简单的防火墙来封锁SYN报文,除非 连接目标是那些公开的服务器像公司网站或者邮件服务器。 这可以阻止其它进入组织的连接,同时也允许用户访问互联网。 这种无状态的方法几乎不占用防火墙/路由器的资源,因而被硬件和软件过滤器 广泛支持。Linux Netfilter/iptables 防火墙软件提供方便的 --syn选项来实现这种无状态的方法。 当这样的无状态防火墙规则存在时,发送到关闭目标端口的SYN ping探测 (-PS) 很可能被封锁。这种情况下,ACK探测格外有闪光点,因为它正好利用了 这样的规则。

另外一种常用的防火墙用有状态的规则来封锁非预期的报文。 这一特性已开始只存在于高端防火墙,但是这些年类它越来越普遍了。 Linux Netfilter/iptables 通过 --state选项支持这一特性,它根据连接状态把报文 进行分类。SYN探测更有可能用于这样的系统,由于没头没脑的ACK报文 通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS又指定-PA来即发送SYN又发送ACK。
6、-PU(UDP Ping):
发送一个空的UDP报文到目的端口,默认端口为31338。该默认值可以通过在编译时改变nmap.h文件中的 DEFAULT-UDP-PROBE-PORT值进行配置。默认使用这样一个奇怪的端口是因为对开放端口进行这种扫描一般都不受欢迎。

如果目标机器的端口是关闭的,UDP探测应该马上得到一个ICMP端口无法到达的回应报文。这对于Nmap意味着该机器正在运行。 许多其它类型的ICMP错误,像主机/网络无法到达或者TTL超时则表示down掉的或者不可到达的主机。没有回应也被这样解释。如果到达一个开放的端口,大部分服务仅仅忽略这个空报文而不做任何回应。这就是为什么默认探测端口是31338这样一个极不可能被使用的端口。少数服务如chargen会响应一个空的UDP报文, 从而向Nmap表明该机器正在运行。

该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。 例如。我曾经有过一个Linksys BEFW11S4无线宽带路由器。默认情况下, 该设备对外的网卡过滤所有TCP端口,但UDP探测仍然会引发一个端口不可到达 的消息,从而暴露了它自己。

7、-PE; -PP; -PM (ICMP Ping Types)

除了前面讨论的这些不常见的TCP和UDP主机发现类型, Nmap也能发送世人皆知的ping 程序所发送的报文。Nmap发送一个ICMP type 8 (回声请求)报文到目标IP地址, 期待从运行的主机得到一个type 0 (回声响应)报文。对于网络探索者而言,不幸的是,许多主机和防火墙现在封锁这些报文,而不是按期望的那样响应, 参见RFC 1122。因此,仅仅ICMP扫描对于互联网上的目标通常是不够的。 但对于系统管理员监视一个内部网络,它们可能是实际有效的途径。 使用-PE选项打开该回声请求功能。

虽然回声请求是标准的ICMP ping查询, Nmap并不止于此。ICMP标准 (RFC 792)还规范了时间戳请求,信息请求 request,和地址掩码请求,它们的代码分别是13,15和17。 虽然这些查询的表面目的是获取信息如地址掩码和当前时间, 它们也可以很容易地用于主机发现。 很简单,回应的系统就是在运行的系统。Nmap目前没有实现信息请求报文, 因为它们还没有被广泛支持。RFC 1122 坚持 “主机不应该实现这些消息”。时间戳和地址掩码查询可以分别用-PP和-PM选项发送。时间戳响应(ICMP代码14)或者地址掩码响应(代码18)表示主机在运行。当管理员特别封锁了回声请求报文而忘了其它ICMP查询可能用于相同目的时,这两个查询可能很有价值。

8、-PR (ARP Ping)

最常见的Nmap使用场景之一是扫描一个以太局域网。在大部分局域网上,特别是那些使用基于 RFC1918私有地址范围的网络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一个原始IP报文如ICMP回声请求时,操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以太帧送往正确的地址。 这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。

当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。当它收到响应时,Nmap甚至不需要担心基于IP的ping报文,既然它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。 所以默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS) ,Nmap也会对任何相同局域网上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 --send-ip。

10、-R (为所有目标解析域名)

告诉Nmap永远对目标IP地址作反向域名解析。一般只有当发现机器正在运行时才进行这项操作。

11、--system-dns (使用系统域名解析器)

默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器 来解析域名。为了提高性能,许多请求 (一般几十个 ) 并发执行。如果您希望使用系统自带的解析器,就指定该选项 (通过getnameinfo()调用一次解析一个IP)。一般不使用该选项,因为它慢多了。系统解析器总是用于IPv6扫描。

12、-n (不用域名解析)

告诉Nmap 永不对它发现的活动IP地址进行反向域名解析。

13、-sn(不进行端口扫描)

当我们在进行主机发现而不希望进行端口扫描时使用该命令可以禁用掉端口扫描功能。

14、--disable-arp-ping(没有ARP扫描或者DN ping)

使用Nmap扫描本地网络,其中每次扫描都会发送一个ARP请求。如果需要扫描外网主机,该命令可禁止ARP发送请求。

15、-PO(IP协议ping)

IP协议ping扫描,它尝试使用IP数据包来确定主机是否在线使用不同的协议。

三、端口扫描

1、Nmap所识别的6个端口状态。

open(开放的)

应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。

closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态,下面讨论。

filtered(被过滤的)

由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。

unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。

open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。

closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描

2、端口扫描原理

进行端口扫描的原理和探测目标主机是否存活的原理类似,或者可以说Nmap进行探测活动的原理都是根据发送探测包之后的响应包的状态来进行判断的。

3、端口扫描用法

1、-sS(TCP SYN扫描)
该方式只发送SYN包到特定的端口,不建立完整的TCP连接,相对比较隐蔽,因此称为半开放扫描。

发送一个SYN包到目标端口:
①收到SYN/ACK回复,判断端口时开放。
②收到RST包,判断端口关闭。
③没有收到回复,判断端口被屏蔽,为Filtered状态。

如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。

2、-sT(TCP connect扫描)
在-sS扫描无法使用的情况下,我们才会使用-sT扫描,因为这种方式扫描速度过慢,而且容易在目标主机留下扫描信息。
TCP connect不向服务器发送原始报文,而是通过使用系统网络的API向目标主机发起连接,如果无法连接,说明端口时关闭状态。当用户没有权限发送原始报文或者扫描IPv6网络时,就是这种情况。

3、-sU(UDP扫描)
UDP扫描发送探测包到UDP端口:
①收到回复“ICMP port unreachable”,端口关闭。
②没有收到回复,端口Open|Filtered。

虽然互联网上很多流行的服务运行在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跳过慢速的 主机。

4、-sN、 -sF、 -sX (TCP Null、FIN、Xmas扫描)
因为这三种方式较为隐蔽,因此称为秘密扫描。这三种扫描可以绕过一些无状态防火墙和报文过滤路由器,但是大部分的IDS可以发现这三种扫描。

发送探测包:
①收到RST回复包,端口关闭。
②没有响应,端口Open|Filtered。
③ICMP不可达,端口Filtered。
因此,这三种扫描是无法完全判断端口是否为Open状态。

Null扫描 (-sN):不设置任何标志位(tcp标志头是0)
FIN扫描 (-sF):只设置TCP FIN标志位。
Xmas扫描 (-sX):设置FIN,PSH,和URG标志位。

除了探测报文的标志位不同,这三种扫描在行为上完全一致。 如果收到一个RST报文,该端口被认为是 closed(关闭的),而没有响应则意味着 端口是open|filtered(开放或者被过滤的)。 如果收到ICMP不可到达错误(类型 3,代号 1,2,3,9,10,或者13),该端口就被标记为被过滤的。

这些扫描的关键优势是它们能躲过一些无状态防火墙和报文过滤路由器。 另一个优势是这些扫描类型甚至比SYN扫描还要隐秘一些。但是别依赖它 -- 多数 现代的IDS产品可以发现它们。一个很大的不足是并非所有系统都严格遵循RFC 793。 许多系统不管端口开放还是关闭,都响应RST。 这导致所有端口都标记为closed(关闭的)。 这样的操作系统主要有Microsoft Windows,许多Cisco设备,BSDI,以及IBM OS/400。 但是这种扫描对多数UNIX系统都能工作。这些扫描的另一个不足是 它们不能辨别open(开放的)端口和一些特定的 filtered(被过滤的)端口,从而返回 open|filtered(开放或者被过滤的)。

5、-sA(TCP ACK扫描)
发送ACK包到目标端口:
①收到RST包,端口未被屏蔽
②没有收到RST包,端口被屏蔽。

6、-sW(TCP窗口扫描)
通过检查返回的RST报文的TCP窗口域来判断:
①窗口值为正数:开放。
②窗口值为0:关闭。
不支持-sW扫描的系统将返回所有端口为关闭状态,也就是窗口值为0.
7、-sM(TCP Maimon扫描)
探测报文是FIN/ACK,无论端口开放或者关闭,都响应RST报文。

8、--scanflags(定制的TCP扫描)
可以通过指定任意TCP标志位设计自己的扫描方式。

9、-sI(idle扫描)
对TCP端口进行盲扫,即不从真实IP发送任何数据包到目标端口,而是利用一台zomobie机。

10、-sO(IP协议扫描)
可以确定目标主机支持哪些IP协议(如TCP、ICMP、IGMP等等)

11、-b(FTP bounce扫描)
允许用户连接到FTP服务器,然后可以发送文件到第三方服务器。只要请求FTP服务器轮流发送一个文件到目标主机上的端口,错误消息会描述端口是开放还是关闭的。

12、-P
指定端口号:
例如:nmap -p 22 ip/nmap -p 1-65535 ip/nmap -p 21,22 ip

13、-F(快速扫描)
可以利用--datadir选项指定自己的nmap-services文件 。service文件中保存了所有端口号。

14、-r(不按照随机顺序扫描端口)
默认情况下,Nmap按随机顺序扫描端口,也可以通过-r按照顺序来扫描端口。

未完待续...

posted @ 2022-07-07 23:01  爱吃_白菜  阅读(5208)  评论(0编辑  收藏  举报