Nmap工具
一、Nmap的定义
Nmap(Network Mapper)是一款开源的网络扫描和安全审计工具,广泛用于网络管理和安全评估。它能够发现网络上的设备、开放的端口、运行的服务及其版本信息,帮助用户识别潜在的安全风险。
二、Nmap的作用
- 网络发现:识别网络中活跃的设备和主机,了解网络拓扑结构。
- 端口扫描:检测目标主机上开放的端口,了解哪些服务在运行。
- 服务版本探测:识别运行在开放端口上的服务及其版本,帮助评估安全性。
- 操作系统探测:推测目标主机的操作系统类型,帮助进行针对性的安全评估。
- 安全审计:评估网络安全性,识别潜在的安全漏洞和风险。
- 网络性能监测:监测网络性能,识别网络瓶颈和故障。
三、Nmap的安装
- 在Linux上安装
- 使用包管理器安装
- Ubuntu/Debian:
sudo apt-get update sudo apt-get install nmap
- CentOS/RHEL:
sudo yum install nmap
- Ubuntu/Debian:
- 从源代码安装
- 下载源代码:
wget https://nmap.org/dist/nmap-<version>.tar.bz2
- 解压并编译:
tar -xjf nmap-<version>.tar.bz2 cd nmap-<version> ./configure make sudo make install
- 下载源代码:
- 使用包管理器安装
- 在Windows上安装
- 访问Nmap官网下载Windows安装包。
- 双击安装包,按照安装向导完成安装。
- 在macOS上安装
- 使用Homebrew:
brew install nmap
- 使用Homebrew:
四、Nmap的基本扫描
- 基本命令格式
- Nmap的基本命令格式为:
nmap [选项] [目标]
- Nmap的基本命令格式为:
- 常用扫描命令
- 扫描单个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地址。
- 扫描特定端口
- 扫描特定端口(如80和443):
nmap -p 80,443 192.168.1.1
- 该命令将仅扫描指定IP地址的80和443端口。
- 扫描特定端口(如80和443):
- 服务版本探测
- 识别服务版本:
nmap -sV 192.168.1.1
- 该命令将探测目标IP地址上运行的服务及其版本信息。
- 识别服务版本:
- 操作系统探测
- 识别目标操作系统:
nmap -O 192.168.1.1
- 该命令将尝试识别目标IP地址的操作系统类型。
- 识别目标操作系统:
- 输出结果到文件
- 将扫描结果保存为文本文件:
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进行扫描的步骤
- 确定扫描目标
- 确定需要扫描的IP地址或子网。例如,选择192.168.1.0/24作为目标。
- 选择扫描类型
- 根据需求选择合适的扫描选项:
- 如果只需快速了解网络设备,可以使用基本扫描命令。
- 如果需要详细信息,可以选择服务版本探测和操作系统探测。
- 根据需求选择合适的扫描选项:
- 执行扫描
- 在终端中输入相应的Nmap命令。例如:
nmap -sV -O 192.168.1.0/24
- 分析结果
- 查看Nmap输出,分析开放端口、运行服务及其版本信息。输出示例:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6 (protocol 2.0)
80/tcp open http Apache httpd 2.4.29
- 采取措施
排除扫描目标的命令
使用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.5
和192.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
可能只会对较大的数据包进行过滤,如果我们使用分片技术,将一个大的数据包拆分成多个小包发送,防火墙可能无法检测到这些小包的整体内容。
实验步骤:
- 启用分片扫描:使用
-f
参数启用分片扫描,发送多个小数据包以绕过防火墙。sudo nmap -f 192.168.1.10
- 观察结果:通过查看
iptables
的日志,防火墙是否能够检测到这些分片的数据包。如果防火墙没有识别到这些小包的完整内容,扫描可能会成功。
2. 诱饵扫描(Decoy Scan)
概念:通过将扫描请求的源IP伪装成多个不同的IP地址,混淆防火墙或IDS系统,使其无法确定哪个IP发起了扫描。
实验步骤:
- 启用诱饵扫描:使用
-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.5
和192.168.1.6
的扫描请求,并混淆源IP地址。 -
观察结果:在防火墙的日志中检查是否能够区分哪些数据包来自真实IP,哪些来自诱饵。
3. 源地址伪装(IP Spoofing)
概念:源地址伪装通过修改IP数据包的源地址字段,使目标主机认为请求来自其他主机,从而隐藏扫描者的真实IP。
实验步骤:
- 启用源地址伪装:使用
-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。 -
观察结果:检查
iptables
防火墙是否能够发现伪装的源IP。如果防火墙检查到伪装的IP,那么它将无法阻止扫描请求,因为它会认为请求来自其他合法的IP地址。
4. 组合多个技巧
可以将多个技巧组合起来,进一步提高绕过防火墙的成功率。
实验步骤:
- 组合分片、诱饵扫描和源地址伪装:
sudo nmap -f -D 192.168.1.5,192.168.1.6,ME -S 192.168.1.100 192.168.1.10
这条命令将同时使用分片、诱饵扫描和源地址伪装,增加防火墙和IDS的检测难度。
-
观察结果:检查
iptables
的日志和目标主机的响应,确认是否成功绕过防火墙和IDS。
三、实验结果对比
1. 防火墙开启时:
- 正常扫描:如果防火墙开启且没有使用绕过技巧,
iptables
会丢弃不允许的连接(如没有匹配的规则)。 - 绕过扫描:使用分片、诱饵扫描和源地址伪装时,
iptables
可能无法检测到扫描流量,扫描成功的可能性更高。
2. 防火墙关闭时:
- 正常扫描:直接进行正常的Nmap扫描,所有扫描会成功。
- 绕过扫描:使用绕过技巧,结果与正常扫描相同,但攻击者可以更难被追踪。
版权声明:
作者:Gweek
链接:https://bbs.geek.nyc.mn/archives/190
来源:Gweek postHub
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论