Nmap扫描技术入门到精通

一、基本操作

1.简单扫描

nmap 192.168.80.128

这条命令的扫描结果会扫描出当前IP的主机是否属出于活跃状态,以及开放端口,MAC地址等。
2.扫描整个子网

nmap -sn 192.168.80.1/24

3.扫描时排除特定目标

nmap -sn 192.168.80.1/24 --exclude 192.168.80.1

4.对连续范围内主机进行扫描

nmap -sn 192.168.80.1-192.168.80.255

5.扫描不连续主机

nmap -sn 192.168.80.1 192.168.80.2 192.168.80.3 192.168.80.4

6.对一个文本文件中的地址列表进行扫描

nmap -sn -iL /root/IP.txt

7.扫描详细过程

nmap -v 192.168.80.128

二、活跃主机发现技术

1.扫描存活状态

nmap -sn 192.168.80.128
Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-17 13:45 CST
Nmap scan report for 192.168.80.128
Host is up (0.00034s latency).
MAC Address: 00:0C:29:67:14:50 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 3.74 seconds

如果是这种host up状态那么就说明这台主机是活跃状态,对于基本扫描这个扫描速度就相对而言快很多了。
2.基于ARP协议的活跃主机扫描
nmap -sn -PR 192.168.80.128
3.基于ICMP协议的活跃主机扫描

nmap -sn -PE 192.168.80.128

其实这个跟你平时使用ping命令没什么太大区别,但是由于ping命令在过去被用滥用了,因此很多防火墙之类的软件都会隔绝ICMP数据包的通过。这样就造成了明明两台主机可以正常通信,但是ping却得不到响应的情况。使用nmap的-PE选项就可以实现ICMP协议的主机发现,这个过程实质上和ping是一样的。
4.基于TCP协议的活跃主机扫描

nmap -sn -PS 192.168.80.128

5.基于UDP协议 的活跃主机扫描

nmap -sn -PU 192.168.80.128

UDP协议相较于TCP协议是简单的,但是对于判断UDP协议端口是否开放的扫描确是相当困难的。当一个UDP端口接收到一个UDP数据包时,如果他是关闭的,那么就会给源端发回一个ICMP端口不可达的数据包;如果他是开放的,就会忽略这个数据包,也就是将这个数据包丢弃而不返回任何信息。这样扫描出来的结果可靠性比较低,因为当发出一个UDP数据包而没有收到任何的应答的时候,有可能这个端口是开放的,也有可能是因为这个数据包在传输过程中丢失了。
6.探测过程中详细数据包发送与接收情况

nmap --packet-trace 192.168.80.128

其实我们可以通过这个命令发现,在进行主机发现的时候,无论你指定了哪种方式,namp都会首先判断目标主机与自己是否在同一个子网中,如果在同一个子网中,那么namp将会直接使用ARP协议进行扫描,而不会使用你指定的方式进行。

三、端口扫描技术

众所周知,每个网络设备最多可达65536个端口,其中每个端口都会对应着相应的服务(不一定每时每刻所有端口都在跑着服务),其中nmap中对端口状态的定义如下:

open  目标端口开放
closed 目标端口关闭
filtered 向目标网络发送的数据包被路由器或者防火墙过滤了,无法确定开放状态
unfiltered  这种结果很少见,它表明目标端口是可以访问的,但是nmap却无法判断他到底是open还是closed。通常只在进行ACK扫描时才会出现这种情况。
open|filtered  无法确定是开放还是被过滤了,开放的端口不响应就是一个例子。
closed|filtered  无法确定端口是关闭还是被过滤了

1.SYN扫描
SYN扫描时目前最为流行的一种扫描方式,同时也是nmap的默认扫描方式,这种扫描方式速度极快,可以在一秒钟扫描上千个端口,SYN扫描也不容易被网络中的安全设备所发现。可以在扫描的时候输入-sS参数,其实只要你是以root或者administrator权限运行的,默认的扫描方式都是SYN的。首先nmap会向目标主机的一个端口发送请求连接的SYN数据包,而目标计算机在收到这个SYN数据包之后会以SYN/ACK进行应答nmap在收到SYN/ACK响应之后发送RST包请求断开连接而不是ACK应答。这样,三次握手就没有完成,无法建立正常的TCP连接,因此这次扫描就不会被记录到系统日志中。这种扫描方式一般不会在目标主机上留下痕迹。

nmap -sS 192.168.80.128

2.Connet扫描
这种扫描方式和SYN扫描方式很像,只不过是完整完成了三次握手。

nmap -sT 192.168.80.128

3.UDP扫描

nmap -sU 192.168.80.128

4.扫描指定端口

nmap -p 80 192.168.80.128

5.扫描多个端口

nmap -p 80,21,22,23,3306 192.168.80.128

6.扫描所有端口

nmap -p- 192.168.80.128

7.扫描常见的100个端口

nmap -F 192.168.80.128

8.扫描常见的端口

nmap --top-ports 10 192.168.80.128

这行命令就是扫描10个常见的端口

四、操作系统以及服务检测

1.操作系统指纹

nmap -O 192.168.80.128

2.推测操作系统检测结果
因为上面的操作系统版本检测只是检测出来了一部分指纹信息,很不方便直接阅读,所以使用--osscan-guess会给出可信度推测(此参数必须和-O参数一起使用)

nmap -O --osscan-guess 192.168.80.128

3.运行服务版本探测
这个命令将会检测目标系统上运行的服务以及具体版本信息

nmap -sV 192.168.80.128

4.全面详细的扫描

nmap -A 192.168.80.128

五、脚本扫描

1.漏洞扫描

nmap --script=vuln 192.168.80.128

这个是针对目标主机典型漏洞进行扫描,比如有可能扫描出MS08_067MS17_010这种典型漏洞,个人比较喜欢。
2.信息搜集扫描

nmap --script=http-methods 192.168.80.128

这个是用来查看目标HTTP服务支持的HTTP方法有哪些,一般常见的有以下几种:

GET     #请求指定的页面信息,并返回实体主体
HEAD    #类似于GET请求,只不过返回的响应没有具体的内容,用户获取报头
POST    #向指定资源提交数据进行处理请求(例如提交表单或者上传文件)
PUT     #从客户端向服务器传送的数据取代指定的文档的内容
DELETE  #请求服务器删除指定的页面
OPTIONS #允许客户端查看服务器性能
TRACE   #回显服务器收到的请求,主要用户测试或者诊断

当然nmap还有强大的加载字典暴力破解MySQL账号密码(mysql-brute),暴力破解SMTP邮件服务器账号密码(smtp-brute)等等一系列脚本,在这里我就不再一一讲解了,所有的nmap扫描脚本文件存放于 /usr/share/nmap/scripts 目录下,有兴趣的可以看看学习一下。

六、伪装欺骗技术

1.数据包分段

nmap -f 192.168.80.128

这个-f参数可以将发送的探测数据包进行分段,这样将原来的数据包分成几个部分,目标网络的防御机制,例如包过滤,防火墙等在对这些数据包进行检测的时候就会变得更加困难。但是必须谨慎使用这个选项,因为一些老旧的系统在处理分段包时经常出现死机的情况。
2.以太网网卡欺骗

nmap --spoof-mac 0 192.168.80.128

这样加上0表示随机选择一个虚假的MAC地址进行数据包发送,在发送的数据包中,MAC地址都会以这个随机出来的地址进行发送。

七、扫描结果输出

1.输出为txt格式

nmap -oN "/root/nmap.txt" 192.168.80.128

2.输出为xml格式

nmap -oX "/root/nmap.xml" 192.168.80.128

八、个人喜欢用的命令组合

nmap -A 192.168.80.128   #全面扫描
nmap --script=vuln 192.168.80.128  #漏洞检测扫描
nmap -O --osscan-guess 192.168.80.128 #检测系统版本信息

九、感谢

本文内容多数摘抄以及个人心得灵感来源于李华峰老师的《诸神之眼:Nmap网络安全审计技术揭秘》一书,京东购买地址:https://item.jd.com/12165817.html

发表评论

电子邮件地址不会被公开。必填项已用 * 标注