端口扫描与nmap
什么是端口扫描?
端口扫描是一种网络探测技术,用于发现目标系统上开放的端口和运行的服务。就像检查一栋大楼有哪些房间的门是开着的一样。
端口扫描的目的:
-
发现服务:找出目标系统运行的服务
-
风险评估:识别潜在的安全漏洞
-
网络映射:了解目标网络结构
-
合规检查:验证安全策略执行情况
Nmap 简介
Nmap(Network Mapper)是业界最著名的端口扫描工具,功能强大且灵活。
基本语法:
不同扫描方式的详细区别
1. TCP SYN 扫描 (-sS) - 最常用
原理:发送TCP SYN包,根据响应判断端口状态
工作流程:-
发送 SYN 包到目标端口
-
如果收到 SYN-ACK → 端口开放(然后发送 RST 断开)
-
如果收到 RST → 端口关闭
-
没有响应 → 端口被过滤
优点:
-
✅ 快速高效
-
✅ 隐蔽性好(不建立完整连接)
-
✅ 被大多数系统日志记录为连接尝试
缺点:
-
❌ 需要 root 权限
-
❌ 可能被高级IDS检测
适用场景:大多数渗透测试和CTF场景
2. TCP Connect 扫描 (-sT)
原理:完成完整的三次握手
工作流程:-
发送 SYN → 收到 SYN-ACK → 发送 ACK(建立连接)
-
立即关闭连接
优点:
-
✅ 不需要 root 权限
-
✅ 在所有系统上都能工作
-
✅ 结果非常准确
缺点:
-
❌ 速度较慢
-
❌ 会在目标日志中留下完整连接记录
-
❌ 容易被检测
适用场景:没有root权限时的扫描
3. UDP 扫描 (-sU)
原理:发送UDP包探测UDP服务
工作流程:-
发送空的UDP包到目标端口
-
如果收到ICMP端口不可达 → 端口关闭
-
如果收到UDP响应 → 端口开放
-
没有响应 → 端口开放或被过滤
优点:
-
✅ 能发现UDP服务
-
✅ 很多系统不记录UDP扫描
缺点:
-
❌ 非常慢(因为UDP无连接)
-
❌ 结果可能不准确
-
❌ 需要root权限
适用场景:DNS、SNMP、DHCP等UDP服务扫描
4. TCP ACK 扫描 (-sA)
原理:发送ACK包探测防火墙规则
工作流程:-
发送ACK包到目标端口
-
分析返回的RST包
-
判断防火墙状态(过滤/未过滤)
优点:
-
✅ 能绕过简单的状态检测防火墙
-
✅ 探测防火墙规则
缺点:
-
❌ 不能确定端口是否开放
-
❌ 需要root权限
适用场景:防火墙规则探测
5. TCP Window 扫描 (-sW)
原理:基于TCP窗口大小判断端口状态
工作流程:-
类似于ACK扫描
-
检查返回RST包的TCP窗口字段
-
非零窗口 = 端口开放,零窗口 = 端口关闭
优点:
- ✅ 在某些系统上能准确判断端口状态
缺点:
-
❌ 不是所有系统都支持
-
❌ 可靠性有限
适用场景:特定系统的精确扫描
6. TCP FIN 扫描 (-sF)
原理:发送FIN包(类似连接结束)
工作流程:-
发送FIN包到目标端口
-
如果收到RST → 端口关闭
-
没有响应 → 端口开放
优点:
- ✅ 能绕过一些不记录FIN包的IDS
缺点:
-
❌ 不适用于Windows系统
-
❌ 需要root权限
适用场景:避开某些IDS的检测
7. TCP NULL 扫描 (-sN)
原理:发送没有任何标志位的TCP包
工作流程:-
发送无标志TCP包
-
如果收到RST → 端口关闭
-
没有响应 → 端口开放
优点:
- ✅ 高度隐蔽
缺点:
-
❌ 不适用于Windows系统
-
❌ 需要root权限
适用场景:需要高度隐蔽的扫描
8. TCP Xmas 扫描 (-sX)
原理:发送FIN、PSH、URG标志都设置的TCP包
工作流程:-
发送特殊标志组合的TCP包
-
如果收到RST → 端口关闭
-
没有响应 → 端口开放
优点:
- ✅ 非常隐蔽
缺点:
-
❌ 不适用于Windows系统
-
❌ 需要root权限
适用场景:避开高级IDS检测
扫描方式对比表
| 扫描类型 | 命令 | 需要Root | 速度 | 隐蔽性 | 准确性 | 适用系统 |
|---|---|---|---|---|---|---|
| TCP SYN | -sS |
✅ | 快 | 高 | 高 | 所有 |
| TCP Connect | -sT |
❌ | 中 | 低 | 高 | 所有 |
| UDP | -sU |
✅ | 很慢 | 中 | 中 | 所有 |
| TCP ACK | -sA |
✅ | 快 | 中 | 中 | 所有 |
| TCP FIN | -sF |
✅ | 快 | 高 | 中 | Unix |
| TCP NULL | -sN |
✅ | 快 | 很高 | 中 | Unix |
| TCP Xmas | -sX |
✅ | 快 | 很高 | 中 | Unix |
高级扫描技巧
1. 版本检测 (-sV)
探测服务的具体版本信息。
2. 操作系统检测 (-O)
猜测目标操作系统。
3. 脚本扫描 (-sC 或 --script)
nmap -sC target.com # 默认脚本
nmap --script vuln target.com # 漏洞扫描脚本
nmap --script http* target.com # 所有HTTP相关脚本
4. 时序控制 (-T)
nmap -T0 target.com # 非常慢(隐蔽)
nmap -T1 target.com # 慢速
nmap -T2 target.com # 正常偏慢
nmap -T3 target.com # 正常(默认)
nmap -T4 target.com # 快速(推荐)
nmap -T5 target.com # 极快
实际CTF应用示例
基础信息收集:
针对特定服务(-p指定扫描端口):
# Web服务扫描
nmap -sV -p 80,443,8080,8443 target.com
# 数据库扫描
nmap -sV -p 3306,5432,27017 target.com
# 扫描指定范围的端口
nmap -sT -Pn -p9000-11000 192.168.192.3
结果解读
端口状态含义:
-
open:端口开放,有服务监听
-
closed:端口关闭,但主机可达
-
filtered:端口被防火墙过滤
-
unfiltered:端口可达,但状态未知
-
open|filtered:无法确定是开放还是过滤
-
closed|filtered:无法确定是关闭还是过滤
示例输出解读:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1
80/tcp open http Apache httpd 2.4.41
443/tcp open ssl/http Apache httpd 2.4.41
3306/tcp open mysql MySQL 5.7.33
防御措施
如何检测端口扫描:
防护建议:
-
关闭不必要的端口和服务
-
使用防火墙限制访问
-
定期进行安全审计
-
监控异常网络活动
总结
掌握不同的Nmap扫描技术对于网络安全和CTF比赛至关重要:
-
日常使用:TCP SYN扫描 (
-sS) -
无权限时:TCP Connect扫描 (
-sT) -
UDP服务:UDP扫描 (
-sU) -
隐蔽扫描:FIN/NULL/Xmas扫描
-
全面评估:结合版本检测和脚本扫描