0、常用命令

1、主机发现
sudo nmap -sn <Network segment address>

2、端口扫描
sudo nmap -sS --min-rate 10000 -p- <ip address> -oA <nmapscan_ports.out>
sudo nmap -sT --min-rate 10000 -p- <ip address> -oA <nmapscan_ports.out>

3、格式化开放端口结果
grep open <nmapscan_ports.out>|awk -F'/' '{print $1}'|paste -sd ','
sudo nmap -sT --min-rate 10000 -p- <ip address>|grep open|awk -F'/' '{print $1}'|paste -sd ','

结果变量化
NmapPorts=$(grep open <nmapscan_ports.out>|grep open|awk -F'/' '{print $1}'|paste -sd ',')

4、TCP详细信息扫描
sudo nmap -sT -sV -sC -O -p$NmapPorts <ip address> -oA <nmapscan_detail.out>

5、UDP详细信息扫描
sudo nmap -sU --top-ports 20  <ip address> -oA <nmapscan_udp.out>

6、脚本扫描
sudo nmap --script=vuln -p$NmapPorts <ip address> -oA <nmapscan_vuln.out>

1、主机发现:

-sL:简单列出扫描的目标
-sn:不做端口扫描,只进行主机发现和轻量入侵侦查,而不会引起注意
    原为:-sP,此选项已被官方放弃
-Pn:将所有主机都默认为在线,跳过主机发现
-PE/PP/PM:使用ICMP响应(echo)、时间戳或子网掩码请求来发现探测
--system-dns:使用操作系统的DNS
--traceroute:追踪每台主机的跳转路径
--send-ip:让nmap发送icmp时间戳请求,以确定主机存活性,比arp扫描可靠性更高。

2、扫描技术:

-sS:使用TCP SYN进行扫描
-sT:使用全连接的TCP三次握手进行扫描(相对较慢,单准确性高于-sS)
-sS/sT/sA/sW/sM:使用TCP SYN、全连接Connect()、ACK、Window、Maimon来进行扫描
-sU:UDP扫描
-sN/sF/sX:使用TCP Null、FIN、Xmas扫描
-sO:进行IP协议扫描

3、端口扫描:

-p <port ranges>:只扫描指定的端口,-p-代表所有端口
-F:快速模式,扫描比默认端口数量更少的端口
-r:有序地扫描端口
--top-ports <number>:扫描常用端口

格式化已经扫出的端口:

sudo nmap -sT --min-rate 10000 -p- <ip address> |grep open|awk -F'/' '{print $1}'|paste -sd ','

4、服务、版本探测:

-sV:探测开启的端口来获取服务、版本信息
--version-light:较弱的探测强度,强度为2
--version-all:包括所有强度的探测,强度为9

5、脚本扫描:

-sC:等同于--script=default
--script=<Lua scripts>:指定使用Lua脚本进行扫描
--script-trace:显示全部发送和收到的数据

6、系统探测:

-O:进行系统探测
--osscan-limit:限制系统探测的目标,如只探测Linux系统
--osscan-guess:更侵略性地猜测系统

7、定时和性能参数:

-T<0-5>:设置时序模板,0最慢,5最快
--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>:最大的发包速率

8、防火墙、IDS绕过和欺骗:

-f:分割数据包,强制IP包分段
--mtu <val>:设置发送的数据包的MTU大小
-D <decoy1,decoy2[,ME],...>:IP欺骗,伪造多个IP地址和源地址一同发送扫描包
-S <IP_Address>:指定一个不同的IP源地址进行扫描,即源地址欺骗
-e <iface>:指定发送扫描数据包的接口
-g/--source-port <portnum>:源端口欺骗,如果系统允许,则自定义扫描数据包的来源端口号
--proxies <url1,[url2],...>:使用代理服务器进行扫描
--ttl <val>:设置扫描数据包的TTL值
--spoof-mac <mac address/prefix/vendor name>:MAC地址欺骗,伪造扫描数据包的源Mac地址
--badsum:生成错误的TCP/UDP或SCTP校验和的数据包
--data-length:增大传输报文长度,添加无用数据进行混淆
--randomize-hosts:将目标主机按随机顺序进行扫描,可以避免被某些IDS/IPS系统检测

报文分段

在nmap中利用-f将TCP包分段在几个包中,使得包过滤器的检测更加困难。

nmap -f -v 192.168.123.1

指定偏移大小

使用--mtu来指定偏移大小,设定TCP/IP协议的传输最大值,以此来逃避防火墙。需要注意的是偏移量是8的倍数。

nmap --mtu 32 192.168.123.1

IP欺骗

使用-D选项就可以达到IP欺骗的目的,使用该选项在进行扫描时,在随机产生IP地址扫描而非我们真实的IP扫描。 使用-D选项可以指定多个IP或者使用RND随机生成几个IP地址。

nmap -D RND:11 192.168.123.1

源地址欺骗/源端口欺骗

使用-sI就可以进行源地址欺骗,使用--source-port就可以进行源端口欺骗,通过这种攻击管理员可能会认为这种端口不会有攻击发生。

nmap --source-port 53 192.168.123.1

mac地址欺骗

使用--spoof-mac便可以进行mac欺骗扫描,在扫描时我们使用0随机分配一个mac地址。

9、输出与保存:

-oA <file>: 用于执行主机发现、端口扫描和服务识别,并将结果保存到三种不同格式的文件中。
    脚本输出(Script Output):保存 Nmap 脚本的输出结果,其中包含有关目标主机的详细信息和脚本所提供的其他数据。
    标准输出(Standard Output):将扫描结果显示在终端上,提供简要的概述和摘要。
    数据库输出(Database Output):以 XML 格式保存完整的扫描结果,可以随后使用其他工具进行进一步分析和处理。
-oN/-oX/-oS/-oG <file>:分别输出正常、XML、s|<rIpt kIddi3、grepable格式的扫描结果到指定的文件
-oN/-oX/-oS/-oG <file>:分别输出正常、XML、s|<rIpt kIddi3、grepable格式的扫描结果到指定的文件
-v:增加的详细程度(使用VV更详细)
--reason:显示端口处于特定状态的原因
--open:仅显示打开(或可能打开)端口
--packet-trace:显示发送和接收的所有数据包
--iflist:输出主机接口和路由(为了调试)
--append-output:附加到指定的输出文件,而不是乱码
--resume <filename>:从指定的文件中恢复终止的扫描
--stylesheet <path/URL>:将指定路径的URL的XSL样式表转换为XML输出为HTML格式
--webxml:获取更多便捷的XML参考样式
--no-stylesheet:防止将XSL样式表的W /XML输出

10、杂项:

--min-rate 10000 设置最低扫描速度(越慢,准确性越高,被标记为恶意行为的可能性也会降低)
--top-ports <number>:使用率最高的端口数,数字指定前多少名常用端口
-6:扫描IPv6的地址
-A:一次扫描包含系统探测、版本探测、脚本扫描和路由跟踪扫描
--send-eth/--send-ip:使用原始以太网帧或IP数据包发送
-V:输出版本号
-h:输出帮助信息