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地址。 - 探测公网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
无Ping扫描
nmap -Pn- v ip (同 -P0 -PN)
- 常用于防火墙禁止ping的情况下,使用-P0 禁止主机发现会使Nmap对每一个指定的目标Ip进行所要求的扫描,这可以穿透防火墙,也可以避免被防火墙发现。
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 <server1>[,<server2>[,...]] 用于反向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 -p 21,25,3389 ip
nmap -p 21-30 ip
指定排除部分端口
nmap -p 要扫描的端口 --exclude-ports 要排除的端口 ip
快速扫描
nmap -F ip
通常,Nmap会扫描每个扫描协议的最常见1,000个端口。使用快速扫描的话,扫描数量会减少到100个。这100个端口是互联网出现概率最高的100个端口。
取消随机化扫描
nmap -r ip
默认情况下,Nmap会随机化扫描的端口顺序(但出于效率原因,某些常用端口会比较靠前)。这种随机化通常是可取的,但可以指定 -r 顺序(从最低到最高排序)端口扫描。
下面是正常随机化扫描和-r顺序扫描的对比图
概率扫描
nmap是根据nmap-services这个文件,以便知道哪些端口最常见,里面存放的是端口在互联网出现的概率
nmap -sS --top-ports 数量 ip
这里使用SYN扫描概率最高的50个端口
nmap --port-ratio 概率 ip (此处的概率介于0到1之间)
这里是此ip出现概率大于0.1的端口扫描情况,具体的概率情况要参照nmap-services这个文件
全面扫描
nmap -A ip
全面扫描不仅会显示端口号、服务类型、状态等信息,还会显示出服务的具体版本。
服务和版本侦测
nmap -sV ip
只了解到端口号和服务名是不足以确定可以利用什么漏洞,拥有准确的版本号有助于确定服务器易受攻击的漏洞
- –allports (不从版本检测中排除任何端口)
默认情况下,Nmap版本检测会跳过一些没有意义的端口,例如会跳过TCP端口9100,因为某些打印机会打印发送到该端口的任何内容,导致数十页HTTP GET请求,二进制SSL会话请求等。但是不排除管理员把一些敏感服务改成这些端口,可以用此选项来避免错过,不过这样时间会稍长。 - –version-intensity <1-9> (设置版本扫描强度)
Nmap会发送一系列探测器,每个探测器都分配一个介于1和9之间的稀有值。较低编号的探针对于各种常见服务是有效的,而编号较高的探针很少有用。强度级别指定应应用哪些探针。数字越大,正确识别服务的可能性就越大。但是,高强度扫描需要更长时间。强度必须介于0到9之间,默认值为7 - –version-light (轻量级)
轻量级模式使扫描速度更快,但识别服务的可能性略低,版本也没有(intensity等级为2) - –version-all (全扫)
简单粗暴一把梭,一个都不放过,代价就是慢慢慢慢慢。(intensity等级为9) - –version-trace (跟踪活动)
会显示扫描中的一些详细过程
操作系统探测
原理:Nmap最着名的功能之一是使用TCP / IP堆栈指纹识别进行远程操作系统检测。Nmap将一系列TCP和UDP数据包发送到远程主机,并检查响应其中的每一位。在执行了TCP ISN采样,TCP选项支持和排序,IP ID采样以及初始窗口大小检查等数十项测试后,Nmap将结果与其进行比较 nmap-os-db 超过2,600个已知操作系统指纹的数据库,如果匹配则输出操作系统详细信息。
nmap -O ip
–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 <IP_Address>
使用-S加上希望通过其发送数据包的接口的IP地址。
其他的还没怎么用过,如下
-e 接口 (指定接口)
--source-port 端口号 (指定源端口)
--data <hex string> (将自定义二进制数据追加到发送的数据包中)
--data-string <string> (将自定义字符串附加到发送的数据包)
--data-length <number> (将随即数据追加到数据包中)
--ttl (设置IP生存时间字段)
--randomize-hosts (随机化目标主机顺序)
--spoof-mac (欺骗MAC地址)
参考链接
https://nmap.org
https://blog.csdn.net/qq_36119192/article/details/82079150