nmap参考指南

简单介绍nmap

Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具主机检测工具

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

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

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

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

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

命令:**nmap [ <扫描类型> …] [ <选项> ] { <扫描目标说明> }**

#nmap 192.168.3.1 扫描主机 简单扫描 1-1000端口

#nmap 192.168.3.1 扫描整个子网

#nmap 可以执行多个目标

#nmap -sL 192.168.1.1/24如果你想看到你扫描的所有主机的列表

#nmap -p80,21,23 192.168.1.1 扫描端口

nmap端口状态解析
open: 应用程序在该端口接收 TCP 连接或者 UDP 报文。
closed :关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应。但没有应用程序在其上监听。
filtered :由于包过滤阻止探测报文到达端口,nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙。
unfiltered :未被过滤状态意味着端口可访问,但是nmap无法确定它是开放还是关闭。 只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态。
open| filtered :无法确定端口是开放还是被过滤, 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP协议,FIN, Null等扫描会引起。
closed|filtered:(关闭或者被过滤的):无法确定端口是关闭的还是被过滤的

除了端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。

选项概要

nmap最新选项

target specification(目标说明)

can pass hostnames, Ip addresses,networks,etc

  -iL <inputfilename>: Input from list of hosts/networks
#nmap -iL target.txt 如果你有一个ip地址列表,将这个保存为一个txt文件,和namp在同一目录下,扫描这个txt内的所有主机
-iR <num hosts>: Choose random targets (随机选择目标)
eg: nmap -iR 5#随机5个目标扫描
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
#nmap 192.168.1.1/24 -exclude 192.168.1.1 排除192.168.1.1扫描其他网络
#nmap 192.168.1.1/24 -excludefile target.txt ?报错
#I cannot figure out what source address to use for device xcluce, does it even exist?
#QUITTING!

HOST DISCOVERY(发现主机):



-sL: 列表扫描 - 简单列出要扫描的目标
-sP: Ping 扫描 - 只需确定主机是否在线
-P0:将所有主机视为online -- 跳过主机发现
-PS/PA/PU [portlist]: TCP SYN/ACK 或 UDP 发现探测到给定的端口
-PE/PP/PM:ICMP 回显、时间戳和网络掩码请求发现探测
-n/-R:从不进行 DNS 解析/始终解析 [默认:有时解析]

-sL (列表扫描)

列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机, 不发送任何报文到目标主机。默认情况下,Nmap仍然对主机进行反向域名解析以获取 它们的名字

既然只是打印目标主机的列表,像其它一些高级功能如端口扫描,操作系统探测或者Ping扫描 的选项就没有了。如果您希望关闭ping扫描而仍然执行这样的高级功能,请阅读关于 -P0选项的介绍。

# 部分
Nmap scan report for 192.168.3.254
Nmap scan report for 192.168.3.255
Nmap done: 256 IP addresses (0 hosts up) scanned in 4.07 seconds

-sP(Ping扫描)

该选项告诉Nmap仅仅进行ping扫描,然后打印出对扫描做出响应的那些主机。没有进一步的测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极,常常用于和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。 对于攻击者来说,了解多少主机正在运行比列表扫描提供的一列IP和主机名往往更有价值。

系统管理员往往也很喜欢这个选项。 它可以很方便地得出 网络上有多少机器正在运行或者监视服务器是否正常运行。常常有人称它为 地毯式ping,它比ping广播地址更可靠,因为许多主机对广播请求不响应。

-sP选项在默认情况下, 发送一个ICMP回声请求和一个TCP报文到80端口。如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR), ,除非使用了--send-ip选项。 -sP选项可以和除-P0)之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。 一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。 当防守严密的防火墙位于运行Nmap的源主机和目标网络之间时, 推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就不能被探测到。

PING扫描需要ROOT权限,如果用户没有ROOT权限,PING扫描将会使用connect()调用.

#部分
Nmap scan report for 192.168.3.23
Host is up (0.00043s latency).
MAC Address: xxx (Intel Corporate)
Nmap scan report for 192.168.3.24
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 1.95 seconds

-P0 (无ping)

该选项完全跳过Nmap发现阶段。 通常Nmap在进行高强度的扫描时用它确定正在运行的机器。 默认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描,版本探测,或者操作系统探测。用-P0禁止 主机发现会使Nmap对每一个指定的目标IP地址 进行所要求的扫描。所以如果在命令行指定一个B类目标地址空间(/16), 所有 65,536 个IP地址都会被扫描。 -P0的第二个字符是数字0而不是字母O。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表, 而是继续执行所要求的功能,就好像每个IP都是活动的。

# 部分
Nmap scan report for 192.168.3.24
Host is up (0.0000020s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh

-PS [portlist] (TCP SYN Ping)

该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 (可以通过改变nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值进行配置,但不同的端口也可以作为选项指定。 甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在这种情况下,每个端口会被并发地扫描。

SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发回来。 如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应 一个SYN/ACK TCP报文。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,否则,一个完全的连接将会建立。 RST报文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到 的SYN/ACK感到很意外。

Nmap并不关心端口开放还是关闭。 无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。

在UNIX机器上,通常只有特权用户 root 能否发送和接收 原始的TCP报文。因此作为一个变通的方法,对于非特权用户, Nmap会为每个目标主机进行系统调用connect(),它也会发送一个SYN 报文来尝试建立连接。如果connect()迅速返回成功或者一个ECONNREFUSED 失败,下面的TCP堆栈一定已经收到了一个SYN/ACK或者RST,该主机将被 标志位为在运行。 如果连接超时了,该主机就标志位为down掉了。这种方法也用于IPv6 连接,因为Nmap目前还不支持原始的IPv6报文。

扫描技术

扫描技术:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon 扫描
-sN/sF/sX:TCP Null、FIN 和 Xmas 扫描
--scanflags <flags>:自定义 TCP 扫描标志
-sI <zombie host[:probeport]>: Idlescan
-sO:IP 协议扫描
-b <ftp 中继主机>:FTP 反弹扫描

tcp SYN Scan (sS) SYN半连接扫描

半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.

如果nmap没有指出扫描类型默认是 Tcp SYN 但他需要root/administrator

#nmap -sS 192.168.1.1

tcp connect() scan(sT) TCP全连接扫描

Tcp connect()扫描需要完成三次握手,并且要求调用系统的connect().Tcp connect()扫描技术只适用于找出TCP和UDP端口.

#nmap -sT 192.168.1.1

UDP scan (sU)

寻找目标主机打开的UDP端口.它不需要发送任何的SYN包,针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的.

#nmap -sU 192.168.1.1

FIN scan(sF)

有时候Tcp SYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手.

FIN扫描也不会在目标主机上创建日志(FIN扫描的优势之一).个类型的扫描都是具有差异性的,FIN扫描发送的包只包含FIN标识,NULL扫描不发送数据包上的任何字节,XMAS扫描发送FIN、PSH和URG标识的数据包.

version scan(sV)

不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCP SYN扫描开放了哪些端口.

idle scan(sL)

Idle scan是一种先进的扫描技术,它不用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包.

Idle scan是一种理想的匿名扫描技术,通过目标网络中的192.168.1.6向主机192.168.1.1发送数据,来获取192.168.1.1开放的端口

有需要其它的扫描技术,如 FTP bounce(FTP反弹), fragmentation scan(碎片扫描), IP protocol scan(IP协议扫描),以上介绍的是几种最主要的扫描方式.

os检测(O)

Nmap有一个名为的nmap-OS-DB数据库, Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照。

Nmap的操作系统指纹识别技术:

  • 设备类型(路由器,工作组等)

  • 运行(运行的操作系统)

  • 操作系统的详细信息(操作系统的名称和版本)

  • 网络距离(目标和攻击者之间的距离跳)

如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机。

#nmap -O -PN 192.168.1.1/24

PN参数可以绕过ping 命令 但不影响主机的系统发现

OS Scan的结果是不可靠的,因为没有发现至少一个开放或者关闭的端口.应该是远程主机做了针对操作系统检测的防范。如果Nmap不能检测到远程操作系统类型,那么就没有必要使用**-osscan_limit**检测。

#nmap -O –osscan-guess 192.168.1.1

端口规范和扫描:

-p <端口范围>:仅扫描指定端口

EX:-P22; -P1-65535; -P U:53,111,137,T:21-25,80,139,8080

-f:快速 - 仅扫描NMAP-Services文件中列出的端口

-R:连续扫描端口 - 不要随机化

服务/版本检测:

-sV:探测开放端口以确定服务/版本信息
–version-light:限制最可能的探测以更快识别
–version-all:尝试每个用于版本检测的单个探测器
–version-trace:显示详细的版本扫描活动(用于调试)

操作系统检测:

-O:启用操作系统检测
–osscan-limit:将操作系统检测限制为有希望的目标
–osscan-guess:猜测操作系统更多积极

计时和性能:

-T[0-6]:设置计时模板(越高越快)
--min-hostgroup/max-hostgroup <size>:并行主机扫描组大小
--min-parallelism/max-parallelism <numprobes>:探针并行化
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <msec>:指定探针往返时间。
--host-timeout <msec>:在这么长的时间后放弃目标
--scan-delay/--max-scan-delay <msec>:调整探测器之间的延迟

防火墙/IDS 逃避和欺骗:

-f; --mtu <val>: 分片数据包 (可选w/给定 MTU)
-D <decoy1,decoy2[,ME],...>: 用诱饵隐藏扫描
-S <IP_Address>: 欺骗源地址
-e <iface >:使用指定的接口
-g/--source-port <
portnum >:使用给定的端口号--data-length <num>:将随机数据附加到发送的数据包中
--ttl <
--spoof-mac <mac 地址、前缀或供应商名称>:欺骗您的 MAC 地址

OUTPUT:

-oN/-oX/-oS/-oG <file>:输出扫描结果为正常、XML、s|<rIpt kIddi3 ,
和 Grepable 格式,分别为给定的文件名。
-oA <basename>:一次以三种主要格式输出
-v:增加详细级别(使用两次以获得更多效果)
-d[level]:设置或增加调试级别(最多9个有意义)
--packet-trace : 显示所有发送和接收的数据包
--iflist: 打印主机接口和路由 (用于调试)
--append-output: 附加到而不是破坏指定的输出文件
--resume <filename>: 恢复中止的扫描
--stylesheet <path/URL>:将 XML 输出转换为 HTML 的 XSL 样式表
--no-stylesheet:防止 Nmap 将 XSL 样式表与 XML 输出关联

MISC:

-6:启用 IPv6 扫描
-A:启用操作系统检测和版本检测
--datadir <dirname>:指定自定义 Nmap 数据文件位置
--send-eth/--send-ip:使用原始以太网帧或 IP 数据包发送数据包
--privileged:假设用户具有完全特权
-V:打印版本number
-h:打印此帮助摘要页。

dnmap 多台客户端机器扫描服务端

命令 描述
–traceroute 扫描主机端口并跟踪路由
-p 扫描指定端口和端口范围
-sP 对目标主机进行ping扫描
-A 使用高级功能进行扫描
-PE 强制执行直接的ICMPping
-sV 探测服务版本信息
-d 增加调试信息地输出
-PU 发送udp ping
-ps 发送同步(SYN)报文

2.重要参数

-sN:进行Null扫描

-sX:进行Xmas扫描

-O:进行测探目标主机版本(不是很准)

-sV:可以显示服务的详细版本

-A:全面扫描

-oN:会将扫描出来的结果保存成一个txt文件

-oX:会将扫描出来的结果保存成一个xml文件

[-T1]-[-T5]:提高扫描速度

3.详细分析

1)、主机发现

nmap -sP 192.168.16.0/24

2)、简单的扫描(默认会扫tcp 前1000端口)

nmap 192.168.16.100

3)、端口扫描

指定端口:nmap 192.168.16.100 -p 80(单个端口)

nmap 192.168.16.100 -p 1-100(多个端口)

nmap 192.168.16.100 -p- (所有端口)

TCP全连接扫描:nmap -sT 192.168.16.100 -p 80

优点:准确 缺点:速度慢,会留下大量、密集的日志记录

SYN半连接扫描:nmap -sS 192.168.16.100 -p 80

优点:速度很快 缺点:就是不准并且需要root权限

隐藏扫描:FIN扫描 Null扫描 Xmas扫描

4)、目标主机版本(不是很准确)

nmap -O 192.168.16.100 -p 80

5)、服务版本

nmap -O -sV 192.168.16.100 -p 80

6)、全面扫描

nmap -A 192.168.16.100 -p-

7)、保存结果

nmap -A 192.168.16.100 -p- -oN nmap1