nmap使用指南

基本功能:主机发现,端口扫描,应用程序与版本信息侦测,操作系统侦测

附加功能:规避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

TCP SYN 扫描(-sS)原理

Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机发送TCP RST报文以重置此连接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态

实例五:-sS选项的应用--TCP SYN扫描

命令:nmap -p 80 -sS [目标主机] //只能管理员权限才能使用这条命令

TCP connet扫描(-sT)原理

nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时会紧接向目标机依次发送TCP ACK TCP RST+ACK完成三次握手和重置此连接,如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态 //RST是断开连接 任何权限的用户都能使用这条命令

命令:nmap -p 80 -sT [目标主机]

TCP ACK 扫描(-sA)原理(判断防火墙有没有开启)

nmap向目标端口发送TCP ACK报文,无论目标端口是否处于开放状态,目标机都会返回TCP RST报文。如果Nmap主机能收到此TCP RST报文,则说明目标端口未被防火墙屏蔽

TCP ACK扫描只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断主机防火墙的状况

隐蔽扫描(-sF/-sN/-sX)原理(只对Linux操作系统有用)

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(初始化序列号)

  • 主机使用的端口

规避FW/IDS技术

目标:绕过目标主机的防火墙,入侵检测系统等防护手段

报文分段:将报文分成一段一段的去过防火墙,当一段一段的报文可能没什么害处,但是当这些防火墙拼接在一起的时候就产生了害处

实例:-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脚本的简单应用

NSE和Lua

除了常规的网络扫描,Nmap还可根据NSE(Nmap scripting Engine)的脚本进行大量渗透工作,这种脚本基于Lua语言编写

命令:nmap --scipt vuln [目标主机]

//vuln为一个脚本 扫描主机有什么漏洞

命令:nmap --script http-enum.use [网站名]

//扫描网站上的漏洞

实例:暴力破解脚本(--script brute)应用

提供暴力破解的方式,可对数据库,SMB,SNMP等进行简单密码的暴力猜解

命令:nmap --script brute [目标主机]

你可能感兴趣的:(nmap)