nmap

Table of Contents

  1. 主要功能
  2. 基本扫描策略
    1. 无任何附加参数 nmap IP地址
    2. 冗余 nmap -vv IP地址
    3. 指定端口号 nmap -p端口号 IP地址
    4. 操作系统侦测 nmap -O IP地址/nmap -A IP地址
    5. 只进行主机发现 nmap -sn IP地址
    6. 跳过主机发现 nmap -Pn IP地址
    7. 扫描和版本号侦测 nmap -sV IP地址
    8. UDP 扫描 nmap -sU IP地址
  3. 绕过防火墙
    1. 利用掩体 namp -D IP地址1,IP地址2… IP地址
    2. 禁用 ping nmap -P0 IP地址
    3. IP 地址伪装 sudo proxychains nmap
    4. 空闲扫描 nmap -sI 僵尸IP地址[:开放的僵尸端口] IP地址
    5. 指定网卡进行扫描 nmap -e 网卡 IP地址
    6. 限制扫描时间 nmap host-timeout 时间 IP地址
    7. 指定源 IP 地址 nmap -S 源IP地址 IP地址
    8. 定源主机端口 nmap -g 53 IP地址
    9. 数据包分片技术 nmap -f IP地址/nmap mtu mtu单元大小 IP地址
    10. 添加垃圾数据 nmap data-length 垃圾数据长度 IP地址
    11. 随机选择扫描对象 nmap randomize-hosts IP地址
    12. 伪装 MAC 地址 nmap spoof-mac 伪造MAC IP地址
    13. 伪造检验值 nmap badsum IP地址
    14. 扫描速度 nmap -T0 IP地址
  4. Nmap 脚本引擎
  5. 常用技巧
    1. -sS 半开放扫描(非3次握手的tcp扫描)

主要功能

  • 主机发现
  • 端口扫描
  • 服务版本侦测
  • 操作系统侦测

基本扫描策略

无任何附加参数 nmap IP地址

  • 如果是超级用户,无参数扫描等价于 sS 参数扫描(SYN,半连接);否则,无参数扫描等价于 sT 参数扫描(TCP,完整连接)。

冗余 nmap -vv IP地址

按照基本法,v 参数通常表示冗余。我们使用两个 v 参数表示将侦测过程原原本本的打印输出出来。

指定端口号 nmap -p端口号 IP地址

这里 p 参数表示端口,标准写法后面跟的端口号之间没有空格。但是如果写一个空格也并无妨。

操作系统侦测 nmap -O IP地址/nmap -A IP地址

操作系统侦测有两个参数选项,其一是参数 O,其二是参数 A,后者乃前者的冗余版本。我更多的使用 A 参数,以得到更多的信息

只进行主机发现 nmap -sn IP地址

主机发现的手段不下几十种,但是最常用的却是 sn 参数,它表示 “使用 ping 扫描来侦测存活的主机,而不进行端口扫描”。

跳过主机发现 nmap -Pn IP地址

有时候对方主机开启了防火墙(这是很自然的事情),可能过滤掉了你发送的 ICMP 协议数
据包,这样如果想要使用 sn 参数来进行主机发现就不管用了,产生的结果也不可靠。于是
你不得不使用 Pn 参数,它假设所有的目标 IP 均为存活,并一个一个主机的进行端口扫描,
你懂的这样会牺牲一些时间作为代价。

扫描和版本号侦测 nmap -sV IP地址

该选项通过侦测开放的端口来判断开放的服务,并试图检测它的版本。虽然 A 选项也能做
到,但是要检测开放的服务版本,sV 一定是最合适的。

UDP 扫描 nmap -sU IP地址

绕过防火墙

前面讲的 Pn 选项就可以看成是 sn 选项的逃脱策略。所谓逃脱,就是不让别人发现自己,否
则要干的侦测工作还没搞完,就被迫中止岂不让人笑话。同样的,排名不分先后。

利用掩体 namp -D IP地址1,IP地址2… IP地址

你可以使用 D 选项(英文 decoy)跟一些 IP 地址,IP 和 IP 之间用逗号隔开。这样看起
来用来侦测而发送的数据包不仅来自于你的 IP 地址,还来自于这些掩体 IP。这就叫做
“混入其中”。

禁用 ping nmap -P0 IP地址

在 2010 年之后,该选项和 PN 选项被一起合并到 Pn 选项之中。但是如果你愿意,你仍然可以使用 P0 选项(P 后面跟的是零)。

IP 地址伪装 sudo proxychains nmap

伪装 IP 地址的方法也有很多,比如你可以使用 prxychains 这款工具来实现匿名代理。

空闲扫描 nmap -sI 僵尸IP地址[:开放的僵尸端口] IP地址

和 D 选线不同的是,sI 根本不使用你自己的 IP 地址,而是使用空闲的网络资源。这样隐
蔽性就更强了。开放的僵尸端口为选填,默认等于 80 端口。具体原理请参考 Nmap 文档。
根据这个理论,你不能使用空闲扫描来扫描你自己的主机 IP。在 msfconsole 中,你可以
使用 auxiliary/scanner/ip/ipidseq 来完成这个工作。

指定网卡进行扫描 nmap -e 网卡 IP地址

当你拥有不止一个网卡的时候,这很有用。

限制扫描时间 nmap host-timeout 时间 IP地址

限制每个 IP 地址的扫描时间(单位为秒),当要扫描大量的主机 IP 时这很有用。

指定源 IP 地址 nmap -S 源IP地址 IP地址

使用冒充的 IP 地址进行扫描以增强隐蔽性。这里伪装成的 IP 也可以来自于下线状态的主机地址。

定源主机端口 nmap -g 53 IP地址

使用 g 参数,或者 source-port 参数,来手动设定用来扫描的端口。常用的,如 20、53、
67 端口。

数据包分片技术 nmap -f IP地址/nmap mtu mtu单元大小 IP地址

上面两种方法都可以利用数据包分片技术,某些防火墙为了加快处理速度而不会进行重组处
理,这样从而逃脱防火墙或闯入检测系统的检测。注意,mtu 的值必须是 8 的倍数(如 8、
16、24、32 等)。

添加垃圾数据 nmap data-length 垃圾数据长度 IP地址

一些常见的扫描之数据包是有特定的数据长度的,通过在发送的数据包末尾添加随机的垃圾
数据,以达到混淆视听的作效果。

随机选择扫描对象 nmap randomize-hosts IP地址

如果你要扫描大量的,比如成百上千的主机 IP,这很有效。它会打乱扫描顺序,以规避检测系统的检测。

伪装 MAC 地址 nmap spoof-mac 伪造MAC IP地址

你可以通过指定供应商的名字来伪装 MAC 地址。可选的名字有 Dell、Apple、3Com。当然
也可以手动指定 MAC 地址的值。或者为了简单起见,可以在上面 “伪造IP” 的地方填写数
字 0,这将生成一个随机的 MAC 地址。

伪造检验值 nmap badsum IP地址

这将使用伪造的 TCP / UDP / SCTP 校验和发送数据。

扫描速度 nmap -T0 IP地址

T后面跟的数字代表扫描速度,数字越大则速度越快。0~5分别表示:妄想症、鬼鬼祟祟、
彬彬有礼、正常、好斗、精神病

Nmap 脚本引擎

Nmap 脚本引擎内置在 Nmap 中,使用 script 参数进行调用。它的英文名是 Nmap Script
Engine,简称 NSE
Nmap 内置了一些已经写好的脚本,在 Kali 等主流渗透系统中被保存在
usr/share/nmap/scripts 文件夹下。文件后缀名是 .nse。使用 sC(等价于
script=default)或者 script 参数对 Nmap 脚本进行调用

常用技巧

-sS 半开放扫描(非3次握手的tcp扫描)

使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快,效率高
(一个完整的tcp连接需要3次握手,而-sS选项不需要3次握手)
Tcp SYN Scan (sS) 它被称为半开放扫描
优点:Nmap发送SYN包到远程主机,但是它不会产生任何会话,目标主机几乎不会把连接记入系统日志。(防止对方判断为扫描攻击),扫描速度快,效率高,在工作中使用频率最高
缺点:它需要root/administrator权限执行