端口扫描是 Nmap 最基本最核心的功能,用于确定目标主机的 TCP/UDP 端口的开放情况。
默认情况下,Nmap 会扫描1000个最有可能开放的 TCP 端口。
Nmap 通过探测将端口划分为6个状态:
Nmap 官网:https://nmap.org/
Nmap 7.60 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>: Input from list of hosts/networks
-iR <num hosts>: Choose random targets
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
-sL: List Scan - simply list targets to scan
-sn: Ping Scan - disable port scan
-Pn: Treat all hosts as online -- skip host discovery
-PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
-PO[protocol list]: IP Protocol Ping
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
--dns-servers <serv1[,serv2],...>: Specify custom DNS servers
--system-dns: Use OS’s DNS resolver
--traceroute: Trace hop path to each host
SCAN TECHNIQUES:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-sN/sF/sX: TCP Null, FIN, and Xmas scans
--scanflags <flags>: Customize TCP scan flags
-sI <zombie host[:probeport]>: Idle scan
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b <FTP relay host>: FTP bounce scan
PORT SPECIFICATION AND SCAN ORDER:
-p <port ranges>: Only scan specified ports
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <port ranges>: Exclude the specified ports from scanning
-F: Fast mode - Scan fewer ports than the default scan
-r: Scan ports consecutively - don’t randomize
--top-ports <number>: Scan <number> most common ports
--port-ratio <ratio>: Scan ports more common than <ratio>
SERVICE/VERSION DETECTION:
-sV: Probe open ports to determine service/version info
--version-intensity <level>: Set from 0 (light) to 9 (try all probes)
--version-light: Limit to most likely probes (intensity 2)
--version-all: Try every single probe (intensity 9)
--version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN:
-sC: equivalent to --script=default
--script=<Lua scripts>: <Lua scripts> is a comma separated list of
directories, script-files or script-categories
--script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
--script-args-file=filename: provide NSE script args in a file
--script-trace: Show all data sent and received
--script-updatedb: Update the script database.
--script-help=<Lua scripts>: Show help about scripts.
<Lua scripts> is a comma-separated list of script-files or
script-categories.
OS DETECTION:
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
Options which take <time> are in seconds, or append 'ms' (milliseconds),
's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
-T<0-5>: Set timing template (higher is faster)
--min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
--min-parallelism/max-parallelism <numprobes>: Probe parallelization
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
probe round trip time.
--max-retries <tries>: Caps number of port scan probe retransmissions.
--host-timeout <time>: Give up on target after this long
--scan-delay/--max-scan-delay <time>: Adjust delay between probes
--min-rate <number>: Send packets no slower than <number> per second
--max-rate <number>: Send packets no faster than <number> per second
FIREWALL/IDS EVASION AND SPOOFING:
-f; --mtu <val>: fragment packets (optionally w/given MTU)
-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e <iface>: Use specified interface
-g/--source-port <portnum>: Use given port number
--proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
--data <hex string>: Append a custom payload to sent packets
--data-string <string>: Append a custom ASCII string to sent packets
--data-length <num>: Append random data to sent packets
--ip-options <options>: Send packets with specified ip options
--ttl <val>: Set IP time-to-live field
--spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
--badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename.
-oA <basename>: Output in the three major formats at once
-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
--reason: Display the reason a port is in a particular state
--open: Only show open (or possibly open) ports
--packet-trace: Show all packets sent and received
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume <filename>: Resume an aborted scan
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--webxml: Reference stylesheet from Nmap.Org for more portable XML
--no-stylesheet: Prevent associating of XSL stylesheet w/XML output
MISC:
-6: Enable IPv6 scanning
-A: Enable OS detection, version detection, script scanning, and traceroute
--datadir <dirname>: Specify custom Nmap data file location
--send-eth/--send-ip: Send using raw ethernet frames or IP packets
--privileged: Assume that the user is fully privileged
--unprivileged: Assume the user lacks raw socket privileges
-V: Print version number
-h: Print this help summary page.
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES
TCP SYN 扫描 (-sS)
这是 Nmap 默认的扫描方式,通常被称作半开放扫描。该方式发送 SYN 到目标端口,如果收到 SYN/ACK 回复,那么可以判断端口是开放的;如果收到 RST 包,说明该端口是关闭的。如果没有收到回复,那么可以判断该端口被屏蔽了。因为该方式仅发送 SYN 包对目标主机的特定端口,但不建立完整的 TCP 连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
TCP connent 扫描 (-sT)
TCP connect 方式使用系统网络 API connect 向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的 TCP 连接会在目标主机上留下记录信息,不够隐蔽。所以,TCP connect 是 TCP SYN 无法使用才考虑使用的方式。
TCP ACK 扫描 (-sA)
向目标主机的端口发送 ACK 包,如果收到 RST 包,说明该端口没有被防火墙屏蔽;没有收到 RST 包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助 TCP SYN 的方式来判断目标主机防火墙的状况。
TCP NULL/FIN/Xmas 扫描 (-sN/sF/sX)
这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。FIN 扫描向目标主机的端口发送的 TCP FIN 包或 Xmas tree 包或 NULL 包,如果收到对方的 RST 回复包,那么说明该端口是关闭的;没有收到 RST 包说明该端口可能是开放的或者被屏蔽了。其中 Xmas tree 包是指 flags 中 FIN URG PUSH 被置为1的 TCP 包;NULL 包是指所有的 flags 都为0的 TCP 包。
UDP扫描 (-sU)
UDP 扫描用于判断 UDP 端口的情况,向目标主机的 UDP 端口发送探测包,如果收到回复 ICMP port unreachable 就说明该端口是关闭的;如果没有收到回复,那说明该 UDP 端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些 UDP 端口是可能处于开放状态的。
其他方式
除了以上几种常用的方式外,Nmap 还支持多种其他的探测方式。例如:
-b
) ,借助 FTP 允许的代理服务扫描其他的主机,同样达到隐蔽自己的目的;--scanflags
:Customize TCP scan flags.-p
:扫描指定的端口;
实例:
-p 22
-p 1-65535
-p U:53,111,137,T:21-25,80,139,8080,S:9 #其中T代表TCP协议、U代表UDP协议、S代表SCTP协议
-F
:快速模式,仅扫描 TOP100 的端口,比默认扫描方式扫描的端口少;
-r
:不进行端口随机打乱的操作(如无该参数,Nmap 会将要扫描的端口以随机顺序方式扫描,以让 Nmap 的扫描不易被对方防火墙检测到);
--top-ports
:扫描开放概率最高的 number 个端口;
--port-ratio
:扫描指定频率以上的端口。与上述--top-ports
类似,这里以概率作为参数,让概率大于--port-ratio
的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看 nmap-services 文件。
nmap 202.207.236.2
上述命令会按照 nmap-services 文件中指定的端口进行扫描,然后列出目标主机开放的端口号,以及端口号上运行的服务。在一次简单扫描中,Nmap 会以默认 TCP SYN 扫描方式进行,仅判断目标端口是否开放,若开放,则列出端口对应的服务名称。
探测端口开放过程: 确定主机在线之后,nmap 会按照 nmap-services 文件中的端口号发送 TCP SYN 报文给主机相应的端口,如果主机回复一个包含 TCP SYN、ACK 的报文,则说明该端口号开放。nmap 会再回复一个 TCP RST 清除连接复位。
nmap -A 192.168.1.250
上述命令不仅列出目标主机开放的端口号,对应的服务,还较为详细的列出了服务的版本、其支持的命令、到达目标主机的每一跳路由等信息。在进行完全扫描时,扫描机与目标主机之间存在大量的数据流量交互,扫描时长随之增加。完全扫描不仅仅是 TCP 协议上的通信交互,还有例如 ICMP、HTTP、NBSS、TDS、POP 等等协议的交互,这些协议的交互是因为在完全扫描开始时首先对目标主机的开放端口进行了确认,之后再根据不同对应的不同服务进行服务版本信息探测、账户信息等信息的探测。
探测主机是否在线:全面扫描时探测主机是否在线和简单扫描完全一致。
探测端口是否打开:全面扫描时探测主机端口开放和简单扫描完全一致。
探测端口服务具体版本:每个协议都不一样,总之就是确定端口开放了之后,和该端口进行更多的数据交互,以获得更多的信息。在下一节的版本探测中有更深入的研究。
在默认情况下,Nmap 对端口的扫描方式是从小到大进行的,或者是参照 nmap-services 中文件列出的端口进行扫描。-p 选项可以指定一个端口号或者一个端口范围。若既想扫描T CP 端口又想扫描 UDP 端口,则需要在端口号前加上 T:或 U:来分别代表 TCP 和 UDP 协议。注意,要既扫描 TCP 又扫描 UDP,则需要指定 -sU 及至少一个 TCP 扫描类型(-sS 半连接扫描,-sT 全连接扫描等),如果没有给定协议限定符,端口号会被加到所有协议列表。
例如,扫描目标主机的80-445端口的开放情况:
nmap -p 80-445 192.168.1.250
从上面的图中可以看到,若只简单的指定一个端口范围,Nmap 会默认以 TCP SYN 方式扫描目标端口,若既想扫描目标 TCP 端口又想扫描 UDP 的端口,则需要指定扫描方式以及端口。例如,以半连接的 TCP SYN 方式扫描目标主机的80端口,以 UDP 方式扫描目标主机的445端口:
nmap -sS -sU -p T:80,U:445 192.168.1.250
例:
nmap -sS -sU --top-ports 100 192.168.1.250
参数:
版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。
Nmap 提供的版本侦测具有如下的优点:
https://www.cnblogs.com/szm666888/p/4963306.html