nmap常用命令及参数说明
nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取被扫描主机正在运行以及提供什么服务等信息
nmap支持很多扫描技术,例如:
UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。
从扫描类型一节可以得到细节。nmap还提供了一些高级的特征,例如:
通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。
本文详细介绍了NMap的详细使用选项,并给出了几个实用实例,nmap是入侵和网络安全检测的必备工具。
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进行所要求的扫描,这可以穿透防火墙,也可以避免被防火墙发现。
nmap
BT5(BackTrack–Information Gathering–Network Analysis–Network Scanners-nmap)
-sP 渗透内网之后判断当前网络那些主机在线
nmap -sP 192.168.1/255
-vv 现实详细的扫描过程
-sS 使用SYN半开式扫描,这种扫描方式使得扫描结果更加正确(又称半开放,或
隐身扫描)
nmap -vv -sS IP
-O 大写O代表OS 判断主机操作系统
nmap -O 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 [,[,…]] 用于反向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个端口。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200429172917622.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hkcXVhbjMyMQ==,size_16,color_
FFFFFF,t_70)取消随机化扫描
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 (将自定义二进制数据追加到发送的数据包中)
–data-string (将自定义字符串附加到发送的数据包)
–data-length (将随即数据追加到数据包中)
–ttl (设置IP生存时间字段)
–randomize-hosts (随机化目标主机顺序)
–spoof-mac (欺骗MAC地址)
延时策略
-T(0-5) 默认为3
0 即Paranoid模式。为了避开IDS的检测使扫描速度极慢,nmap串所有的扫描,
每隔至少5分钟发送一个包
1 即Sneaky模式。也差不多,只是数据包的发送间隔是15秒
2 即Polite模式。不增加太大的网络负载,串行每个探测,并使每个探测间隔
0.4秒
3 即Normal模式。nmap的默认选项,在不使网络过载或者主机/端口丢失的情况
下尽可能快速地扫描
4 即Aggressive模式。设置5分钟的超时限制,对每台主机的扫描时间不超过5分
钟,并且对每次探测回应的等待时间不超过1.5秒。
5 即lnsane模式。只适合快速的网络或者不在意丢失默些信息,每台主机的超时
限制为75秒,对每次探测只等待0.3秒。
nmap -sS -T1 IP
-sV 探测端口的服务类型/具体版本等信息
nmap -vv -sV IP
-p 端口号 对某个端口的服务版本进行详细探测 有助于升入的针对性攻击,比如缓冲溢出攻击
nmap -vv -sV IP -p 21
适用于内外网的探测,以内网操作为示例(外网参数同)
简单端口扫描:
nmap -vv -sT(sS、sF、sU、sA) 192.168.0.1 -D 127.0.0.1(-D伪造的地址)
OS检测:
nmap -vv -sS -O 192.168.0.1
RPC鉴别:
nmap -sS -sR 192.168.0.1 Linux上的portmap就是一个简单的RPC服务,监听端口为111(默认)
Ping扫射:nmap -sP 172.16.15.0/24
十条常用nmap命令行格式
1)获取远程主机的系统类型及开放端口
Get info about remote host ports and OS detection
nmap -sS -P0 -sV -O
这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网
-sS TCP SYN 扫描 (又称半开放,或隐身扫描)
-P0 允许你关闭 ICMP pings.
-sV 打开系统版本检测
-O 尝试识别远程操作系统
-A 同时启用操作系统指纹识别和版本检测
-sS TCP SYN scanning (also known as half-open, or stealth scanning)
-P0 option allows you to switch off ICMP pings.
-sV option enables version detection
-O flag attempt to identify the remote operating system
Other option:
-A option enables both OS fingerprinting and version detection
-v use -v twice for more verbosity.
nmap -sS -P0 -A -v < target >
2)列出开放了指定端口的主机列表
Get list of servers with a specific port open
nmap -sT -p 80 -oG – 192.168.1.* | grep open
3)在网络寻找所有在线主机
Find all active IP addresses in a network
nmap -sP 192.168.0.*
或者也可用以下命令:
nmap -sP 192.168.0.0/24 指定 subnet
4)Ping 指定范围内的 IP 地址
Ping a range of IP addresses
nmap -sP 192.168.1.100-254
5)在某段子网上查找未占用的 IP
Find unused IPs on a given subnet
nmap -T4 -sP 192.168.2.0/24 && egrep “00:00:00:00:00:00” /proc/net/arp
6)在局域网上扫找 Conficker 蠕虫病毒
Scan for the Conficker virus on your LAN ect.
nmap -PN -T4 -p139,445 -n -v –script=smb-check-vulns –script-args safe=1 192.168.0.1-254
replace 192.168.0.1-256 with the IP’s you want to check.
7)扫描网络上的恶意接入点 rogue APs.
Scan Network for Rogue APs.
nmap -A -p1-85,113,443,8080-8100 -T4 –min-hostgroup 50 –max-rtt-timeout 2000 –initial-rtt-timeout 300 –max-retries 3 –host-timeout
20m –max-scan-delay 1000 -oA wapscan 10.0.0.0/8
I’ve used this scan to successfully find many rogue APs on a very,
very large network.
8)使用诱饵扫描方法来扫描主机端口
Use a decoy while scanning ports to avoid getting caught by the sys
admin
sudo nmap -sS 192.168.0.10 -D 192.168.0.2
Scan for open ports on the target device/computer (192.168.0.10) while
setting up a decoy address (192.168.0.2). This will show the decoy ip
address instead of your ip in targets security logs. Decoy address
needs to be alive. Check the targets security log at /var/log/secure
to make sure it worked.
9)为一个子网列出反向 DNS 记录
List of reverse DNS records for a subnet
nmap -R -sL 209.85.229.99/27 | awk ‘{if($3==“not”)print"("$2") no
PTR";else print$3" is "$2}’ | grep ‘(’
10)显示网络上共有多少台 Linux 及 Win 设备?
How Many Linux And Windows Devices Are On Your Network?
sudo nmap -F -O 192.168.1.1-255 | grep "Running: " > /tmp/os; echo
“(cat
/tmp/os | grep Windows | wc -l) Window(s) devices”
上一篇: 嵌入式python2.7.13移植