【渗透】信息收集之端口扫描Nmap

【渗透】信息收集之端口扫描Nmap
FatPig一、简介
Nmap(Network Mapper)是一款开源网络扫描工具,用于网络发现、安全审计及漏洞探测。支持主机发现、端口扫描、服务识别、操作系统检测等功能,广泛应用于渗透测试和网络管理。
核心功能
- 主机发现:探测网络中的活跃设备(
-sn
)。 - 端口扫描:识别开放端口及服务(
-p
)。 - 服务/版本检测:确定服务类型及版本号(
-sV
)。 - 操作系统识别:检测目标系统类型(
-O
,需Root权限)。 - 脚本扫描:通过NSE脚本扩展功能(
--script
)。 - 输出格式:支持文本、XML、JSON等格式(
-oN
、-oX
)。
二、扫描方式
2.5.1 TCP SYN 扫描
命令:nmap -sS ip
TCP SYN 扫描是一种用于探测目标主机上开放端口的网络扫描技术。它属于 Nmap 工具中的一种扫描方式,通常用于获取目标系统的端口状态信息。TCP SYN 扫描的原理是发送 TCP SYN 包,根据目标主机的响应来判断端口的状态。
下面是 TCP SYN 扫描的工作原理:
- 发送 TCP SYN 包:扫描发起者(通常是 Nmap 工具)向目标主机的指定端口发送 TCP SYN 包(同步包)。
- 等待响应:如果目标端口是开放的,目标主机将返回一个 TCP SYN/ACK 包(同步 / 应答包)表示端口是开放的。如果目标端口是关闭的,目标主机将返回一个 TCP RST 包(复位包)表示端口是关闭的。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。如果收到了 SYN/ACK 包,说明端口是开放的。如果收到了 RST 包,说明端口是关闭的。
- 不完全建立连接:在完成第 2 步的过程中,扫描发起者不会完成 TCP 连接的建立,而是在收到响应后发送一个 RST 包,关闭连接。这样,扫描对目标系统的影响较小,因为它不会建立完整的连接。
2.5.2 TCP connect () 扫描
此扫描为默认扫描,不用加参数。
TCP Connect 扫描是 Nmap 中的另一种常见的扫描技术。与 TCP SYN 扫描类似,TCP Connect 扫描也用于探测目标主机上的开放端口。它的工作原理是通过尝试建立完整的 TCP 连接来判断目标主机上的端口状态。
下面是 TCP Connect 扫描的工作原理:
- 尝试建立完整的 TCP 连接:扫描发起者向目标主机的指定端口尝试建立完整的 TCP 连接。
- 等待响应:如果目标端口是开放的,目标主机将接受连接并返回一个 TCP ACK 包(应答包)表示端口是开放的。如果目标端口是关闭的,连接尝试将失败,扫描发起者将收到一个连接拒绝错误。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。如果连接成功建立,说明端口是开放的。如果连接被拒绝,说明端口是关闭的。
- 完成连接:与 TCP SYN 扫描不同,TCP Connect 扫描会尝试建立完整的连接。因此,如果连接成功建立,扫描发起者可能会继续与目标主机交换一些数据。
2.5.3 UDP 扫描
命令:nmap -sU ip
UDP(User Datagram Protocol)扫描是一种用于探测目标主机上开放的 UDP(非连接性协议)端口的扫描技术。与 TCP 扫描不同,UDP 扫描涉及到发送 UDP 数据包并分析目标主机的响应。由于 UDP 是面向无连接的协议,UDP 扫描相对复杂,因为没有类似于 TCP SYN/ACK 的确认机制。
以下是 UDP 扫描的工作原理:
- 发送 UDP 数据包:扫描发起者向目标主机的指定 UDP 端口发送 UDP 数据包。
- 等待响应:如果目标端口是开放的,目标主机将不发送响应,或者发送一个 UDP 应答包。如果目标端口是关闭的,目标主机通常会发送一个 ICMP 不可达消息。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。缺乏确认机制使得 UDP 扫描相对不稳定,因为目标主机可能选择不响应请求,或者响应包被防火墙过滤。
需要注意的是,UDP 扫描可能会面临一些挑战,包括:
- 不稳定性:由于 UDP 的面向无连接性质,扫描可能会受到目标主机或防火墙的限制,导致结果不稳定。
- 响应解释:分析 UDP 响应相对复杂,因为目标主机可以选择不响应,或者发送一些与端口状态无关的信息。
- 速度较慢:由于 UDP 扫描涉及等待响应,可能需要较长时间来完成扫描。
2.5.4 TCP Null 扫描
命令:nmap -sN ip
TCP Null 扫描是 Nmap 工具中的一种扫描技术,用于探测目标主机上的开放端口。与 TCP SYN 扫描和 TCP Connect 扫描不同,TCP Null 扫描尝试利用 TCP 协议的一个特性,即发送一个不包含任何标志位的 TCP 报文,来判断端口的状态。
以下是 TCP Null 扫描的工作原理:
- 发送 TCP Null 包:扫描发起者向目标主机的指定端口发送一个不包含任何标志位的 TCP 报文,即所有标志位均被设置为零。
- 等待响应:如果目标端口是开放的,目标主机通常会忽略 TCP Null 报文,不发送任何响应。如果目标端口是关闭的,目标主机可能会发送一个 TCP RST(复位)包,表示端口是关闭的。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。缺乏任何标志位的 TCP Null 报文通常在正常操作中是不合法的,因此,如果收到响应,则可能表示端口是关闭的。
2.5.5 TCP FIN 扫描
命令:nmap -sF ip
TCP FIN(Finish)扫描是 Nmap 工具中的一种扫描技术,用于探测目标主机上的开放端口。与 TCP SYN 扫描和 TCP Null 扫描类似,TCP FIN 扫描尝试利用 TCP 协议的一个特性,即发送一个不包含 SYN 标志位和其他标志位为零的 TCP 报文,来判断端口的状态。
以下是 TCP FIN 扫描的工作原理:
- 发送 TCP FIN 包:扫描发起者向目标主机的指定端口发送一个不包含 SYN 标志位的 TCP 报文,即 FIN 标志位被设置为 1,而其他标志位均被设置为零。
- 等待响应:如果目标端口是开放的,目标主机通常会忽略 TCP FIN 报文,不发送任何响应。如果目标端口是关闭的,目标主机可能会发送一个 TCP RST(复位)包,表示端口是关闭的。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。缺乏 SYN 标志位的 TCP FIN 报文通常在正常操作中是不合法的,因此,如果收到响应,则可能表示端口是关闭的。
2.5.6 TCP Xmas 扫描
命令:nmap -sX ip
TCP Xmas(也称为 Christmas Tree)扫描是 Nmap 工具中的一种扫描技术,用于探测目标主机上的开放端口。TCP Xmas 扫描尝试利用 TCP 协议的一个特性,即发送一个所有标志位均被设置为 1 的 TCP 报文,来判断端口的状态。
以下是 TCP Xmas 扫描的工作原理:
- 发送 TCP Xmas 包:扫描发起者向目标主机的指定端口发送一个所有标志位均被设置为 1 的 TCP 报文,即 FIN、PSH、URG 标志位均被设置为 1。
- 等待响应:如果目标端口是开放的,目标主机通常会忽略 TCP Xmas 报文,不发送任何响应。如果目标端口是关闭的,目标主机可能会发送一个 TCP RST(复位)包,表示端口是关闭的。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。缺乏标准标志位的 TCP Xmas 报文通常在正常操作中是不合法的,因此,如果收到响应,则可能表示端口是关闭的。
2.5.7 TCP ACK 扫描
命令:nmap -sA ip
TCP ACK(Acknowledgment)扫描是 Nmap 工具中的一种扫描技术,用于确定目标主机上的端口状态。与其他 TCP 扫描技术不同,TCP ACK 扫描不关心端口是否开放,而是专注于获取目标主机对特定端口的响应。
以下是 TCP ACK 扫描的工作原理:
- 发送 TCP ACK 包:扫描发起者向目标主机的指定端口发送一个只设置 ACK 标志位的 TCP 报文。
- 等待响应:无论目标端口是开放还是关闭,目标主机通常会返回一个 TCP RST(复位)包,表示对未建立连接的 ACK 请求的拒绝。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。如果收到 TCP RST 包,说明端口是关闭的;如果没有收到响应,说明端口可能是开放的或由防火墙过滤。
2.5.8 TCP 窗口扫描
命令:nmap -sW ip
TCP 窗口扫描是一种用于探测目标主机上开放端口的扫描技术。这种扫描技术主要关注 TCP 协议中的窗口字段(Window Size)。
TCP 窗口扫描的工作原理如下:
- 发送 TCP 包:扫描发起者向目标主机的指定端口发送一个 TCP 包,其中 SYN 标志位被设置,但不设置 ACK 标志位。
- 等待响应:如果目标端口是开放的,目标主机会响应一个包,其中 SYN 和 ACK 标志位都被设置,并且 TCP 窗口字段包含一个非零的值。如果目标端口是关闭的,目标主机可能会响应一个 RST(复位)包,或者根本不响应。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。如果收到 SYN/ACK 响应,并且 TCP 窗口字段的值不为零,那么端口可能是开放的。如果收到 RST 响应或者根本没有响应,那么端口可能是关闭的。
2.5.9 TCP Maimon 扫描
命令:nmap -sM ip
在网络扫描领域中,TCP Maimon Scan(又称 Maimonides Scan)是一种比较罕见的扫描技术,其命名来源于古代犹太学者拉比・莫西・马蒙尼德斯(Moses Maimonides)。该扫描技术利用了 TCP 协议的一些特性来确定目标主机上的端口状态。
TCP Maimon Scan 的工作原理如下:
- 发送 TCP 包:扫描发起者向目标主机的指定端口发送一个 TCP 包,其中 SYN 和 RST 标志位都被设置,同时 TCP 窗口字段设置为零。
- 等待响应:如果目标端口是开放的,目标主机会响应一个包,其中 SYN、ACK 和 RST 标志位都被设置,同时 TCP 窗口字段包含一个非零的值。如果目标端口是关闭的,目标主机可能会响应一个 RST 包。
- 分析响应:扫描发起者通过分析目标主机的响应来确定端口的状态。如果收到 SYN/ACK/RST 响应,并且 TCP 窗口字段的值不为零,那么端口可能是开放的。如果收到 RST 响应,那么端口可能是关闭的。
三、基础使用
3.1 主机扫描
快速扫描
1
nmap 192.168.1.1
- 默认扫描1000个常用TCP端口。
多目标扫描
1
nmap 192.168.1.1 192.168.1.2
网段扫描
1
nmap 192.168.1.0/24
排除特定IP
1
nmap 192.168.1.0/24 --exclude 192.168.1.5
仅存活主机探测
1
nmap -sn 192.168.1.0/24
3.2 端口扫描
指定端口扫描
1
nmap -p 80,443 192.168.1.1
端口范围扫描
1
nmap -p 1-1000 192.168.1.1
端口状态说明
- open:端口开放且服务可用。
- closed:端口关闭但可访问。
- filtered:被防火墙过滤,无法探测。
- unfiltered:可访问但状态未知。
3.3 服务与系统识别
服务版本检测
1
nmap -sV -p 80 192.168.1.1
操作系统识别
1
sudo nmap -O 192.168.1.1
四、扫描技术
4.1 TCP扫描
SYN扫描(半开扫描)
1
nmap -sS 192.168.1.1
- 快速且隐蔽,不建立完整连接。
Connect扫描(全连接)
1
nmap -sT 192.168.1.1
- 默认方式,完成TCP三次握手。
ACK扫描
1
nmap -sA 192.168.1.1
- 探测防火墙规则,判断端口是否被过滤。
4.2 UDP扫描
1 | nmap -sU 192.168.1.1 |
- 速度较慢,需处理无响应情况。
4.3 隐蔽扫描
Null扫描
1
nmap -sN 192.168.1.1
- 发送无标志位的TCP包。
FIN扫描
1
nmap -sF 192.168.1.1
- 发送FIN标志位的TCP包。
Xmas扫描
1
nmap -sX 192.168.1.1
- 发送FIN、PSH、URG标志位的TCP包。
五、绕过防火墙
报文分段
1
nmap -f 192.168.1.1
MTU调整
1
nmap --mtu 1500 192.168.1.1
诱饵扫描
1
nmap -D RND:5 192.168.1.1 # 随机生成5个诱饵IP
源地址欺骗
1
nmap -S 伪造IP -e 网卡 192.168.1.1
附加随机数据
1
nmap --data-length 100 192.168.1.1
六、漏洞扫描
漏洞脚本扫描
1
nmap --script=vuln 192.168.1.1
常见脚本示例
- Whois查询:
nmap --script=whois-domain example.com
- DNS爆破:
nmap --script=dns-brute example.com
- FTP弱口令:
nmap --script=ftp-brute -p 21 192.168.1.1
- Whois查询:
七、输出报告
标准格式
1
nmap -oN result.txt 192.168.1.1
XML格式
1
nmap -oX result.xml 192.168.1.1
八、端口与服务参考表
端口号 | 服务/协议 | 常见攻击方向 |
---|---|---|
21 | FTP | 匿名登录、爆破 |
22 | SSH | 爆破、隧道转发 |
80 | HTTP | Web漏洞(SQLi、XSS) |
443 | HTTPS | 证书绕过、中间人攻击 |
3306 | MySQL | 注入、弱口令爆破 |
3389 | RDP | 爆破、Shift后门(旧系统) |
6379 | Redis | 未授权访问、数据泄露 |
9200 | Elasticsearch | 未授权访问、远程执行 |