Nmap的功能和使用方法

Nmap

  • 主机发现
    • 列表扫描
    • Ping扫描
    • 无Ping扫描
    • TCP SYN Ping
    • TCP ACK Ping
    • UPD Ping
    • Icmp Ping
    • IP协议Ping
  • 端口扫描
    • TCP SYN扫描
    • TCP连接扫描
    • UDP扫描
    • TCP NULL,FIN和Xmas扫描
    • TCP ACK 扫描
    • 自定义TCP扫描
    • 扫描用法
      • 指定端口
      • 指定排除部分端口
      • 快速扫描
      • 取消随机化扫描
      • 概率扫描
      • 全面扫描
  • 服务和版本侦测
  • 操作系统探测
  • Nmap绕过防火墙

Nmap是一个免费的开源用于网络发现和安全审计的实用程序。它甚至出现在12部电影中,包括 The Matrix Reloaded,Die Hard 4等还有之前国内比较火的《亲爱的xxx》,最厉害的就是nmap localhost了,最高境界就是扫自己让别人无路可扫hhh。

Nmap的四大功能

  • 主机发现
  • 端口扫描
  • 版本侦测
  • 操作系统探测

主机发现

列表扫描

  • namp -sL
  • 列表扫描是主机发现的简并形式,它简单地列出指定的每个网络主机,而不向目标主机发送任何数据包。

Ping扫描

nmap -sn -v ip (同-sP)
  • Nmap在主机发现后不进行端口扫描,只显示出响应主机发现探测的可用主机。这通常称为“ ping扫描 ”优点是不会返回太多的信息造成对结果的分析,并且这是一种非常高效的扫描方式。
  • 探测内网ip
    -nmap -sn 在扫描内网ip的时候会发送arp请求包探测目标ip是否在线,如果有arp回复包,则说明在线。此命令可以探测目标主机是否在线,如果在线,还可以得到其MAC地址。
    Nmap的功能和使用方法_第1张图片
  • 探测公网ip
  • nmap -sn 在扫描公网ip时会发送四种不同类型的数据包来探测目标主机是否在线。
    1 ICMP echo request
    2 a TCP SYN packet to port 443(https)
    3 a TCP ACK packet to port 80(http)
    4 an ICMP timestamp request

Nmap的功能和使用方法_第2张图片
在这里插入图片描述

无Ping扫描

nmap -Pn- v ip (同 -P0 -PN)
  • 常用于防火墙禁止ping的情况下,使用-P0 禁止主机发现会使Nmap对每一个指定的目标Ip进行所要求的扫描,这可以穿透防火墙,也可以避免被防火墙发现。
    Nmap的功能和使用方法_第3张图片
    Nmap的功能和使用方法_第4张图片

TCP SYN Ping

nmap -PS -v ip
  • 发送一个设置了SYN标志的空TCP数据包。默认目标的端口80 (也可以通过改变nmap.h)文件中的DeFault-TCP-PROBE-PORT值进行设置,也可以 通过”–PS22和 -PS22-25,80,113,1050,35000 “进行设定,每个端口被并发的扫描。
  • 通常情况下,nmap默认使用TCP ACK 和ICMP Echo请求对目标进行是否存活的响应,当目标主机的防火墙组织这些请求时,可以使用 TCP SYN Ping扫描对目标主机是否存活进行判断。
  • nmap是通过SYN/ACK和RST响应来对目标主机是否存活进行判断,但在特定的情况下防火墙会丢弃RST包,这种情况下扫描的结果会不准确,这时需要指定一个端口或者端口范围来避免这种情况。

TCP ACK Ping

nmap -PA -v ip
  • 进行TCP ACK Ping扫描,与SYN ping非常相似,差异在于设置了TCP ACK标志而不是SYN标志。这种探测方式可以探测阻止SYN包或者ICMP Echo请求的主机。

UPD Ping

nmap -PU -v ip
  • UDP ping它将UDP数据包发送到给定端口,对于大多数端口,数据包将为空,但有些使用特定于协议的有效负载,更有可能引发响应。如果未指定端口,则默认值为40125。 默认情况下使用非常罕见的端口,因为对于此特定扫描类型,通常不希望发送到开放端口。

Icmp Ping

  • nmap -PE
    通过向目标发送ICMP Echo数据包来探测目标主机是否存活
    在这里插入图片描述
  • nmap -PP
    -time stamp时间戳扫描在大多数防火墙配置不当时可能会得到回复,可以以此方式来判断目标主机是否存活。倘若目标主机在线,该命令还会探测其开放的端口以及运行的服务!
    在这里插入图片描述
  • -nmap -PM
    的ICMP address maskPing地址掩码扫描会试图用备选的ICMP等级Ping指定主机,通常有不错的穿透防火墙的效果
    在这里插入图片描述

IP协议Ping

nmap -PO -v ip
  • 其中一个较新的主机发现选项是IP协议ping,它发送的IP数据包在其IP头中设置了指定的协议号。协议列表采用与前面讨论的TCP,UDP和SCTP主机发现选项中的端口列表相同的格式。如果未指定协议,则默认为为ICMP(协议1),IGMP(协议2)和IP-in-IP(协议4)发送多个IP数据包。
    在这里插入图片描述

其他的一些选项

--disable-arp-ping 			没有ARP或ND Ping
--traceroute				跟踪主机的路径
-n							没有DNS解析
-R							所有目标的DNS解析
--resolve-all				扫描每个已解析的地址
--system-dns				使用系统DNS解析器
--dns-servers [,[,...]] 	用于反向DNS查询的服务器

端口扫描

Nmap扫描中有6种端口状态。

  • open: 这表明在该端口有应用程序接收TCP连接UDP报文
  • closed:可以访问一个关闭的端口(它接收并响应Nmap探测数据包),但没有应用程序正在侦听它。
  • filtered:无法确定端口是否打开,因为数据包过滤会阻止其探测到达端口。过滤可以来自专用防火墙设备,路由器规则或基于主机的防火墙软件。
  • unfiltered:可以访问端口,但无法确定它是打开还是关闭。
  • open|filtered:无法确定端口是开启还是已过滤。
  • closed|filtered:无法确定端口是关闭还是已过滤。

敏感端口汇总*

21 ftp                  弱口令探测/溢出
22 ssh                  弱口令探测
23 telnet               弱口令探测
25 smtp                 溢出
53 dns                  溢出
79 finger               远程主机用户信息
80-89 web               web可利用漏洞
110 pop3                溢出
135 Rpc                 IPC入侵
443 web                 心脏滴血等其他漏洞
445 SMB                 IPC入侵
873 Rysnc               未授权访问
1025 Rpc				NFS匿名访问
1433 MSSQL              弱口令/溢出
1521 Oracle				弱口令/溢出
2601 zebra				路由默认密码zebra
2604 zebra              路由默认密码zebra
3306 Mysql            	弱口令
3389 RDP				远程桌面 弱口令
5432 PostgreSQL			弱口令
5900 vnc				弱口令					
6379 redis				未授权访问
7001-7002 weblogic		弱口令
8080 tomcat/jboss       弱口令
9000 fcgi 				命令执行
9200/9200 elasticsearch 代码执行
27017-27018 Mongodb		未授权访问
50060/50030 hadoop		未授权访问

以下是端口扫描的方式

TCP SYN扫描

  • -sS
    SYN扫描是默认和最流行的扫描选项,原因很简单。它可以快速执行,在快速网络上每秒扫描数千个端口,而不受限制性防火墙的限制。它也是相对不引人注意和隐秘的,因为它永远不会完成TCP连接。

TCP连接扫描

  • -sT
    当用户没有原始数据包权限时,可以使用TCP连接扫描,但是这个方法效率比较低当SYN扫描可用时,通常是更好的选择。

UDP扫描

  • -sU
  • 虽然互联网上最流行的服务运行在TCP协议上,但UDP服务被广泛部署。DNS,SNMP和DHCP(注册端口53,161 / 162和67/68)是最常见的三种。由于UDP扫描通常比TCP更慢且更困难,因此某些管理员会忽略这些端口。
  • 如果返回ICMP端口不可达错误(类型3,代码3),则端口为closed。其他ICMP不可达错误(类型3,代码0,1,2,9,10或13)将端口标记为filtered。
  • 有时,服务将使用UDP数据包进行响应,证明它是open。如果重传后没有收到响应,则端口被分类为open|filtered。这意味着端口可能是打开的,或者数据包筛选器阻止通信。版本检测(-sV)可用于帮助区分真正开放的端口和过滤的端口。

TCP NULL,FIN和Xmas扫描

  • -sN 空扫描
    不设置任何位(TCP标志头为0)
  • -sF
    仅设置TCP FIN位
  • -sX
    设置FIN,PSH和URG位

除了探测包中设置的TCP标志外,这三种扫描类型的行为完全相同。如果收到RST数据包,则考虑端口closed,而没有响应意味着它open|filtered。filtered如果收到ICMP不可达错误(类型3,代码0,1,2,3,9,10或13),则标记端口 。

  • 优缺点
  • 优点:它们可以潜入某些非状态防火墙和数据包过滤路由器。这些扫描类型比SYN扫描更隐蔽。
  • 缺点:并非所有系统都遵循RFC 793的要求。无论端口是否打开,许多系统都会向探针发送RST响应。这会导致所有端口都被标记closed。

TCP ACK 扫描

  • -sA
    此扫描与目前讨论的其他扫描不同,因为它永远不会确定open(或甚至 open|filtered)端口。它用于映射防火墙规则集,确定它们是否为有状态以及过滤哪些端口。向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。ACK扫描探测包仅设置了ACK标志(除非使用–scanflags)。

自定义TCP扫描

  • –scanflags
    允许通过指定任意TCP标志来设计自己的扫描。

扫描用法

指定端口

nmap -p 端口号

这里的端口号可以是单个端口,也可以是多个端口也可以是一个范围

nmap -p 21 ip

Nmap的功能和使用方法_第5张图片

nmap -p 21,25,3389 ip

Nmap的功能和使用方法_第6张图片

nmap -p 21-30 ip

Nmap的功能和使用方法_第7张图片

指定排除部分端口

nmap -p 要扫描的端口 --exclude-ports 要排除的端口 ip 

Nmap的功能和使用方法_第8张图片

快速扫描

nmap -F ip

通常,Nmap会扫描每个扫描协议的最常见1,000个端口。使用快速扫描的话,扫描数量会减少到100个。这100个端口是互联网出现概率最高的100个端口。
Nmap的功能和使用方法_第9张图片

取消随机化扫描

nmap -r ip

默认情况下,Nmap会随机化扫描的端口顺序(但出于效率原因,某些常用端口会比较靠前)。这种随机化通常是可取的,但可以指定 -r 顺序(从最低到最高排序)端口扫描。
下面是正常随机化扫描和-r顺序扫描的对比图
Nmap的功能和使用方法_第10张图片
Nmap的功能和使用方法_第11张图片

概率扫描

nmap是根据nmap-services这个文件,以便知道哪些端口最常见,里面存放的是端口在互联网出现的概率
Nmap的功能和使用方法_第12张图片

nmap -sS --top-ports 数量 ip

这里使用SYN扫描概率最高的50个端口
Nmap的功能和使用方法_第13张图片

nmap --port-ratio 概率 ip  (此处的概率介于0到1之间)

这里是此ip出现概率大于0.1的端口扫描情况,具体的概率情况要参照nmap-services这个文件
Nmap的功能和使用方法_第14张图片

全面扫描

nmap -A ip

全面扫描不仅会显示端口号、服务类型、状态等信息,还会显示出服务的具体版本。
Nmap的功能和使用方法_第15张图片
Nmap的功能和使用方法_第16张图片

服务和版本侦测

nmap -sV ip

只了解到端口号和服务名是不足以确定可以利用什么漏洞,拥有准确的版本号有助于确定服务器易受攻击的漏洞
Nmap的功能和使用方法_第17张图片

  • –allports (不从版本检测中排除任何端口)
    默认情况下,Nmap版本检测会跳过一些没有意义的端口,例如会跳过TCP端口9100,因为某些打印机会打印发送到该端口的任何内容,导致数十页HTTP GET请求,二进制SSL会话请求等。但是不排除管理员把一些敏感服务改成这些端口,可以用此选项来避免错过,不过这样时间会稍长。
  • –version-intensity <1-9> (设置版本扫描强度)
    Nmap会发送一系列探测器,每个探测器都分配一个介于1和9之间的稀有值。较低编号的探针对于各种常见服务是有效的,而编号较高的探针很少有用。强度级别指定应应用哪些探针。数字越大,正确识别服务的可能性就越大。但是,高强度扫描需要更长时间。强度必须介于0到9之间,默认值为7
  • –version-light (轻量级)
    轻量级模式使扫描速度更快,但识别服务的可能性略低,版本也没有(intensity等级为2)
    Nmap的功能和使用方法_第18张图片
  • –version-all (全扫)
    简单粗暴一把梭,一个都不放过,代价就是慢慢慢慢慢。(intensity等级为9)
  • –version-trace (跟踪活动)
    会显示扫描中的一些详细过程
    Nmap的功能和使用方法_第19张图片

操作系统探测

原理:Nmap最着名的功能之一是使用TCP / IP堆栈指纹识别进行远程操作系统检测。Nmap将一系列TCP和UDP数据包发送到远程主机,并检查响应其中的每一位。在执行了TCP ISN采样,TCP选项支持和排序,IP ID采样以及初始窗口大小检查等数十项测试后,Nmap将结果与其进行比较 nmap-os-db 超过2,600个已知操作系统指纹的数据库,如果匹配则输出操作系统详细信息。

nmap -O ip

Nmap的功能和使用方法_第20张图片

  • –osscan-limit (将OS检测限制为有希望的目标)
    设置此选项,Nmap甚至不会针对不符合此条件的主机尝试操作系统检测。这可以节省大量时间,特别是在-Pn针对许多主机的扫描时。

  • –osscan-guess; --fuzzy(猜测OS检测结果)
    当Nmap无法检测到完美的OS匹配时,它有时会提供近似匹配作为可能性。Nmap默认情况下匹配必须非常接近。这个概率会比较低,但是种类多一点。

  • –max-os-tries (设置针对目标的OS检测尝试的最大数量)
    指定较低的 --max-os-tries值(例如1)可以加快Nmap的速度,但是错过了可能识别操作系统的重试次数。或者,可以设置高值以在条件有利时允许甚至更多次重试。除了生成更好的指纹以提交和集成到Nmap OS数据库之外,很少这样做。

Nmap绕过防火墙

  • 切片
    -f(片段包); --mtu(使用指定的MTU)
    原理是将TCP标头分成几个数据包,以使数据包过滤器,入侵检测系统和其他手段更难以检测。
    Nmap在IP标头之后将数据包拆分为8个字节或更少。因此,一个20字节的TCP报头将被分成三个数据包。两个带有八个字节的TCP标头,另一个带有最后四个字节。当然每个片段也有一个IP头。可以使用–mtu选项指定自己的偏移大小,偏移量必须是8的倍数。

  • 诱饵
    -D [,][,ME][,…]
    decoy 是诱饵ip,ME填上真实ip,用逗号分隔每个诱饵主机ip。如果你把 ME放在第六个位置或以后,一些常见的端口扫描探测器根本不可能找到你的真实IP地址。

  • 欺骗源地址
    -S
    使用-S加上希望通过其发送数据包的接口的IP地址。

其他的还没怎么用过,如下

-e  接口                (指定接口)
--source-port 端口号    (指定源端口)
--data     (将自定义二进制数据追加到发送的数据包中)
--data-string  (将自定义字符串附加到发送的数据包)
--data-length  (将随即数据追加到数据包中)
--ttl                  (设置IP生存时间字段)
--randomize-hosts      (随机化目标主机顺序)
--spoof-mac            (欺骗MAC地址)

参考链接
https://nmap.org
https://blog.csdn.net/qq_36119192/article/details/82079150

你可能感兴趣的:(Nmap的功能和使用方法)