基本功能:主机发现,端口扫描,应用程序与版本信息侦测,操作系统侦测
附加功能:规避FW/IDS(防火墙),NSE脚本定制与使用
默认方式扫描
nmap <目标地址>
全面扫描
nmap -A -T 4 -v <目标地址>
目标:确认目标主机是否在线(Alive 处于开启状态)
原理:与ping命令类似,发送探测包到目标主机,如果收到回复,则说明目标主机是开启得到
探测方式:
ICMP ECHO(ping) /TIMESTAMP /NETMASK(子网掩码) 报文
TCP SYN /ACK 报文
SCTP INIT /COOKIE-ECHO报文
.....
主机发现相关命令选项
实例一:局域网内执行Ping扫描
目标:扫描局域网192.168.40.1-192.168.40.254内哪些IP的主机在线
命令:nmap -sP 192.168.40.1-254或nmap -sP 192.168.40.0/24
说明:在局域网内,无论采用哪一种选项,nmap都是通过ARP包来查询IP地址上的主机是否活动的,如果收到ARP回复包,说明主机在线
实例二:跨网段执行Ping扫描
目标:扫描跨网段目标主机192.168.50.5是否在线
命令:nmap -sP 192.168.50.5
说明:扫描跨网段目标主机时,使用-sp或-sn选项,默认情况下Nmap会依次发送4种不同类型的数据包(ICMP echo request,TCP SYN packet to port 443,TCP ACK packet to port 80,ICMP timestamp request)来探测目标主机是否在线,只要收到其中一个包的回复,就证明目标机在线
实例三:--packet-trace的使用
命令:nmap -sP --packet-trace [目标主机] 或者 nmap -sP [目标主机] --packet-trace
目标:确定目标主机的TCP/UDP端口的开放情况
原理:发送TCP,UDP等类型的探测包到目标端口,根据收到的回复包判定端口是否开放
端口的六个状态:
open:开放
closed:关闭
filtered:端口被防火墙,IDS/IPS屏蔽,无法确定其状态
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定
open|filtered:端口是开放的或被屏蔽
closed|filtered:端口是关闭的或被屏蔽
端口扫描相关的命令选项:
实例四:-p选项的应用--指定扫描的端口号
命令:nmap -p 指定端口号 [目的主机]
关于-p:nmap仅对用-P指定的TCP端口进行扫描,扫描方式为-sS(TCP SYN扫描)。如果既要扫描TCP端口,又要扫描UDP端口,则可以用”T:“ “U:”参数指定目标端口,并指定-sU(UDP扫描方式)和至少一种TCP扫描方式,如:
nmap -p T:139,U:53 -sS -sU 192.168.40.178
Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机发送TCP RST报文以重置此连接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态
实例五:-sS选项的应用--TCP SYN扫描
命令:nmap -p 80 -sS [目标主机] //只能管理员权限才能使用这条命令
nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时会紧接向目标机依次发送TCP ACK TCP RST+ACK完成三次握手和重置此连接,如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态 //RST是断开连接 任何权限的用户都能使用这条命令
命令:nmap -p 80 -sT [目标主机]
nmap向目标端口发送TCP ACK报文,无论目标端口是否处于开放状态,目标机都会返回TCP RST报文。如果Nmap主机能收到此TCP RST报文,则说明目标端口未被防火墙屏蔽
TCP ACK扫描只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断主机防火墙的状况
nmap向目标端口发送TCP FIN (-sF)/NULL(-sN)/FIN+PSH+URG(-sX)报文
对于Linux系统的目标机,如果目标机未响应,则说明目标端口处于开放状态或被防火墙屏蔽;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态
对于Windows系统的目标机,无论目标端口处于开放还是关闭状态,目标机都会返回TCP RST+ACK报文
因此,隐蔽扫描方式适合于Linux系统的目标主机端口扫描
命令:nmap -p 80 -sF/-sN/-sX [目标主机]
目标:识别目标主机开放的TCP/UDP端口上运行的服务及版本信息
应用程序与版本信息侦测相关的命令选项
命令:nmap -sV [目的主机]
实例:--version-trace选项的应用--跟踪版本扫描活动
命令:nmap -sV --version-trace [目的主机]
目标:识别目标主机操作系统的类型
侦测方式:网络协议指纹识别技术
操作系统数据库文件(nmap-os-db)
命令选项
nmap -O [目的主机]
TTL(根据不同的操作系统具有不同的TTL值来判断是什么类型的操作系统)
time to live,即数据报的存活时间,表示一个数据包在被丢弃之前可以通过多少跃点(跳),不同的操作系统的缺省TTL值往往是不一样的
Windows TTL=128
Unix TTL=60
Linux TTL=64
DF位
DF(不分段)位识别:不同OS(操作系统)对DF位有不同的处理方式,有些OS设置DF位,有些不设置DF位,还有一些OS在特定场合设置DF位,在其他场合不设置DF位
Windows Size (窗口大小)
Windows Size :TCP接收(发送)窗口大小,他决定了接收信息的机器在收到剁手数据包后发送ACK包
ACK序号
不同的操作系统处理ACK序号是不同的,如果发送一个FIN+PSH+URG的数据包到一个关闭的TCP端口,大多数操作系统会把回应ACK包的序号设置成发送的包的初始序号,而Windows和一些打印机则会发送序号为初始序号加1的ACK包
对FIN包的响应
发送一个只有FIN标志位的TCP数据包给一个打开的端口,Linux等系统不响应2;有些系统如Windows cisco hp/ux等,发回一个RST
ISN(初始化序列号)
主机使用的端口
目标:绕过目标主机的防火墙,入侵检测系统等防护手段
报文分段:将报文分成一段一段的去过防火墙,当一段一段的报文可能没什么害处,但是当这些防火墙拼接在一起的时候就产生了害处
实例:-T选项的应用---------控制扫描速度
命令:nmap -T (0~5) [目标主机]
使用=T(0~5)可以启用时序选项,一般来说,数字越大,速度越快,精度越低
-T0 (偏执的):非常慢的扫描,用于IDS逃避
-T1(鬼祟的):缓慢的扫描,用于IDS逃避
-T2(文雅的):降低速度以降低对带宽的消耗,此选项一般不常用
-T3(普通的):‘默认,根据目标的反应自动调整时间
-T4(0野蛮的):快速扫描,常用扫描方式,需要在很好的网络环境下使用
-T5(疯狂的):快速扫描,以牺牲准确度来提升扫描速度
实例:-D选项的应用-------源IP地址的欺骗
命令:nmap -D RND:2 [目的主机]
//RND为诱饵,后面的参数为指定诱饵的个数
实例:空闲扫描(-sI)的应用
命令:nmap -sI [僵尸ip地址,例如服务器的IP地址] [目标主机]
实例:源MAC地址欺骗
命令:nmap --spoof-mac 0[目标ip]
//参数0表示随机分配一个MAC地址,也可以手动指定MAC地址,如:nmap --spoof-mac aa:bb:cc:dd:ee:ff [目标主机]
NSE和Lua
除了常规的网络扫描,Nmap还可根据NSE(Nmap scripting Engine)的脚本进行大量渗透工作,这种脚本基于Lua语言编写
命令:nmap --scipt vuln [目标主机]
//vuln为一个脚本 扫描主机有什么漏洞
命令:nmap --script http-enum.use [网站名]
//扫描网站上的漏洞
实例:暴力破解脚本(--script brute)应用
提供暴力破解的方式,可对数据库,SMB,SNMP等进行简单密码的暴力猜解
命令:nmap --script brute [目标主机]