nmap

简介:

Nmap (网络映射器)是Gordon Lyon最初编写的一种安全扫描器,用于发现计算机网络上的主机和服务,从而创建网络的“映射”。为了实现其目标,Nmap将特定数据包发送到目标主机,然后分析响应.NMAP强大的网络工具,用于枚举和测试网络。
Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用winodws,linux,mac等操作系统,是一款非常强大的渗透测试工具。

常用功能介绍:

语法:

nmap [选项/多选项/协议] [目标地址] 

指令

Nmap 7.94SVN ( https://nmap.org )
用法:nmap [扫描类型] [选项] {目标规范}
目标规范:
  可以传递主机名、IP地址、网络等。
  例如:scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
  -iL <输入文件名>:从主机/网络列表输入
  -iR <主机数>:随机选择目标
  --exclude <主机1[,主机2][,主机3],...>:排除主机/网络,例: nmap 192.168.1.0/24 --exclude 192.168.1.1 不会对192.168.1.1进行扫描
  --excludefile <排除文件>:从文件排除列表,例: nmap 192.168.1.0/24 --excludefile list.txt 不会对list.txt 里面的地址进行扫描
主机发现:
  -sL:列表扫描 - 仅列出要扫描的目标,例: nmap -iL list.txt
  -sn:Ping扫描 - 禁用端口扫描,在 5.21 之前为 -sP ,例: nmap -sn 192.168.1.110
  -Pn:将所有主机视为在线,跳过主机发现,在 5.20 之前为 -P0 ,可以躲避防火墙防护,可以在目标主机禁止ping的情况下使用
  -PS/ -PA / -PU / -PY [端口列表]:给定端口的TCP SYN/ACK, UDP或SCTP发现
  -PE/ -PP / -PM :ICMP回声、时间戳和子网掩码请求发现探测
  -PO[协议列表]:IP协议Ping
  -n/ -R:从不进行DNS解析/总是解析 [默认:有时]
  --dns-servers <服务1[,服务2],...>:指定自定义DNS服务器
  --system-dns:使用操作系统的DNS解析器
  --traceroute:追踪到每个主机的跳数路径
扫描技术:
  -sS/ -sT / -sA / -sW / -sM :TCP SYN/TCP 全连接/TCP ACK/ TCP 窗口/Maimon扫描,通常会选择 -sS(SYN 扫描)或 -sT(全连接扫描)获得可靠的结果
  -sU:UDP扫描
  -sN/ -sF / -sX :TCP Null, FIN和Xmas扫描
  --scanflags <标志>:自定义TCP扫描标志
  -sI <僵尸主机[:探针端口]>:空闲扫描,允许端口完全欺骗,可以允许不使用自身ip的情况下发起扫描,非常隐蔽的扫描.但得先寻找空闲主机,指令为: nmap -p80 -open -script ipidseq 192.168...,第二种是随机寻找: nmap -p80 -open -script  ipidseq -iR 2000 ( iR 选项指随机选择目标.2000指选择的数量, -open 指只选择端口开放的空闲主机)
  -sY/ -sZ :SCTP INIT/COOKIE-ECHO扫描
  -sO:IP协议扫描
  -b <FTP中继主机>:FTP弹跳扫描
端口规范和扫描顺序:
  -p <端口范围>:仅扫描指定端口,例:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  -p-  : 扫描所有端口 1-65535
  --exclude-ports <端口范围>:从扫描中排除指定端口
  -F:快速模式 - 扫描的端口比默认扫描少
  -r:端口按顺序扫描 - 不随机化
  --top-ports <数量>:扫描最常见的<数量>个端口
  --port-ratio <比例>:扫描比<比例>更常见的端口
服务/版本探测:
  -sV:探测开放端口以确定服务/版本信息
  -sV --allports  : 只有使用 --allports 才能扫描所有的端口,Nmap 会使用默认的端口范围或者你指定的端口,通常是 1000 个最常见的端口,除非使用 -p 参数来指定一个不同的端口范围
  --version-intensity <级别>:从0(轻量)到9(尝试所有探测)
  --version-light:限制最可能的探测(强度2)
  --version-all:尝试每一个探测(强度9)
  --version-trace:显示详细的版本扫描活动(用于调试)
脚本扫描:
  -sC:等同于 --script=default ,执行默认的脚本扫描
  --script=<Lua脚本>:<Lua脚本>是一个逗号分隔的目录、脚本文件或脚本类别列表,常用的 default 默认运行的脚本,通常用于基本的信息收集和漏洞探测, vuln 扫描已知漏洞的脚本, exploit 利用已知漏洞的脚本
  --script-args=<n1=v1,[n2=v2,...]>:提供脚本参数
  --script-args-file=文件名:在文件中提供NSE脚本参数
  --script-trace:显示发送和接收的所有数据
  --script-updatedb:更新脚本数据库。
  --script-help=<Lua脚本>:显示关于脚本的帮助。
           <Lua脚本>是脚本文件或脚本类别的逗号分隔列表。
操作系统探测:
  -O:启用操作系统探测
  --osscan-limit:将操作系统探测限制在有希望的目标上
  --osscan-guess:更积极地猜测操作系统
时序和性能:
  选项中的<时间>是以秒为单位,或者在值后面添加'ms'(毫秒)、
  's'(秒)、'm'(分钟)或'h'(小时)(例如:30m)。
  -T<0-5>:设置时序模板(数字越高越快), 用于IDS逃逸
  --min-hostgroup/max-hostgroup <大小>:并行主机扫描组大小
  --min-parallelism/max-parallelism <探针数>:探针并行化
  --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间>:指定
      探针往返时间。
  --max-retries <尝试次数>:限制端口扫描探针重传次数。
  --host-timeout <时间>:在这么长时间后放弃目标
  --scan-delay/--max-scan-delay <时间>:调整探针之间的延迟
  --min-rate <数字>:发送包的速度不低于<数字>每秒,指定最低速率
  --max-rate <数字>:发送包的速度不高于<数字>每秒,指定最高速率
防火墙/IDS逃避和欺骗:
  -f; --mtu <值>:分片数据包(可选给定MTU)
  -D <诱饵1,诱饵2[,ME],...>:用诱饵掩盖扫描
  -S <IP地址>:伪造源地址
  -e <接口>:使用指定接口
  -g/--source-port <端口号>:使用给定端口号
  --proxies <url1,[url2],...>:通过HTTP/SOCKS4代理中继连接
  --data <十六进制字符串>:向发送的数据包追加自定义有效载荷
  --data-string <字符串>:向发送的数据包追加自定义ASCII字符串
  --data-length <数字>:向发送的数据包追加随机数据
  --ip-options <选项>:发送具有指定IP选项的数据包
  --ttl <值>:设置IP生存时间字段
  --spoof-mac <MAC地址/前缀/厂商名>:伪造您的MAC地址
  --badsum:发送具有错误的TCP/UDP/SCTP校验和的数据包
输出:
  -oN / -oX / -oS / -oG <文件>:分别以正常(.nmap)、XML(.xml)、s|<rIpt kIddi3("Script Kiddie"脚本小子,不利于阅读和数据分析)和可被grep处理的格式(.gnmap)输出扫描结果到给定文件名。
  -oA <基本名>:一次性以三种主要格式(.nmap,.xml,.gnmap)输出
  -v:提高详细程度(使用 -vv 或更多以获得更大效果)
  -d:提高调试级别(使用 -dd 或更多以获得更大效果)
  --reason:显示端口处于特定状态的原因
  --open:仅显示开放(或可能开放)的端口
  --packet-trace:显示发送和接收的所有数据包
  --iflist:打印主机接口和路由(用于调试)
  --append-output:向指定的输出文件追加,而不是覆盖
  --resume <文件名>:恢复中断的扫描
  --noninteractive:禁用通过键盘的运行时交互
  --stylesheet <路径/URL>:XSL样式表将XML输出转换为HTML
  --webxml:引用Nmap.Org的样式表以获得更便携的XML
  --no-stylesheet:防止将XSL样式表与XML输出关联
杂项:
  -6:启用IPv6扫描
  -A:启用操作系统探测、版本探测、脚本扫描和跟踪路由,全面综合扫描
  --datadir <目录名>:指定自定义Nmap数据文件位置
  --send-eth/--send-ip:使用原始以太网帧或IP数据包发送
  --privileged:假设用户具有完全权限
  --unprivileged:假设用户缺乏原始套接字权限
  -PR  : ARP Ping扫描
  -sR  : 判断开放端口是否为RPC端口, 如果是返回程序和版本号
  --resaon  : 显示主机存活原因
  -V:打印版本号
  -h:打印此帮助摘要页面。
示例:
  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
更多选项和示例请查看手册页 (https://nmap.org/book/man.html)

常用操作

Nmap常用命令

Nmap常用操作

# 主机发现,5.21 之前为 -sP
sudo nmap -sn 192.168.56.0/24

# 端⼝扫描
sudo nmap -sT --min-rate 10000 -p- 192.168.56.110 -oA nmapscan/ports

# 端⼝数据格式化
grep open nmapscan/ports.nmap | awk -F'/' '{print $1}' | paste -sd ','
ports=$(grep open nmapscan/ports.nmap | awk -F'/' '{print $1}' | paste -sd ',')
echo $ports

# 详细信息扫描
sudo nmap -sT -sV -sC -O -p80,111,777 192.168.56.110 -oA nmapscan/info

# udp扫描
sudo nmap -sU -p- 192.168.56.110 -oA nmapscan/udp

# 漏洞脚本扫描
sudo nmap --script=vuln -p80,111,777 192.168.56.110 -oA nmapscan/vuln

参数含义

  -sn : Ping扫描 - 禁用端口扫描,在 5.21 之前为 -sP
  -sT : TCP 全连接扫描
  --min-rate <数字>:发送包的速度不低于<数字>每秒,指定最低速率
  -p <端口范围>:仅扫描指定端口,例:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  -p-  : 扫描所有端口 1-65535
  -oA <基本名>:一次性以三种主要格式(.nmap,.xml,.gnmap)输出
  -sV:探测开放端口以确定服务/版本信息
  -O:启用操作系统探测
  -sU:UDP扫描
  -sC:等同于 --script=default ,执行默认的脚本扫描
  --script=<Lua脚本>:<Lua脚本>是一个逗号分隔的目录、脚本文件或脚本类别列表,常用的 default 默认运行的脚本,通常用于基本的信息收集和漏洞探测, vuln 扫描已知漏洞的脚本, exploit 利用已知漏洞的脚本

其他

# 注:192.168.56.1 为目标IP地址
# 1. 纯扫描,默认情况下,nmap会发出一个arp ping扫描,且扫描目标tcp端口,范围为1-10000。
nmap 192.168.56.1

# 2. Nmap普通扫描增加输出冗长(非常详细)
nmap -vv 192.168.56.1

# 3. 端口扫描
nmap 192.168.56.1 -p 80  # 指定定单个端口
nmap 192.168.56.1 -p 1-100 # 多个端口
nmap 192.168.56.1 -p- # 所有端口
nmap -sP 10.1.112.89 # Ping扫描
nmap -sS 192.168.56.1 -p 80 # SYN半连接扫描
nmap -sT 192.168.56.1 -p 80  # TCP全连接扫描
nmap -sU 192.168.56.1 # UDP扫描
nmap -sF  192.168.56.1 # FIN,目标可能有IDS/IPS系统的存在,防火墙可能过滤掉SYN数据包,发送一个FIN标志的数据包不需要完成TCP的握手

# 4. 路由追踪
nmap --traceroute 192.168.56.1

# 5. 扫描一个网段
nmap -sP 192.168.56.1/24

# 6. 扫描目标主机版本(不是很准确)
nmap -O 192.168.56.1 -p 80

# 7. 扫描目标服务版本
nmap -O -sV 192.168.56.1 -p 80

# 8. 全面扫描(包含了1-10000端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测)
nmap -A 192.168.56.1 -p-

# 9. 保存结果
nmap -A 192.168.56.1 -p- -oN nmap1

# 10. nmap命令混合式扫描
nmap -vv -p1-100 -o 192.168.56.1

# 11. 扫描多个目标
nmap 192.168.56.1 127.0.0.2
nmap 192.168.56.1-100 # 扫描 IP 地址范围内的所有主机
nmap -iL target.txt # namp在同一目录下,扫描这个txt内的所有主机