内网渗透测试中,扫描行为本身就可能触发安全设备的告警。传统扫描方式就像拿着手电筒在黑暗房间里四处照射,不仅容易被发现,还会留下明显的访问痕迹。而隐蔽扫描则更像夜视仪——既能看清环境,又不会暴露自身位置。
我在企业安全评估项目中多次遇到这种情况:常规扫描刚发起就被阻断,而经过精心设计的隐蔽扫描却能持续数周不被发现。这种"安静"的扫描方式对于红队演练和授权测试尤为重要,它能让安全人员更真实地评估防御体系的盲点。
--scan-delay和--max-rate是控制扫描节奏的关键参数。在测试某金融机构内网时,我发现将扫描间隔设置为随机5-10秒(--scan-delay 5s --randomize-hosts),同时限制每秒不超过2个包(--max-rate 2),可以完美绕过他们的IDS阈值检测。实际操作时应先进行小规模测试,用Wireshark观察流量特征,逐步调整到最佳间隔。
重要提示:避免使用固定延迟,
--randomize-hosts必须配合使用,否则规律性的访问间隔仍然会被识别
通过--source-port参数指定源端口为53(DNS)或80(HTTP)等常见服务端口,能显著降低扫描流量的可疑性。我曾用-g 53参数成功让扫描流量混入正常的DNS查询中。更高级的伪装可以结合--ip-options构造特殊IP包头,模拟路由器探测流量。
将整个C段扫描拆分为多个任务:
bash复制for i in {1..254}; do
nmap -Pn -T2 --scan-delay 3s -p 80,443 192.168.1.$i -oN scan_$i.log &
sleep $((RANDOM%10+5))
done
这种化整为零的方式配合随机休眠,使得扫描行为更像正常的业务访问。记得用-oN分开保存结果,最后用nmap-log-merge工具整合报告。
使用--data-length添加随机填充数据,避免扫描包与标准探测包的特征匹配。在对抗某商业防火墙时,设置--data-length 24使所有探测包统一长度,成功规避了基于包长异常的检测规则。
-D参数可以设置诱饵IP列表,例如:
bash复制nmap -D RND:10,192.168.1.101,ME 192.168.1.1/24
这会生成包含10个随机IP、1个真实内网IP和你真实IP的混合流量。注意诱饵IP要选择当前网络中存在但空闲的主机,否则可能触发ARP风暴。
大多数监控系统重点关注常见服务端口。通过扫描高端口范围(如30000-40000),往往能发现被忽视的服务。我曾用-p 31000-32000在某企业内网发现过被遗忘的数据库实例。
当发现扫描结果异常空白时,按以下步骤诊断:
ping -c 1 目标IP测试基础连通性tcpdump -i eth0 host 目标IP观察原始流量nmap -Pn -T1 -p 80 --scan-delay 10s 目标IP| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 所有端口显示过滤 | 防火墙静默丢弃 | 改用ACK扫描(-sA) |
| 部分端口时通时断 | 负载均衡干扰 | 使用--unique参数 |
| 扫描速度突然下降 | QoS限速生效 | 降低--max-rate值 |
| 结果出现矛盾 | 中间设备篡改 | 启用--packet-trace跟踪 |
执行隐蔽扫描后,记得清理目标系统的日志。通过--script=http-log4shell等脚本可以检测和利用日志注入漏洞。更安全的方式是在扫描前就建立持久化通道,通过已控主机进行跳板扫描。
对于大型内网环境,建议采用分布式扫描架构:
这种架构下,单个节点被发现的概率大大降低。我曾用树莓派搭建过20个节点的扫描集群,持续三个月未被发现,最终绘制出完整的内网拓扑图。
在实际操作中,扫描完成后应立即进行痕迹清理。通过--script=firewalk可以探测出网络中的审计设备位置,这对规划扫描路径很有帮助。记住,最成功的扫描就是让管理员完全察觉不到的扫描。