Nmap详解
扫描方式
-Pn/-P0
:扫描前不用ping测试目标是否可达,默认所有目标端口都可达
-sT
:TCP Connect扫描,进行完整的TCP三次握手,该类型扫描已被检测,且会在目标日志中记录大量连接请求和错误信息
-sS
:TCP SYN扫描,只会发送SYN包,简称半开扫描。使用者机器发送SYN请求给目标机器,若对方返回SYN|ACK包表明目标端口当前正在监听;若返回RST包表明目标端口未进行监听;后续若使用者机器收到SYN|ACK返回包,使用者机器就会发送RST包断开与目标机器的连接,与-sT
比较,-sS
只会在目标机器留下很少的日志记录
-sA
:ACK扫描,使用者机器发送ACK包给目标机器,若目标机器返回的RST包小于等于64,则表示目标端口开放;反之,表示端口关闭
-sN
:NULL扫描,原理是使用者机器发送一个没有设置任何标志位的数据包给目标端口,根据FRC 793要求,正常通信至少要设置一个标志位。若目标机器返回RST包,表明目标端口关闭;若目标机器无任何响应,表明目标端口开放(Windows不遵从RFC 793,因此可探测操作系统版本)
-sF
:FIN扫描,使用者机器发送FIN包给目标机器,若目标机器返回RST包,则标识目标端口关闭;若目标机器无任何响应,表示目标端口开放(仅适用于Linux,Windows只会返回RST包,因此可探测操作系统版本)
-sX
:Xmas-Tree扫描,使用者机器发送带有URG、PSH、FIN标志位的TCP包给目标机器,若目标机器无任何响应,则表明目标端口开放;若目标机器返回RST包,则表明目标端口关闭(不适用于windows)
-sU
:UDP扫描,使用者机器向目标端口发送一个0字节的UDP包,若收到端口不可达的ICMP包,则表示端口关闭;否则表示端口开放(不适用于windows)
指定主机
-
单个主机
直接指定某个IP,如:
nmap 192.168.1.2
-
多个主机
-iL inputFileName
:从文件中读取nmap 192.168.1.0/24
:指定IP网段扫描nmap 192.168.1.1 192.168.1.2
:扫描多个IP -
排除主机
--exclude=host1,host2
:排除指定的主机--excludefile=excludeFileName
:排除文件中读取的主机
指定端口
-p port1,port2,port3
:指定单独几个端口-p port1-port2
:指定范围内的端口- 不加
-p
,默认指定常见的1000个端口
探测服务版本
-sV
:探测协议
探测操作系统
-O
:探测操作系统
扫描速度
-T number
:number为0到5中的整数,该值越大扫描速度越快
穿墙
-S 源IP
:伪造源IP-e <eth0>
:指定特定网卡接口-g port
:使用给定的源端口进行扫描
输出格式
-oN
:正常输出-oX
:XML格式输出-v
:输出详情,v越多输出内容越详细,如:-vv -vvv-d
:debug级别,d越多输出越多--open
:只看已开放端口
端口状态
open
端口处于开放状态,通常是攻击的关注点
closed
端口处于关闭状态,无应用程序在该端口上监听
filtered
端口处于被过滤状态,由于数据包被安全设备过滤或阻止,Nmap无法判断端口是否处于开放状态
unfiltered
端口处于未过滤状态,Nmap可访问该端口,但无法判断其是否开放,通常ACK扫描会产生该种状态,可借助其他扫描,如SYN扫描、FIN扫描辅助判断端口是否开放
open|filtered
Nmap无法判断端口是处于开放状态还是过滤状态,开放的端口不响应就是一个例子,没有响应可能意味着报文过滤器丢弃了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的,UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类
closed|filtered
Nmap无法判断端口状态是关闭还是被过滤状态,一般出现在IPID Idle扫描
NSE使用
NSE(Nmap Scripting Engine)允许使用者编写自己的脚本完成各种网络扫描任务,其中Nmap内置了很多丰富的NSE脚本,以下讲述如何用NSE检测CVE漏洞,主要是通过nmap-vulners和vulscan这两个脚本检测某些服务(如:SSH、RDP、SMB)的CVE信息
nmap-vulners会查询Vulners exploits数据库,并按照严重程度显示服务对应的CVE信息
vulscan会显示与当前服务相关的其它漏洞
安装NSE脚本(nmap-vulners)
-
进入 Nmap脚本目录
cd /usr/share/nmap/scripts/
-
获取nmap-vulners存储库
git clone https://github.com/vulnersCom/nmap-vulners.git
安装NSE脚本(Vulscan)
-
进入 Nmap脚本目录
cd /usr/share/nmap/scripts/
-
获取Vulscan存储库
git clone https://github.com/scipag/vulscan.git
-
更新库
Vulscan支持多个优秀的漏洞数据库,但仍然可以对当前数据库进行持续更新(实际更新时貌似也没更新任何内容)
# 进入更新目录 cd vulscan/utilities/updater/ # 给updateFiles.sh执行的权限 chmod +x updateFiles.sh # 执行更新程序 ./updateFiles.sh
使用Nmap-Vulners扫描
-sV是必要的,nmap-vulners需要知道服务版本信息才能进行后续探测
nmap --script nmap-vulners -sV <IP>
使用Vulscan扫描
nmap --script vulscan -sV <IP>
默认情况下vulscan会查询vulscan支持的所有数据库,如此一来,要查询的信息会相当庞大,因此可直接指定数据库进行查询
db_name为数据库的名称,如:scipvuldb.csv cve.csv osvdb.csv securityfocus.csv securitytracker.csv xforce.csv expliotdb.csv openvas.csv
nmap --script vulscan --script-args vulscandb=db_name -sV <IP>
合并扫描
nmap --script nmap-vulners,vulscan --script-args vulscandb=scipvuldb.csv -sV <IP>