Nmap工具

一、Nmap的定义

Nmap(Network Mapper)是一款开源的网络扫描和安全审计工具,广泛用于网络管理和安全评估。它能够发现网络上的设备、开放的端口、运行的服务及其版本信息,帮助用户识别潜在的安全风险。

二、Nmap的作用

  1. 网络发现:识别网络中活跃的设备和主机,了解网络拓扑结构。
  2. 端口扫描:检测目标主机上开放的端口,了解哪些服务在运行。
  3. 服务版本探测:识别运行在开放端口上的服务及其版本,帮助评估安全性。
  4. 操作系统探测:推测目标主机的操作系统类型,帮助进行针对性的安全评估。
  5. 安全审计:评估网络安全性,识别潜在的安全漏洞和风险。
  6. 网络性能监测:监测网络性能,识别网络瓶颈和故障。

三、Nmap的安装

  1. 在Linux上安装
    • 使用包管理器安装
      • Ubuntu/Debian:
        sudo apt-get update
        sudo apt-get install nmap
        
      • CentOS/RHEL:
        sudo yum install nmap
        
    • 从源代码安装
      • 下载源代码:
        wget https://nmap.org/dist/nmap-<version>.tar.bz2
        
      • 解压并编译:
        tar -xjf nmap-<version>.tar.bz2
        cd nmap-<version>
        ./configure
        make
        sudo make install
        
  2. 在Windows上安装
    • 访问Nmap官网下载Windows安装包。
    • 双击安装包,按照安装向导完成安装。
  3. 在macOS上安装
    • 使用Homebrew:
      brew install nmap
      

四、Nmap的基本扫描

image.png

  1. 基本命令格式
    • Nmap的基本命令格式为:
      nmap [选项] [目标]
      
  2. 常用扫描命令
    • 扫描单个IP地址
nmap 192.168.1.1
  • 该命令将扫描指定IP地址的开放端口。
    • 扫描整个子网
nmap 192.168.1.0/24
  • 该命令将扫描192.168.1.0到192.168.1.255范围内的所有IP地址。
    • 扫描多个IP地址
nmap 192.168.1.1,192.168.1.2
  • 该命令将同时扫描多个指定的IP地址。
  1. 扫描特定端口
    • 扫描特定端口(如80和443)
      nmap -p 80,443 192.168.1.1
      
      • 该命令将仅扫描指定IP地址的80和443端口。
  2. 服务版本探测
    • 识别服务版本
      nmap -sV 192.168.1.1
      
      • 该命令将探测目标IP地址上运行的服务及其版本信息。
  3. 操作系统探测
    • 识别目标操作系统
      nmap -O 192.168.1.1
      
      • 该命令将尝试识别目标IP地址的操作系统类型。
  4. 输出结果到文件
    • 将扫描结果保存为文本文件
      nmap -oN output.txt 192.168.1.1
      
      • 该命令将扫描结果保存到名为output.txt的文件中。
参数 描述 示例命令
-sS TCP SYN 扫描(半开放扫描) nmap -sS 192.168.1.1
-sT TCP 连接扫描(全开放扫描) nmap -sT 192.168.1.1
-sU UDP 扫描 nmap -sU 192.168.1.1
-sP Ping 扫描(主机发现) nmap -sP 192.168.1.0/24
-sA TCP ACK 扫描 nmap -sA 192.168.1.1
-sW TCP Window 扫描 nmap -sW 192.168.1.1
-sM TCP Maimon 扫描 nmap -sM 192.168.1.1
-O 操作系统检测 nmap -O 192.168.1.1
-sV 服务版本检测 nmap -sV 192.168.1.1
-p 指定端口(如 -p 22-p 1-1000 nmap -p 22,80 192.168.1.1
-Pn 不进行主机发现,直接扫描指定的主机 nmap -Pn 192.168.1.1
-T 设置扫描速度(0-5,0为最慢,5为最快) nmap -T4 192.168.1.1
-v 增加详细输出 nmap -v 192.168.1.1
-oN 将输出保存为普通文本文件 nmap -oN output.txt 192.168.1.1
-oG 将输出保存为 grepable 格式 nmap -oG output.gnmap 192.168.1.1
-oX 将输出保存为 XML 格式 nmap -oX output.xml 192.168.1.1
--script 使用 Nmap 脚本引擎(NSE)执行脚本 nmap --script=http-enum 192.168.1.1
-iL 从文件中读取目标主机列表 nmap -iL targets.txt
-R 反向 DNS 查找 nmap -R 192.168.1.1
--traceroute 路由追踪 nmap --traceroute 192.168.1.1

五、利用Nmap进行扫描的步骤

  1. 确定扫描目标
    • 确定需要扫描的IP地址或子网。例如,选择192.168.1.0/24作为目标。
  2. 选择扫描类型
    • 根据需求选择合适的扫描选项:
      • 如果只需快速了解网络设备,可以使用基本扫描命令。
      • 如果需要详细信息,可以选择服务版本探测和操作系统探测。
  3. 执行扫描
    • 在终端中输入相应的Nmap命令。例如:
    nmap -sV -O 192.168.1.0/24
    
  4. 分析结果
    • 查看Nmap输出,分析开放端口、运行服务及其版本信息。输出示例:
PORT STATE SERVICE VERSION 
22/tcp open ssh OpenSSH 7.6 (protocol 2.0) 
80/tcp open http Apache httpd 2.4.29
  1. 采取措施

排除扫描目标的命令

使用Nmap的有关参数可在扫描工作开始前指定一个、多个目标或随机产生的若干IP地址或主机名,同时使用--exclude可以排除一些你不想扫描的目标。
示例:nmap 192.168.1.0/24 --exclude 192.168.1.10 排除 192.168.1.10 主机。

高级用法

Nmap 提供了多种高级扫描技巧,用于绕过防火墙和入侵检测系统(IDS),使得扫描过程更加隐蔽。

1. 分片(Fragmentation)

  • 概念:防火墙和IDS通常检查数据包的完整性,分片技术通过将一个大的数据包拆分成多个小数据包发送,使得防火墙和IDS可能无法识别完整的数据包,从而绕过检测。
  • 原理:Nmap会将TCP数据包分割成多个更小的包,发送时每个小包都带有自己的IP头,这样检测系统可能无法看到整个扫描数据包的内容,从而无法对其进行完整的检查。
  • 命令示例
    • 使用 -f 参数启用数据包分片:
      nmap -f 192.168.1.1
      

      该命令将扫描目标主机 `192.168.1.1` 并启用分片。通过此技术,Nmap会将发送的数据包拆分成更小的包,以绕过防火墙或IDS的检测。

  • 应用场景:适用于防火墙或IDS对大数据包进行检查时,可以通过分片规避检测,尤其是当目标网络中的防火墙或IDS不对小包进行深度检查时。

2. 诱饵扫描(Decoy Scan)

  • 概念:诱饵扫描通过向目标发送来自多个IP地址的数据包,使得目标系统误认为是多个不同主机在进行扫描。通过混淆扫描源IP,减少被检测到的概率。
  • 原理:Nmap允许用户在扫描时同时使用多个IP地址作为诱饵。目标主机会收到来自这些诱饵地址的数据包,混淆了真正的攻击者的IP,防止IDS或防火墙检测到扫描的来源。
  • 命令示例

    • 使用 -D 参数来指定诱饵主机:
      nmap -D 192.168.1.5,192.168.1.6,ME 192.168.1.1
      

      该命令表示Nmap在扫描目标 `192.168.1.1` 时,除了使用源IP外,还使用 `192.168.1.5` 和 `192.168.1.6` 作为诱饵(`ME` 表示使用自己的真实IP作为诱饵)。

  • 应用场景:适用于防止目标系统通过IDS或防火墙发现扫描源IP。通过诱饵扫描,可以有效混淆扫描源,避免被定位为攻击者。

3. 源地址伪装(IP Spoofing)

  • 概念:源地址伪装通过将数据包的源IP地址伪装成其他主机的IP地址,使得目标主机认为是其他主机在进行连接,从而隐藏扫描者的真实身份。
  • 原理:源地址伪装通过修改IP头部的源地址字段来伪装扫描源。通常情况下,目标主机会将响应发送到伪装的源地址,但是该伪装IP并不实际接收数据包,因此该技术通常与其他技巧(如回显扫描或代理服务器)结合使用。
  • 命令示例

    • 使用 -S 参数进行源地址伪装:
      nmap -S 192.168.1.100 192.168.1.1
      

      该命令使得Nmap将源IP伪装为 `192.168.1.100`,扫描目标 `192.168.1.1`。目标主机会认为 `192.168.1.100` 是扫描源,而不会检测到实际的扫描者IP。

  • 应用场景:适用于隐藏扫描者的IP地址,避免暴露真实身份,尤其是在进行渗透测试或攻击性扫描时需要避免被目标追踪。

4. 结合使用

  • 例子:如果你想同时使用多个技巧,如分片、诱饵扫描和源地址伪装,你可以将它们结合使用以最大化隐蔽性。

    ```shell
    nmap -f -D 192.168.1.5,192.168.1.6,ME -S 192.168.1.100 192.168.1.1
    ```
    该命令会:

    • 使用分片技术将数据包拆分,
    • 使用 192.168.1.5192.168.1.6 作为诱饵,混淆扫描源,
    • 将源IP伪装为 192.168.1.100 来隐藏真实的扫描者IP。

特殊用法

一、配置iptables防火墙

在Linux系统中,iptables 是一个强大的防火墙工具,它可以控制网络流量的进出。我们将配置一个基本的 iptables 防火墙,限制特定的入站和出站流量,然后用 Nmap 来测试如何绕过防火墙。

1. 配置iptables防火墙

首先,我们需要配置一个基本的防火墙规则,来阻止来自外部的未授权连接。假设目标主机的IP是 192.168.1.10

步骤 1:查看当前的iptables规则

在终端输入以下命令查看现有的防火墙规则:

sudo iptables -L
步骤 2:清除现有的规则

清除所有现有规则,以便开始新的配置:

sudo iptables -F
步骤 3:设置默认策略

将默认策略设置为拒绝所有流量。INPUT链用于控制进入本机的流量,OUTPUT链用于控制离开本机的流量。

sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
步骤 4:允许本地流量

允许本地流量(localhost)流动,以避免对本机的自我连接进行限制:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
步骤 5:允许ICMP流量(ping)

允许通过ICMP协议的ping请求,这样可以测试主机是否存活:

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
步骤 6:允许SSH连接

如果你需要通过SSH连接到目标主机,允许SSH流量:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
步骤 7:查看当前的iptables规则

再次检查防火墙规则,确保配置已生效:

sudo iptables -L

此时,iptables 防火墙将仅允许来自本地主机的流量以及ping请求和SSH连接。


二、Nmap绕过iptables的技巧

我们将利用 Nmap 的高级扫描技术绕过 iptables 防火墙。主要使用的技巧包括 分片诱饵扫描源地址伪装

1. 分片(Fragmentation)

概念iptables 可能只会对较大的数据包进行过滤,如果我们使用分片技术,将一个大的数据包拆分成多个小包发送,防火墙可能无法检测到这些小包的整体内容。

实验步骤:
  1. 启用分片扫描:使用 -f 参数启用分片扫描,发送多个小数据包以绕过防火墙。
    sudo nmap -f 192.168.1.10
    
  2. 观察结果:通过查看 iptables 的日志,防火墙是否能够检测到这些分片的数据包。如果防火墙没有识别到这些小包的完整内容,扫描可能会成功。

2. 诱饵扫描(Decoy Scan)

概念:通过将扫描请求的源IP伪装成多个不同的IP地址,混淆防火墙或IDS系统,使其无法确定哪个IP发起了扫描。

实验步骤:
  1. 启用诱饵扫描:使用 -D 参数,在扫描时添加诱饵IP地址。ME表示使用自己的真实IP。
    sudo nmap -D 192.168.1.5,192.168.1.6,ME 192.168.1.10
    

    这条命令会向目标主机 192.168.1.10 发送来自 192.168.1.5192.168.1.6 的扫描请求,并混淆源IP地址。

  2. 观察结果:在防火墙的日志中检查是否能够区分哪些数据包来自真实IP,哪些来自诱饵。

3. 源地址伪装(IP Spoofing)

概念:源地址伪装通过修改IP数据包的源地址字段,使目标主机认为请求来自其他主机,从而隐藏扫描者的真实IP。

实验步骤:
  1. 启用源地址伪装:使用 -S 参数指定一个伪装的源IP地址,扫描目标主机。
    sudo nmap -S 192.168.1.100 192.168.1.10
    

    该命令将源IP伪装为 192.168.1.100,目标主机 192.168.1.10 会将响应发送到 192.168.1.100,而不是扫描者的真实IP。

  2. 观察结果:检查 iptables 防火墙是否能够发现伪装的源IP。如果防火墙检查到伪装的IP,那么它将无法阻止扫描请求,因为它会认为请求来自其他合法的IP地址。

4. 组合多个技巧

可以将多个技巧组合起来,进一步提高绕过防火墙的成功率。

实验步骤:
  1. 组合分片、诱饵扫描和源地址伪装
    sudo nmap -f -D 192.168.1.5,192.168.1.6,ME -S 192.168.1.100 192.168.1.10
    

    这条命令将同时使用分片、诱饵扫描和源地址伪装,增加防火墙和IDS的检测难度。

  2. 观察结果:检查 iptables 的日志和目标主机的响应,确认是否成功绕过防火墙和IDS。


三、实验结果对比

1. 防火墙开启时

  • 正常扫描:如果防火墙开启且没有使用绕过技巧,iptables 会丢弃不允许的连接(如没有匹配的规则)。
  • 绕过扫描:使用分片、诱饵扫描和源地址伪装时,iptables 可能无法检测到扫描流量,扫描成功的可能性更高。

2. 防火墙关闭时

  • 正常扫描:直接进行正常的Nmap扫描,所有扫描会成功。
  • 绕过扫描:使用绕过技巧,结果与正常扫描相同,但攻击者可以更难被追踪。

版权声明:
作者:Gweek
链接:https://bbs.geek.nyc.mn/archives/190
来源:Gweek postHub
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>