NMAP手册

前言

nmap参数

1
man nmap # always tells u everything

基本使用

1
nmap -A -T4 target_ip

目标说明

Nmap支持主机名,ip,网段的表示方式:

例如:scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254

1
2
3
4
5
6
-iL <inputfilename>: 从文件中读取待检测的目标,文件中的表示方法支持机名,ip,网段
-iR <num hosts>: 随机选取,进行扫描。如果 -iR 指定为 0,则是无休止的扫描

--exclude <host1[,host2][,host3],...>: 从扫描任务中需要排除的主机

--excludefile <exclude_file>: 排除文件中的IP,格式和 -iL 指定扫描文件的格式相同

主机发现

主机发现原理

主机发现发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap支持十多种不同的主机探测方式,比如发送ICMP ECHO/TIMESTAMP/NETMASK报文、发送TCPSYN/ACK包、发送SCTP INIT/COOKIE-ECHO包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。

默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否在线。

  1. ICMP echo request

  2. a TCP SYN packet to port 443

  3. a TCP ACK packet to port 80

  4. an ICMP timestamp request

依次发送四个报文探测目标机是否开启。只要收到其中一个包的回复,那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。

主机发现用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-sL: List Scan 列表扫描, 仅将指定的目标的IP列举出来,不进行主机发现。

-sn: Ping Scan 只进行主机发现,不进行端口扫描。

-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。

-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。

-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。

-PO[protocollist]: 使用IP协议包探测对方主机是否开启。

-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。

--dns-servers <serv1[,serv2],...>: 指定DNS服务器。

--system-dns: 指定使用系统的DNS服务器

--traceroute: 追踪每个路由节点

端口扫描

端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。

默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。

Nmap通过探测将端口划分为6个状态:

  • open:端口是开放的。
  • closed:端口是关闭的。
  • filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
  • unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
  • open|filtered:端口是开放的或被屏蔽。
  • closed|filtered :端口是关闭的或被屏蔽。

端口扫描用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-sS/sT/sA/sW/sM: 指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描

-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况

-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态

--scanflags <flags>: 定制TCP包的flags

-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)

-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况

-sO: 使用IP protocol 扫描确定目标机支持的协议类型

-b <FTP relay host>: 使用FTP bounce scan扫描方式

端口扫描参数

1
2
3
4
5
6
7
8
9
10
11
-p <port ranges>: 扫描指定的端口

实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)

-F: Fast mode – 快速模式,仅扫描TOP 100的端口

-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)

--top-ports <number>:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)

--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件

版本侦测

1
2
3
4
5
6
7
8
9
-sV: 指定让Nmap进行版本侦测

--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长

--version-light: 指定使用轻量侦测方式 (intensity 2)

--version-all: 尝试使用所有的probes进行侦测 (intensity 9)

--version-trace: 显示出详细的版本侦测过程信息

使用脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
-sC: 等价于 --script=default,使用默认类别的脚本进行扫描。

--script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述

--script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数

--script-args-file=filename: 使用文件来为脚本提供参数

--script-trace: 显示脚本执行过程中发送与接收的数据

--script-updatedb: 更新脚本数据库

--script-help=<Lua scripts>: 显示脚本的帮助信息,其中<Luascripts>部分可以逗号分隔的文件或脚本类别。

OS侦测

1
2
3
4
5
-O: 指定Nmap进行OS侦测

--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)

--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统

防火墙/IDS规避

规避原理

防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况

Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)

  • 分片(Fragmentation)

    将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。

  • IP诱骗(IP decoys)

    在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实IP地址。

  • IP伪装(IP Spoofing)

    顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan或匿名代理(如TOR)等网络技术。

  • 指定源端口

    某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。

  • 扫描延时

    某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。

  • 其他技术

    Nmap还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)

参数设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-f; --mtu <val>: 指定使用分片、指定数据包的MTU

-D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址

-S <IP_Address>: 伪装成其他IP地址

-e <iface>: 使用特定的网络接口

-g/--source-port <portnum>: 使用指定源端口

--data-length <num>: 填充随机数据让数据包长度达到Num

--ip-options <options>: 使用指定的IP选项来发送数据包

--ttl <val>: 设置time-to-live时间

--spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址

--badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)

时间与性能

1
2
3
4
5
6
7
8
9
10
-T<0-5>: 设置时序模块,越高越快

--min-hostgroup/max-hostgroup <size>: 指定最大-最小并行主机组扫描大小
--min-parallelism/max-parallelism <numprobes>: 指定最小、最大并行探测数量
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: 指定最小、最大的扫描往返时间
--max-retries <tries>: 指定最大的重发扫描包的次数
--host-timeout <time>: 指定超时时间
--scan-delay/--max-scan-delay <time>: 指定每次探测延迟多长时间,即两次探测之间间隔多少时间
--min-rate <number>: 最小的发包速率
--max-rate <number>: 最大的发包速率

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-oN/-oX/-oS/-oG <file>:分别输出正常、XML、s|<rIpt kIddi3、grepable格式的扫描结果到指定的文件

-oA <basename>:一次性以三种格式输出

-v:增加的详细程度(使用-vv更详细)

-d:提高调试水平(使用-dd更高)

--reason:显示端口处于特定状态的原因

--open:仅显示打开(或可能打开)端口

--packet-trace:显示发送和接收的所有数据包

--iflist:输出主机接口和路由(为了调试)

--append-output:附加到指定的输出文件,而不是乱码

--resume <filename>:从指定的文件中恢复终止的扫描

--stylesheet <path/URL>:将指定路径的URL的XSL样式表转换为XML输出为HTML格式

--webxml:获取更多便捷的XML参考样式

--no-stylesheet:防止将XSL样式表的w/XML输出

其它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-6:扫描IPv6的地址

-A:一次扫描包含系统探测、版本探测、脚本扫描和跟踪扫描

--datadir <dirname>:指定自定义的nmap数据文件位置

--send-eth/--send-ip:使用原始以太网帧或IP数据包发送

--privileged:假设用户有全部权限

--unprivileged:假设用户缺少原始套接字权限  

-V:输出版本号

-h:输出帮助信息

参考:
官方中文手册:https://nmap.org/man/zh/
师傅讲的很详细:https://blog.csdn.net/aspirationflow/article/details/7694274
很详细:https://blog.csdn.net/SKI_12/article/details/61651960