Nmap简介
Nmap是Linux下一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具,软件名字Nmap是Network Mapper的简称。
Nmap最初由Fyodor在1996年开始创建,随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行的安全必备工具之一。
Nmap使用原始IP报文来发现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统,它们使用什么类型的报文过滤器/防火墙,以及一些其他功能。
Nmap基本功能
默认方式扫描
命令格式 :
代码语言:c_cpp复制nmap <目标地址>
全面扫描
命令格式 :
代码语言:c_cpp复制nmap -A -T 4 -v <目标地址>
主机发现
目标:确定目标主机是否在线(Alive,处于开启状态原理:与ping命令类似,发送探测包到目标主机,如果收到回复,则说明目标主机是开启的
原理:与ping命令类似,发送探测包到目标主机,如果收到回复,则说明目标主机是开启的
实例1:局域网内执行ping扫描
目标:扫描局域网192.168.40.1-192.168.40.254内哪些IP的主机在线。
命令:
代码语言:c_cpp复制nmap -sP 192.168.40.1-254,或 nmap -sP 192.168.40.0/24
说明:在局域网内,无论采用哪一种选项Nmap都是通过ARP包来询问IP地址上的主机是否活动的,如果收到ARP回复包,那么说明主机在线。
实例2:跨网段执行ping扫描
目标:扫描跨网段目标主机192.168.50.5是否在线。
命令 :
代码语言:c_cpp复制nmap -sP 192.168.50.5
说明:扫描跨网段目标主机时,使用-sP或-sn选项,默认情况下Nmap会依次发送4种不同类型的数据包(ICMP echo request、TCP SYNpacket to port 443、TCP ACKpacket to port 80、ICMPtimestamprequest)来探测目标主机是否在线,只要收到其中一个包的回复,就证明目标机在线。
实例3: --packet-trace 的使用
端口扫描
目标 : 确定目标主机的TCP/UDP端口的开放情况
原理 : 发送TCP、UDP等类型的探测包到目标端口,根据收到的回复包判定端
口是否开放
实例4 : -p选项的应用--指定扫描的端口号
关于-p选项的说明:默认情况下,Nmap仅对用-p指定的TCP端口进行扫描,扫描方式为-sS(TCP SYN扫描)。如果既要扫描TCP端口,又要扫描UDP端口,则可以用“T:”“U:”参数指定目标端口,并指定-sU(UDP扫描方式)和至少一种TCP扫描方式,如:
代码语言:c_cpp复制nmap -p T:139,U:53 -sS -sU 192.168.40.178
TCP SYN扫描(-sS)原理
Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机发送TCPRST报文以重置此连接;如果目标机返回TCP RST ACK报文,则说明目标端口处于关闭状态
实例5:-sS选项的应用--TCP SYN扫描
TCP connect扫描(-sT)原理
Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机依次发送TCP ACK、TCP RST ACK完成三次握手和重置此连接;如果目标机返回TCP RST ACK报文则说明目标端口处于关闭状态。
实例6:-sT选项的应用--TCPconnect扫描
TCP ACK扫描(-sA)原理
Nmap向目标端口发送TCP ACK报文,无论目标端口是否处于开放状态,目标机都会返回TCP RST报文。如果Nmap主机能收到此TCPRST报文,则说明目标端口未被防火墙屏蔽。
TCP ACK扫描只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。
实例7: -sA 选项的应用 --TCP ACK扫描
隐蔽扫描(-sF/-sN/-sX)原理
Nmap向目标端口发送TCP FIN (-SF) / NULL (-SN) / FIN PSH URG (-sX) 报文,对于Linux系统的目标机,如果目标机未响应,则说明目标端口处于开放状态或被防火墙屏蔽;如果目标机返回TCP RST ACK报文,则说明目标端口处于关闭状态。
对于Windows系统的目标机,无论目标端口处于开放还是关闭状态,目标机都会返回TCP RST ACK报文。
因此,隐蔽扫描方式适合于Linux系统的目标机端口扫描。
实例8 : 隐蔽扫描选项(-sF/-SN/-sX)的应用
应用程序与版本信息侦测
识别目标主机开放的TCP/UDP端口上运行的服务及版本信息
nmap-services-probes(服务版本数据库文件)
默认路径:/usr/share/nmap/nmap-services-probes
实例9 : -sV选项的应用
实例10 : --version-trace选项的应用跟踪版本扫描活动
操作系统侦测
目标:识别目标主机操作系统的类型
侦测方法:网络协议栈指纹识别技术
nmap-os-db (操作系统数据库文件)
- 该数据库包含了超过2600种操作系统的指纹信息,Nmap把TCP和UDP报文发送到目标机器上,然后将检查结果和nmap-os-db数据库进行比对
- 默认路径:/usr/share/nmap/nmap-os-db
实例11 : -O 选项的应用
实例12 : -A选项的应用
规避FW/IDS技术
实例1 : -T选项的应用--控制扫描速度
使用 -T(0~5)可以启用时序选项,一般来说数字越大,速度越快,精度越低.
实例2 : -D选项的应用--源IP地址欺骗
实例3 : 空闲扫描(-sI)的应用
实例4 : --spoof-mac 选项的应用 -- 源MAC地址欺骗
所用命令:
代码语言:c_cpp复制nmap --spoof-mac 0 <目标IP>
其中参数0表示随机分配一个MAC地址,也可以手动指定MAC地址,如:
代码语言:c_cpp复制nmap --spoof-mac aa:bb:cc:dd:ee:ff <目标IP>
NSE脚本的简单应用
除了常规的网络扫描Nmap还可根据NSE(Nmap scripting Engine)的脚本进行大量渗透工作,这种脚本基于Lua语言编写。
脚本存放目录:/usr/share/nmap/scripts/
实例5:暴力破解脚本(--script brute)应用
提供暴力破解的方式,可对数据库、SMB、SNMP等进行简单密码的暴力猜解
实例6:漏洞扫描脚本(--script vuln)应用
扫描结果保存与输出
实例7:以普通模式(-ON)输出Nmap扫描结果