霞之彼端

🚀 善国峻的个人站点 🌏

0%

Nmap 的简单使用

基本语法

1
nmap <options...> <target>

简单端口扫描

1
nmap <target>

全面扫描

包括端口扫描, 各个端口的详细信息, 以及操作系统(版本)的猜测。

1
nmap -A <target>

输出详细信息

1
nmap -v <target>

扫描指定段

指定 IP 范围, 例如:

1
nmap 192.168.126.1-200

对某个子网进行探测, 例如:

1
nmap 192.168.126.131/24

检测主机状态

Ping 常用命令表

options 解释 注释
-sP Ping 扫描 只探测主机是否在线 (up or down) , 行为不易被发现
-P0(zero) 无 Ping 扫描 用于防火墙或目标主机禁止 Ping 的情况
-PS TCP SYN Ping 扫描 探测是否在线以及开放的端口
-PA TCP ACK Ping 扫描 可探测阻止 SYN 包或 ICMP Echo 请求的主机, 可与 ‘-PS’ 同时使用
-PU UDP Ping 扫描 如果目标主机响应则返回一个 ICMP 端口不可达 (Destination unreachable)
-PE; -PP; -PM ICMP Ping 扫描 ‘-PE’: ICMP Echo(大多防火墙不允许); ‘-PP’: ICMP 时间戳; ‘-PM’: ICMP 地址掩码(防火墙穿透效果相对较好)
-PR ARP 扫描 内网下防火墙不会禁止 ARP 请求
-n 禁止 DNS 反向解析 若单纯扫描一段 IP 使用该项会使过程更快
-R 反向解析域名 可以更清楚知道一段 IP 上有多少网站
–system-dns 使用系统域名解析器
-sL 列表扫描 仅列出网络 (子网) 上的每台主机
-6 扫描 IPv6 地址
–traceroute 路由跟踪 可探测出到目标之间的所有节点以及经过各个节点的时间
-PY SCTP INIT Ping 扫描 SCTP 协议可以看作是 TCP 协议的改进

端口扫描

参考链接:
各种端口及其服务(1)
各种端口及其服务(2)

注意: 目标端口是否可以访问与是否开放无太大的联系, 例如关闭的端口也可以接受 Nmap 发出的探测报文。

端口状态

端口状态 解释
Open 说明端口为开放状态, 确定为 Open 状态便于制定下一步的渗透计划
Closed 收到 RST 包, 说明端口未开放. 可以等一会儿再次扫描试试
Filtered 被某些专业的设备过滤了, 也可能是网络阻塞造成的, 可换不同时间段再次扫描试试
Unfiltered Nmap 不确定当前端口状态, 使用 ACK 扫描时才会出现这种状态, 需要换一种方式进行扫描以进一步确定是否开放
Open|Filtered 探测报文没有得到目标端口的相应, 不确定状态, 换方式扫描
Closed|Filtered 不确定状态, 换方式扫描. 只会出现在 IPID Idle 扫描中

端口扫描常用命令表

options 解释 注释
-p 指定端口 可以是一个端口或几个端口 (用,分隔) 或一个范围 (用-连接)
-T 时序选项 一般配合 -F 选项使用, 以保证扫描速度和质量
-F 部分扫描 只扫描默认设置的端口以提高速度
-sS TCP SYN 扫描 半开放扫描, 不会完成三次握手, 即高速高效又隐蔽
-sT TCP 连接扫描 可以用于 -sS 不能使用的时候, 速度较之更慢. 会完成三次握手故会被 IDS 捕捉, 端口扫描中最稳定的方式
-sU UDP 扫描 非常慢, 一般会指定端口进行扫描. 很多管理员会忽略这些端口. 收到 ICMP 端口不可达则端口关闭, 否则端口开放
-sN; -sF; -sX 隐蔽扫描 若OS不遵循 RFC793 (如 Windows) 则没效果; -sN: Null 扫描; -sF: FIN 扫描, 可在 -sS 被防火墙阻止时使用, 不完成三次握手故有很好的穿透效果; -sX: Xmas 扫描
-sA TCP ACK 扫描 致命缺点: 不能确定端口 Open or Filtered
-sW TCP 窗口扫描 通过返回的 RST 报文的窗口大小判断端口状态. 为 0 则为 Closed
-sM TCP Maimon 扫描 该技术除了探测报文是 FIN/ACK, 其他和 Null, FIN, Xmas 扫描完全一样
–scanflags 自定义 TCP 扫描 高级用法, 通过指定 TCP 标志位来扫描. 不规定顺序, 使用大写且没有间隔符
-sI 空闲扫描 高级用法, 允许进行端口完全欺骗扫描. 也利用不活跃的僵尸主机反弹给攻击者一个旁通信道 (而非使用自己的 IP) 进行端口扫描, 是一种非常隐蔽的扫描方式
-sO (ou) IP 协议扫描 扫描的不是端口号, 而是协议号. 用来确定 target 支持 IP 协议族中的哪些协议 (如 TCP, ICMP, IGMP)
-b FTP Bounce 扫描 需要借助一台 FTP 服务器, 是现在很少被支持的一种扫描方式, 但也不失为一种躲避防火墙的好办法, 或许能得到更多可靠的结果

参考链接:
常见的扫描类型
TCP 六种标志位详解
FTP Bounce Attack

Eg. 空闲扫描, 利用僵尸主机为 www.0day.co, 扫描 target 为 的主机对 www.baidu.com 进行空闲扫描:

1
nmap -sI www.0day.co:80 www.baidu.com

例子中使用的是僵尸主机的 80 端口, 也可以使用其他的端口, 但要求所选择的端口必须不能被自己的 Nmap 主机或 target 目标主机过滤掉并且该端口必须是 Open 的; 可以事先对僵尸主机进行端口扫描。

时序选择命令 (-T)

options 速度 注释
-T0 很慢 用于 IDS 逃避
-T1 缓慢 用于 IDS 逃避
-T2 较慢 不常用, 用于降低对宽带的消耗
-T3 默认 根据目标反应自动调整时间
-T4 快速 常用, 需要较好的网络环境, 请求可能会被淹没
-T5 极速 以牺牲准确度来提升扫描速度

IDS: 入侵检测系统 (Intrusion Detection System)

服务器的软件版本及操作系统的探测

通过对 target 进行 指纹识别 可以确定 target 使用的系统和服务, 这是信息搜集中不可或缺的一部分。

OS 探测的方法是根据不同 OS 对数据包特征(如 TTL, 特定的 TCP 包, ACK 序号等) 的不同响应特征进行分析识别。

指纹识别常用命令表

options 解释 注释
-sV 版本探测 可配合 -A 来探测出更详细的信息, 并以更直观的方式展示出来
–allports 全端口版本探测 默认情况下 Nmap 会跳过 9100/TCP 网络打印机端口
–version-intensity 设置扫描强度 后跟一个 0~9 范围的数字 (空格间隔), 值越高服务越准确, 但所花时间也越多. 默认强度为 7
–version-light 轻量级扫描 对应强度值为 2
–version-all 重量级扫描 对应强度值为 9
–version-trace 获取详细版本信息 对于获取 target 的额外信息非常有帮助
-sR RPC 扫描 多用于与其他 option (如 -sS) 结合使用
-O(ou) 操作系统探测
–osscan-limit 对检测 target 的条件限定 只对满足 “具有打开和关闭的端口” 条件的主机进行探测, 再对多个 target 探测时可以节约时间. 必须搭配 -O 或者 -A 使用
–osscan-guess; --fuzzy 推测系统识别 以百分比猜测系统

PRC: 远程过程调用协议, 默认使用 135 端口

优化扫描时间与性能

这些 options 一般用于扫描一个网络 (多个 IP) 时优化扫描时间。

优化扫描命令表

options 解释 注释
–min-hostgroup; --max-hostgroup 调整并行扫描组的大小 (空格间隔) 后跟组的最小 (最大) 主机数, 范围为 5~1024, Nmap 会根据给的限制先扫描一部分网络并尽快给出一个结果, 之后增大扫描的组把网络扫完
–min-parallelism; --max-parallelism 调整探测报文的并行度 –min-parallelism 值大于 1 时可以加快性能不佳的主机或网络的扫描, 但如果设置过高则影响准确度, 同时降低 Nmap 基于网络条件动态控制并行度的能力. 该值设为10较为合适. --max-parallelism 选项通常设为 1, 以防止 Nmap 在同一时间向主机发送多个探测报文, 搭配 --scan-delay 使用非常有用
–min-rtt-timeout; --max-rtt-timeout; --initial-rtt-timeout 调整探测报文超时 这些选项对于一些有严格过滤或者不能 Ping 通的主机有着很好的突破效果, 可以节省很多时间. 但选项设置过小则会反而增加时间. --max-rtt-timeout 设为 ‘100ms’ 比较合适, 设置范围最好在 ‘100ms’ 到
–host-timeout 放弃低速目标主机 用于设置愿意等待的最长时间, 比如可以设置为 ‘30m’ 来保证 Nmap 不会在 单个主机 上使用超过半小时的时间. 需要注意的是, Nmap 在这半小时中可以同时扫描其它主机, 因此并不是一旦卡住就只死等这个主机. 超时的主机被忽略. 如果设置的过小会导致网络还没有扫完就停止了扫描
–scan-delay; --max-scan-delay 调整探测报文的时间间隔 调整报文合适的时间间隔, 在对网络速度有限制的时候很有用. Solaris 服务器 (以及许多其他服务器) 通常会在响应 UDP 扫描探测数据包的时候每秒只处理一个 ICMP 消息, 发多了就是浪费, 这种情况下可以 “–scan-delay 1s” 使 Nmap 保持在那么慢的速度. --scan-delay 的另一个用途是避开 基于阈值 的入侵检测和防御系统, --max-scan-delay 在使用时也有一定风险, 详细信息请参考官方文档

参考链接:
Nmap 官方文档 - 时间与性能


官方文档:

  • Nmap 中文文档
  • Nmap 英文文档
  • 本文作者: 善国峻
  • 联系邮箱: me@ohmysites.com
  • 本文链接: https://www.ohmysites.com/archives/13/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!