Nmap 一款网络扫描和主机检测的非常有用的工具。

可以用于收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。

主要功能有:


(资料图片)

检测活在网络上的主机(主机发现)

检测主机上开放的端口(端口发现或枚举)

检测到相应的端口(服务发现)的软件和版本

检测操作系统,硬件地址,以及软件版本

检测脆弱性的漏洞(Nmap的脚本)

常用命令

-A :综合性扫描

-T4:指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4

-oX :将扫描结果生成 文件

-oG :将扫描结果生成 文件

-sn :只进行主机发现,不进行端口扫描

-O : 指定Nmap进行系统版本扫描

-sV: 指定让Nmap进行服务版本扫描

-p <port ranges>: 扫描指定的端口

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描

-sU:指定使用UDP扫描方式确定目标主机的UDP端口状况

-script <script name> : 指定扫描脚本

-Pn : 不进行ping扫描

-iL : 批量扫描中的目标地址

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现

-sY/sZ:使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况

-sO: 使用IP protocol 扫描确定目标机支持的协议类型

-PO : 使用IP协议包探测对方主机是否开启

-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机

-PS/PA/PU/PY :使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现

-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态

-e eth0:指定使用eth0网卡进行探测

-f : —mtu <val>: 指定使用分片、指定数据包的 MTU.

-b <FTP relay host>: 使用FTP bounce scan扫描方式

-g:指定发送的端口号

-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)

-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态

-n : 表示不进行DNS解析;

-D <decoy1,decoy2[,ME],...>:用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址

-R :表示总是进行DNS解析。

-F : 快速模式,仅扫描TOP 100的端口

-S <IP_Address>: 伪装成其他 IP 地址

—ttl <val>:设置 time-to-live 时间

—badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或 IDS/IPS)

—dns-servers : 指定DNS服务器

—system-dns : 指定使用系统的DNS服务器

—traceroute :追踪每个路由节点

—scanflags <flags>: 定制TCP包的flags

—top-ports <number> :扫描开放概率最高的number个端口

—port-ratio <ratio>: 扫描指定频率以上的端口。与上述—top-ports类似,这里以概率作为参数

—version-trace: 显示出详细的版本侦测过程信息

—osscan-limit:限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)

—osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统

—data-length <num>: 填充随机数据让数据包长度达到 Num

—ip-options <options>:使用指定的 IP 选项来发送数据包

—spoof-mac <mac address/prefix/vendor name> : 伪装 MAC 地址

—version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

—version-light: 指定使用轻量侦测方式 (intensity 2)

—version-all:尝试使用所有的probes进行侦测 (intensity 9)

—version-trace: 显示出详细的版本侦测过程信息

NSE脚本引擎

NSE脚本引擎(Nmap Scripting Engine)是nmap最强大,最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展nmap的功能。

nmap的脚本库的路径:/usr/share/nmap/scripts ,该目录下的文件都是nse脚本

NSE使用Lua脚本语言,并且默认提供了丰富的脚本库,目前已经包含了14个类别的350多个脚本。NSE的设计初衷主要考虑以下几个方面

网络发现(Network Discovery)更加复杂的版本侦测(例如 skype 软件)漏洞侦测(Vulnerability Detection)后门侦测(Backdoor Detection)漏洞利用(Vulnerability Exploitation)

例如:nmap -script smb-vuln-ms17-010 #可以探测该主机是否存在ms17_010漏洞

版本侦测用法

比如目标主机把SSH的22号端口改成了2222端口,那么如果使用普通扫描只会发现2222端口是开启的,并不能知道2222号端口上运行的程序,通过加参数 -sV 进行版本扫描,可以探测到目标主机上2222端口运行的是SSH服务

V: 指定让Nmap进行版本侦测—version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。—version-light: 指定使用轻量侦测方式 (intensity 2)—version-all: 尝试使用所有的probes进行侦测 (intensity 9)—version-trace: 显示出详细的版本侦测过程信息

OS侦测

操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。

Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。

OS侦测原理

Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。

具体实现方式如下:

Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

OS侦测用法#

-O: 指定Nmap进行OS侦测。

—osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。

—osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统

关键词: