nmap用法总结

Posted by kevin on April 2, 2020

preface

做 web 安全和渗透经常会用到 nmap 这个强大的工具,可以直接扫描内网存活的主机以及主机开放的端口,今天就记录一下 nmap 的各种使用方法,参照 nmap 官网 user-manual,用自己的话给翻译了过来

简介

nmap 是用于网络探索和安全审计的开源工具。 尽管它可以在单个主机上正常运行,但它旨在快速扫描大型网络。nmap 以新颖的方式使用原始 IP 数据包来确定网络上可用的主机,这些主机提供的服务(应用程序名称和版本),它们正在运行的操作系统(和 OS 版本),正在使用的包过滤器/防火墙的类型,还有许多其他特性。虽然 nmap 通常用于安全审计,但许多网络管理员发现它对于日常任务(例如网络清单,管理服务升级计划以及监视主机或服务正常运行时间)很有用。

下面就是一个典型的 nmap 扫描,-A 选项使用了 OS 检测,端口扫描,端口服务检测,路由追踪的功能,相当于一次全面的扫描,-T4 选项使命令更快执行

nmap -A -T4 scanme.nmap.org

nmap-scan

扫描主机

用 nmap 最简单的扫描方式就是将一个具体的 ip 地址附加在选项中,但是它可不止能做这些,它可以同时对多个主机进行扫描,局域网扫描是我的最爱。另外,nmap 可以接受的 ip 扫描范围也是多种多样的

  • CIDR 标记(一个IP地址加一个正斜杠再加一个0到32的数字): 例如 192.168.10.0/24 会扫描 192.168.10.0 到 192.168.10.255 之间的 256 个 ip 地址
  • 逗号-分隔符:例如 192.168.3-5,7.1 会扫描 192.168.3.1,192.168.4.1,192.168.5.1,192.168.7.1 这四个 ip 地址,拥有了更高的弹性
  • nmap -iL ip.txt 可以从文件中读取 ip 地址进行扫描,这一般网络管理员干的事,我用的不多
  • nmap 192.168.10.0/24 --exclude 192.168.10.0 ,排除不想扫描的 ip 地址

扫描端口

端口状态

尽管 nmap 的功能已经增长了很多年,但它最初是一个高效的端口扫描程序,至今仍是其核心功能。nmap 将端口分为六个状态:open, closed, filtered, unfiltered, open/filteredclosed/filtered。这些状态不是端口本身的固有属性,而是描述 nmap 如何看待它们。也就是只有参考意义,并不一定 100% 正确。

端口状态 意义
open 在这个端口上,应用程序正在积极地接受 TCP 连接、UDP 数据报或 SCTP 关联。找到这些通常是端口扫描的主要目标
closed 可以访问一个关闭的端口(它接收并响应 nmap 探测包),但是没有应用程序监听它。
filtered nmap 不能确定端口是否打开,因为包过滤阻止它的探测到达端口,可能是由于防火墙。
unfiltered 未过滤状态意味着端口是可访问的,但是 nmap 无法确定它是打开的还是关闭的。使用其他扫描类型(如窗口扫描、SYN 扫描或 FIN 扫描)扫描未过滤的端口可能有助于解决端口是否打开的问题。
open/filtered 当 nmap 无法确定端口是打开的还是过滤的时候,它会将端口置于这种状态。
closed/filtered 当 nmap 无法确定端口是关闭还是过滤时,将使用此状态。

扫描技巧

这里讲的是各种扫描的选项,学会了这些选项之后我们就能够知道在特定的场合下应该使用哪个选项,这个以后学到了再来更新,我目前也只会用 -sP 选项

扫描选项 意义
-sT TCP connect()扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
-sP ping扫描,加上这个参数会使用ping扫描,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
-sS 半开扫描,一般不会记入日志,不过需要root权限。
-sU udp扫描,但是一般不可靠。
-sA 用来穿过防火墙的规则集,速度慢。
-sV 显示端口服务及版本。
-A 包含了-sV,-O,全面系统检测,启动脚本检测,扫描等。
-P0 扫描之前不使用ping,适用于防火墙禁止ping,比较有用。
-v 显示扫描进程。

指定端口

除了常用的扫描选项外,nmap 还提供指定扫描哪些端口以及扫描顺序是随机的还是连续的选项。默认情况下,nmap 为每个协议扫描最常见的 1000 个端口。

端口选项 意义
-p 只扫描指定的端口,可以是一个范围,如 nmap -p 1-1024 localhost,也可以是指定的服务,比如说我想要扫描本地开放 HTTP 服务的端口,可以用 nmap -p http localhost
–exclude-ports 不扫描被排除的端口
-F 更快的扫描,默认是 1000 个常用端口,此选项缩减到 100

端口服务以及版本

  • -sV 选项可以扫描主机端口提供的服务以及应用程序的版本号

操作系统检测

-O 选项可以知道主机的操作系统,但是建议用 -A 选项,因为它同时包含了 -sV 和 -O 以及 traceroute,功能更强大

输出格式

默认的输出是在交互式命令行(stdout)中显示出来的,想要保存结果的话 nmap 也为我们提供了很多格式,其中最大众化的就是 xml 格式

输出选项 意义
-oN 将结果保存为自定义的格式,可以是任意后缀,内容就是 stdout 中的内容
-oX 将结果保存为 xml 格式,具有层级,不过略显啰嗦,我更喜欢用 -oN

后记

其实 nmap 用多了会发现也就是那些选项而已,并没有很吓人,至于更高级的用法需要很好的掌握计算机网络才能得心应手,总之,nmap 是个很强大的工具。使用之前如果忘记的话也可以使用 man nmap 来查看一下可用的选项,毕竟手册上都有呢

reference

Nmap Reference Guide

https://blog.csdn.net/qq1124794084/article/details/78675455