Nmap

一、Nmap介绍

1.简介

​ Nmap是Linux下一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具,软件名字Nmap是Network Mapper的简称。

​ Nmap使用原始IP报文来发现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统,它们使用什么类型的报文过滤器/防火墙,以及一些其他功能。

2.Nmap家族成员

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

二、Nmap功能

1.基本功能

  • 主机发现

    • 目标:确定目标主机是否在线(Alive,处于开启状态)
    • 原理:与ping命令类似,发送探测包到目标主机,如果收到回复,则说明目标主机是开启的
    • 相关命令:
    选项 功能
    -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 追踪每个包
  • 端口扫描

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

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

    • 端口的六个状态

      open:端口是开放的

      closed:端口是关闭的

      filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态

      unfiltered:端口没有被屏蔽,但是否开放需要进一步确定open|filtered:端口是开放的或被屏蔽

      closed|filtered:端口是关闭的或被屏蔽

    • 相关命令:

    选项 功能
    -p 指定扫描的目标端口
    --exclude-port 指定排除(不扫描)的目标端口
    -sT / -sS / -sA TCP connect /TCP SYN/TCP ACK 扫描
    -sN / -sF / -sX TCP NULL/TCP FIN/TCP Xmas 扫描
    -sU UPD扫描
    -sW / -sM TCP窗口/TCP Maimom扫描
    --scanflags 自定义TCP扫描
    -sO IP扫描
  • 应用程序与版本信息侦测

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

    • 流程:

    • 相关命令:

    选项 功能
    -sV 版本探测
    --allports 全端口版本探测
    --version-intensity 设置版本扫描强度
    --version-light 轻量级扫描(相当于--version-intensity 2)
    --version-all 重量级扫描(相当于--version-intensity 9)
    --version-trace 跟踪版本扫描活动
    -sR RPC扫描
  • 操作系统侦测

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

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

      (1)TTL

      (2)DF位

      (3)Windows Size

      (4)ACK序号

      (5)对FIN包的响应

      (6)ISN(初始化序列号)

      (7)主机使用的端口

    • 相关命令:

    选项 功能
    -O 执行操作系统侦测
    -A 执行攻击性探测
    --osscan-limit 对指定的目标进行操作系统侦测
    --osscan-guess / --fuzzy 推测系统识别

2.附加功能

  • 规避FW/IDS

    • 目标:绕过目标主机的防火墙、入侵检测系统等防护手段
    • 相关命令:
    选项 功能
    -T 时序选项
    -f 报文分段
    --data-length 指定发包长度
    --mtu 指定偏移量大小(必须是8的倍数)
    -D 使用诱饵进行源地址欺骗
    -sl 空闲扫描(源地址欺骗)
    --source-port 源端口欺骗
    --spoof-mac 源MAC地址欺骗
  • NSE脚本定制与使用

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

    • 相关命令:
    选项 功能
    -sC 等价于--script=default,使用默认类别的脚本进行扫描
    --script=<Lua scripts> <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述
    --script-args=<n1=v1,[n2=v2,...]> 为脚本提供默认参数
    --script-args-file-filename 使用文件来为脚本提供参数
    --script-trace 显示脚本执行过程中发送与接收的数据
    --script-updatedb 更新脚本数据库
    ---script-hlep=<Lua scripts> 显示脚本的帮助信息,其中<Lua scripts>部分可以逗号分隔的文件或脚本类别
  • 三种扫描结果保存与输出

    • normal:标准模式(选项-oN)
    • xml文档(选项-oX)
    • grep文件(选项-oG)

注:-oA选项可以将扫描结果已以上三种格式一次性全部保存。

三、实例

1.主机发现

1.1 局域网内执行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回复包,那么说明主机在线。

1.2 跨网段执行ping扫描

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

命令:nmap -sP 192.168.50.5

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

1.3--packet-trace的使用

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

2.端口扫描

2.1 -p选项的应用——指定扫描的端口

命令nmap -p 1-1024,1433,3306 192.168.40.1

关于-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

2.2 -sS选项的应用——TCP SYN扫描

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

命令nmap -p 80 -sS 192.168.10.10

2.3 -sT选项的应用——TCP connect扫描

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

命令nmap -p 80 -sT 192.168.10.10

2.4 -sA选项的应用——TCP ACK扫描

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

命令nmap -p 80 -sA 192.168.10.10

2.5 隐蔽扫描选项(-sF / -sN / -sX)的应用

原理:Nmap向目标端口发送TCP FIN(-SF) / NULL (-SN)/ FIN+PSH+URG (-sX) 报文,
对于Linux系统的目标机,如果目标机未响应,则说明目标端口处于开放状态或被防火墙屏蔽;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。

对于Windows系统的目标机,无论目标端口处于开放还是关闭状态,目标机都会返回TCP RST+ACK报文。

因此,隐蔽扫描方式适合于Linux系统的目标机端口扫描

命令nmap -p 80 -sN 192.168.10.10

3.应用程序与版本信息侦测

3.1 -sV选项的应用

命令nmap -sV 192.168.10.10

3.2 --version-trace选项的应用

命令nmap -sV --version-trace 192.168.10.10

4.操作系统侦测

4.1 -O选项的应用

命令nmap -O 192.168.10.10

4.2 -A选项的应用

命令nmap -A 192.168.10.10

5.规避FW/IDS技术

5.1 -T选项的应用——控制扫描速度

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

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

命令nmap -T 4 192.168.10.10

5.2 -D选项的应用——源IP地址欺骗

命令nmap -D RND:3 192.168.10.10

5.3 空闲扫描(-sI)的应用

命令nmap -Pn -sI 102.168.10.9 192.168.10.10

5.4 --spoof-mac选项的应用——源MAC地址欺骗

命令:nmap --spoof-mac 0 <目标IP>

其中参数0表示随机分配一个MAC地址也可以手动指定MAC地址

如:nmap--spoof-mac aa:bb:cc:dd:ee:ff <目标IP>

6.NSE脚本的简单应用

6.1 暴力破解脚本(--script brute)的应用

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

命令nmap --script brute 192.168.10.10

6.2 漏洞扫描脚本(--script vuln)的应用

检查是否存在常见漏洞

命令nmap --script vuln 192.168.10.10

7.扫描结果保存与输出

7.1 以普通模式(-oN)输出Nmap扫描结果

命令nmap -sS -oN output.txt 192.168.10.10

posted @ 2024-07-27 20:43  pppppx  阅读(175)  评论(0)    收藏  举报