渗透测试工具——Nmap

Nmap简介

  • Nmap是Linux下一款开源的网络发现和安全审计工具。
  • Nmap使用原始IP报文来发现网络上有那些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统,它们使用什么类型的报文过滤器/防火墙,以及一些其他功能。

Nmap家族成员

  • Zenmap:Nmap的图形界面版
  • Ncat:基于netcat,并扩展了一些功能,如ncat链、SSL支持、二进制
  • Ncrack:测试已部署的认证系统和密码强度,支持常用协议
  • Ndiff:用于网络基线测试,对比Nmap扫描结果之间的差异
  • Nping:允许将自己构造的数据包整合在扫描过程中,并对原视数据进行操控

Nmap命令语法格式

nmap【空格】【选项|多选项|协议】【空格】【扫描目标说明】

默认扫描

命令格式:namp<目标地址>

全面扫描

命令格式:nmap -A -T 4 -V <目标地址>

主机发现

目标:确定目标主机是否在线(Alive,处于开启状态)

原理:与ping命令类似,发送探测包到目标主机,如果收到回复,则说明目标主机是开启的

探测方式

Nmap支持十多种不同的主机探测方法

  • ICMP ECHO / TIMESTAMP / NETMASK 报文
  • TCP SYN / ACK 报文
  • SCTP INIT / COOKIE-ECHO 报文

主机发现相关命令选项

选项 功能
-sP或-sN Ping扫描(不进行端口扫描)

-P0或-Pn

不进行Ping扫描
-PS / -PA / -PU -PY TCP SYN / TCP ACK / UDP / SCTP INIT Ping扫描
-PE / -PP / -PM ICMP echo / ICMP timestamp / ICMP netmask Ping扫描
-R / -n DNS反向解析域名/禁止DNS反向解析
-6 扫描IPv6地址
--dns-servers <serv1,[serv2],...> 指定DNS服务器
--system-dns 指定使用系统的DNS服务器
--traceroute 追踪每个路由节点
--packet-trace 追踪每个包
-Pn 将所有主机都默认为在线,跳过主机发现

实例1:局域网内执行ping扫描

目标:扫描局域网内哪些IP的主机在线。

命令:nmap -sP 192.168.147.0/24

说明:在局域网内,无论采用哪一种选项,Nmap都是通过ARP包来询问IP地址上的主机是否活动的,如果收到ARP回复包,那么说明主机在线

 实例2:跨网段执行ping扫描

目标:扫描跨网段目标主机是否在线。

命令: nmap -sP 192.168.1.7

说明:扫描跨网段目标主机时,使用-sP或-sn选项,默认情况下Nmap会依次发送4种不同类型的数据包(ICMP echo request、TCP SYN packet to port 443、TCP ACK packet to port 80、ICMP timestamp request)来探测目标主机是否在线,只要收到其中-一个包的回复,就证明目标机在线。

 实例3:--packet-trace的使用

目标:追踪每个包

命令:nmap -sP --packet-trace 192.168.147.132

端口扫描

目标:确定目标主机的TCP/UDP端口开发情况

原理:发送TCP、UDP等类型的探测包到目标端口,根据收到的回复包判定端口是否开放

端口的六个状态

  • open:端口是开放的
  • closed:端口是关闭的
  • filtered:端口被防火墙IDS/IPS屏蔽,无法确认其状态
  • unfiltered:端口没有被屏蔽,但是否开放需要进一步确定
  • open|filtered:端口是开放的或被屏蔽
  • closed|filtered:端口是关闭的或被屏蔽

  端口扫描相关的命令选项

实例4:-p选项的应用——指定扫描的端口号

命令:nmap -p 22,23,80,445,3389 192.168.147.132 

默认情况下,Nmap仅对用-p指定的TCP端口进行扫描,扫描方式为-sS(TCP SYN扫描)。如果既要扫描TCP端口,又要扫描UDP端口,则可以用“T:” “U:”参数指定目标端口,并指定-sU(UDP扫描方式)和至少一种TCP扫描方式。

 命令:nmap -p T:139,U:53 -sS -sU 192.168.147.132  

 TCP SYN扫描(-sS)原理

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

 

实例5:-sS选项的应用——TCP扫描

命令:nmap -p 80 -sS 192.168.147.132

 TCP connect扫描(-sT)原理

Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标依次发送TCP ACK、TCP RST+ACK完成三次握手和重置此链接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。

 

实例6:-sT选项的应用——TCP connect扫描

命令:nmap -p 445 -sS 192.168.147.132

  TCP ACK扫描(-sA)原理

  • Nmap向目标端口发送TCP ACK报文,无论目标端口是否处于开放状态,目标机都会返回TCP RST报文。如果Nmap主机能够收到此TCP RST报文,则说明目标端口未被防火墙屏蔽。
  • TCP ACK扫描只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况

 

实例7:-sA选项的应用——TCP ACK扫描

命令:nmap -p 80 -sA 192.168.147.132

 隐蔽扫描(-sF / -sN / -sX)原理

  • Nmap向目标端口发送TCP FIN(-sF)/ NULL(-sN)/ FIN+RSH+URG(-sX)报文,对于Linux系统的目标机,如果目标机未响应,则说明目标端口处于开放状态或被防火墙屏蔽;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。
  • 对于Windows系统的目标机,无论目标端口处于开放还是关闭状态,目标机都会返回TCP RST+ACK报文。
  • 因此,隐蔽扫描方式适合于Linux系统的目标机端口扫描。 

 实例8:隐蔽扫描(-sF / -sN / -sX)的应用

  应用程序与版本信息侦测

目标:识别目标主机开放的TCP/UDP端口上运行的服务及版本信息

流程:

  • 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
  • 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q|对应的totalwaitms) .通常在等待时间内,会接收到目标机发送的"WelcomeBanner" 信息。Nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比,查找对应应用程序的名字与版本信息。
  • 如果通过"Welcome Banner" 无法确定应用程序版本,那么Nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe), 将probe得到的回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
  • 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配,根据结果对比分析出UDP应用服务类型。
  • 如果探测到应用程序是SSL,那么调用openSSL进- -步 的侦查运行在SSL之上的具体的应用类型。
  • 如果探测到应用程序是SunRPC,那么调用brute- force RPC grinder进一步 探测具体服务。

 nmap-services-probes(服务器版本数据库文件)

默认路径:/usr/share/nmap/namp-services-probes

 应用程序与版本信息侦测相关的命令选项

 实例9:-sV选项(版本探测)的应用

 实例10:--version-trace选项的应用——跟踪版本扫描活动

 操作系统检测

目标:识别目标主机操作系统的类型

侦测方法:网络协议栈指纹识别技术

  操作系统侦测相关的命令选项

实例11:-O选项的应用

目标:执行操作系统的侦测

 实例12:-A选项的应用

目标:执行攻击性探测

规避FW/IDS

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

常用选项

实例1:-T选项的应用——控制扫描速度

使用-T (0~5)可以启用时序选项,一般来说使用-T (0~5)可以启用时序选项,一般来说
数字越大,速度越快,精度越低

  • -T0 (偏执的) :非常慢的扫描,用于IDS逃避
  • -T1 (鬼祟的) :缓慢的扫描,用于IDS逃避
  • -T2 (文雅的) :降低速度以降低对带宽的消耗,此选项一般不常用.
  • -T3 (普通的) :默认,根据目标的反应自动调整时间
  • -T4 (野蛮的) :快速扫描,常用扫描方式, .需要在很好的网络环境下使用
  • -T5 (疯狂的) :极速扫描,以牺牲准确度来提升扫描速度

实例2:-D选项的应用——源IP地址欺骗

 

 实例3:空闲扫描(-sI)的应用

 实例4:--spoof-mac选项的应用——源MAC地址欺骗

命令:nmap --spoof-mac 0 <目标IP>,其中参数0表示随机分配一个MAC地址

也可以手动指定MAC地址,如:nmap --spoof-mac aa:bb:cc:dd:ee:ff <目标IP>

 

 NSE脚本的简单应用

NSE和lua

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

NSE脚本运用

常用选项

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

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

 实例6:漏洞扫描脚本(--script vuln)应用

检查是否存在常见漏洞

扫描结果保存与输出

三种格式的输出

  • normal:标准模式(选项-oN)
  • xml文档:(选项-oX)
  • grep文件:(选项-oG)
  • -oA可将扫描结果以标准格式、XML、Grep格式一次性全部保存

 实例7:以普通模式(-oN)输出Nmap扫描结果

Guess you like

Origin blog.csdn.net/weixin_59872639/article/details/122479070