Nmap 笔记

转自:https://vxhly.github.io/2016/09/usage-of-nmap/
又补充了点东西。

Nmap 在渗透测试中经常用到,它不仅可以用来确定目标网络上计算机的存活状态,而且可以扫描各个计算机的操作系统、开放端口、服务,还有可能获得用户的证书。熟练掌握 Nmap 的用法,可以极大的提高渗透测试技术。

Nmap命令结构

Scanning Format:

nmap -[option] [IP or domain] -oN [fileName.txt]

Nmap 使用解释

识别系统

Scanning Format:

nmap -O -Pn [IP or domain]

使用 -O 选项,可以获取到被扫描的主机的系统。 -Pn 选项禁用 Nmap 网络发现功能,假定所有系统都是活动的。

完整全面的扫描

如果希望对某台主机进行完整全面的扫描,那么可以使用nmap内置的-A选项。使用了该选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。

nmap –T4 –A –v targethost

其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。

Timing 模板

timing 参数可以指定 nmap 扫描的速度。其中各个选项如下:
* T0 => paranoid 慢速网络扫描,串行扫描,两次扫描间隔 5 分钟。扫描速度极慢。
* T1 => Sneky 慢速网络扫描,串行扫描,两次扫描间隔 15 秒,扫描速度较慢。
* T2 => Polite 中速网络扫描,串行扫描,两次扫描间隔 400 毫秒,扫描速度慢。
* T3 => Normal 中速网络扫描,并行扫描,两次扫描间隔 0 秒,扫描速度正常。
* T4 => Aggressive 快速网络扫描,并行扫描,两次扫描间隔 0 秒,扫描速度较快。
* T5 => Normal 快速网络扫描,并行扫描,两次扫描间隔 0 秒,扫描速度极快。

Scanning Format:

nmap -T[0-5] [IP or domain]

扫描方式

TCP扫描

端口扫描中最稳定的,利用的是 TCP 三次握手。TCP 扫描通常用于收集有关目标的更多信息,但是会和目标主机建立一个完成的 TCP 连接。

nmap -sT -Pn [IP or domain]

-sT TCP 连接扫描(s ==> 哪种类型扫描;T ==> TCP 类型)

image.png

SYN扫描

TCP 两次握手(隐藏扫描,速度快,nmap 缺省参数)

nmap -sS -Pn [IP or domain]

-sS SYN 连接扫描(s ==> 哪种类型扫描;S ==> SYN 类型)

image.png

ACK 扫描

ACK 扫描,用于确定 TCP 端口是否被防火墙过滤。

nmap -sA -Pn [IP or domain]

-sA ACK 连接扫描(s ==> 哪种类型扫描;A ==> ACK 类型)

image.png

UDP 扫描

DHCP,DNS,SNMP,TFTP 等都使用了 UDP 协议;UDP 扫描会评估目标系统上的 UDP 端口,可以确认 UDP 端口是开放还是被防火墙过滤。

nmap -sU -Pn [IP or domain]

-sU UDP 连接扫描(s ==> 哪种类型扫描;U ==> UDP 类型)
-sV UDP 扫描中添加版本扫描信息(V ==> 版本信息)
不存在 -Pn 参数(从 UDP 协议去理解,你发了就 ok 管他收没收到)

扫描IP段

For Example:

nmap 192.168.1.1-255    # 扫描 192.168.1.1-192.168.1.255 所有 IP
nmap 192.168.1.1/24     # 扫描 192.168.1.1-192.168.1.255 所有 IP
nmap -iL IPL.txt        # 扫描 IPL.txt 中保存的所有 IP

输出保存选项
* -oN => 保存为文本文件
* -oX => 保存为 XML 文件
* -oG => 保存为 GREPable 输出
* -oS => 脚本输出

其他更详细的扫描

主机发现

-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 扫描策略

# 适用所有大小网络最好的 nmap 扫描策略

# 主机发现,生成存活主机列表
nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt

# 端口发现,发现大部分常用端口
# https//nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf
nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt

# 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢
nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt

# 显示 TCP\UDP 端口
grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'
grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'

# 侦测服务版本
nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt

# 扫做系统扫描
nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt

# 系统和服务检测
nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt

# 扫描 B 段的存活主机
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 172.16.0.0/16 | grep -v down | grep "172.16."

Nmap 躲避防火墙

# 分段
nmap -f

# 修改默认 MTU 大小,但必须为 8 的倍数(8,16,24,32 等等)
nmap --mtu 24

# 生成随机数量的欺骗
nmap -D RND:10 [target]

# 手动指定欺骗使用的 IP
nmap -D decoy1,decoy2,decoy3 etc.

# 僵尸网络扫描, 首先需要找到僵尸网络的IP
nmap -sI [Zombie IP] [Target IP]

# 指定源端口号
nmap --source-port 80 IP

# 在每个扫描数据包后追加随机数量的数据
nmap --data-length 25 IP

# MAC 地址欺骗,可以生成不同主机的 MAC 地址
nmap --spoof-mac Dell/Apple/3Com IP

Nmap 进行 Web 漏洞扫描

cd /usr/share/nmap/scripts/
wget https://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar xzf nmap_nse_vulscan-2.0.tar.gz
nmap -sS -sV --script=vulscan/vulscan.nse target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv -p80 target
nmap -PN -sS -sV --script=vulscan –script-args vulscancorrelation=1 -p80 target
nmap -sV --script=vuln target
nmap -PN -sS -sV --script=all –script-args vulscancorrelation=1 target

Nmap 端口扫描

# 使用诱饵隐蔽扫描 nmap -D RND:10 [target] (生成随机数量的诱饵)
# fargement
# data packed – like orginal one not scan packet
# 使用 auxiliary/scanner/ip/ipidseq 来在僵尸网络中查找IP并使用这些IP进行扫描 — nmap -sI ip target
# nmap –source-port 53 target

nmap -sS -sV -D IP1,IP2,IP3,IP4,IP5 -f –mtu=24 –data-length=1337 -T2 target (随机使用不同的IP进行扫描)
nmap -Pn -T2 -sV –randomize-hosts IP1,IP2
nmap –script smb-check-vulns.nse -p445 target (使用 NSE 脚本)
nmap -sU -P0 -T Aggressive -p123 target (攻击式扫描 T1-T5)
nmap -sA -PN -sN target
nmap -sS -sV -T5 -F -A -O target (版本检测)
nmap -sU -v target (Udp)
nmap -sU -P0 (Udp)
nmap -sC 192.168.31.10-12 (全部使用默认配置)

Nmap参数

# 目标说明

`-iL` 从已有的ip列表文件中读取并扫描

`-iR+扫描数量` 随机选择目标进行扫描

`--exclude+ip` 不扫描此ip

# 主机发现

`-sL` 列出要扫描的ip

`-sn` 不进行端口扫描

`-Pn` 将所有主机都默认为在线,跳过主机发现

`-PS/PA/PU/PY` 使用TCP、SYN/ACK、UDP或SCTP协议去发现端口

`-PE/PP/PM`:使用ICMP响应(echo)、时间戳或子网掩码请求来发现探测

`-PO` 使用IP协议的ping

`-n` 不做DNS解析

`-R` 总是做DNS反向解析

`--dns-servers`指定自定义的DNS服务器

`--system-dns` 使用操作系统的DNS

`--traceroute` 追踪每台主机的跳转路径

# 扫描技术

`-sS/sT/sA/sW/sM`:使用SYN、TCP、全连接Connect()、ACK、Window、Maimon来进行扫描

`-sU` UDP扫描

`-sN/sF/sX` 使用TCP Null(无flag)、FIN、Xmas(FIN+Push+Urgent)扫描

`--scanflags +flags` 自定义TCP扫描的flags

`-sI` 僵尸机扫描

`-sY/sZ` 使用SCTP协议的INIT/COOKIE-ECHO扫描

`-sO` 进行IP协议扫描

`-b <FTP relay host>`:指定FTP中继主机进行FTP反弹扫描 
端口说明和扫描规则 
`-p` 只扫描指定的端口

`--exclude-ports` 不对此端口进行扫描

`-F` 快速模式,扫描比默认端口数量更少的端口

`-r` 有序地扫描端口而不是随机地扫描

`--top-ports <number>` 扫描排名指定的数字前几位的最常用的端口

`--port-ratio <ratio>` 扫描比输入的比例更常用的端口

# 服务、版本探测

`-sV`:探测开启的端口来获取服务、版本信息

`--version-intensity <level>`:设置探测服务、版本信息的强度

`--version-light`:强度为2的探测强度

`--version-all`:强度为9的探测强度

`--version-trace`:将扫描的具体过程显示出来

# 脚本扫描

`-sC`:等同于–script=default

`--script=<Lua scripts>`:指定使用Lua脚本进行扫描

`--script-args=<n1=v1,[n2=v2,...]>`:指定脚本的参数

`--script-args-file=filename`:指定提供脚本参数的文件

`--script-trace`:显示全部发送和收到的数据

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

`--script-help=<Lua scripts>`:显示脚本的相关信息

# 系统探测

`-O`:进行系统探测

`--osscan-limit`:限制系统探测的目标,如只探测[Linux系统](https://www.baidu.com/s?wd=Linux%E7%B3%BB%E7%BB%9F&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd)

`--osscan-guess`:更侵略性地猜测系统

# 定时和性能

`-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>`:最大的发包速率

# 防火墙、IDS绕过和欺骗

`-f; --mtu <val>`:设置MTU最大传输单元

`-D <decoy1,decoy2[,ME],...>`:伪造多个IP地址和源地址一同发送包,从而隐藏在众多的IP地址中而不易被发现

`-S <IP_Address>`:伪造源地址

`-e <iface>`:使用指定的接口

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

`--proxies <url1,[url2],...>`:指定代理服务器进行扫描

`--data <hex string>`:在发送包的数据字段中追加自定义的十六进制字符串

`--data-string <string>`:在发送包的数据字段中追加自定义的ASCII字符串

`--data-length <num>`:在发送包的数据字段中追加随机的数据

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

`--ttl <val>`:设置TTL值

`--spoof-[mac](https://www.baidu.com/s?wd=mac&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd) <mac address/prefix/vendor name>`:伪造源Mac地址

`--badsum`:发送伪造TCP/UDP/SCTP校验和Checksum的数据包

# 输出

`-oN/-oX/-oS/-oG <file>`:分别输出正常、XML、s|

# 杂项

`-6`:扫描IPv6的地址

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

`--datadir <dirname>`:指定自定义的[nmap](https://www.baidu.com/s?wd=nmap&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd)数据文件位置

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

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

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

`-V`:输出版本号

`-h`:输出帮助信息

Referer

nmap命令—–高级用法
nmap使用指南(终极版)
Nmap 所有参数
端口扫描之王——nmap入门精讲(一)

发表评论

电子邮件地址不会被公开。 必填项已用*标注