三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

内网探测实战:从主机存活到Web资产识别的三层技术解析

内网探测实战:从主机存活到Web资产识别的三层技术解析

1. 从“盲人摸象”到“庖丁解牛”:内网探测的实战价值与核心逻辑

在安全评估、应急响应,甚至是日常的IT资产管理中,我们常常面临一个最基础却又最关键的挑战:“我的内网里到底有什么?”这听起来像是个哲学问题,但在技术层面,它指向的是内网探测。很多人,尤其是刚入行的朋友,容易把内网探测简单地等同于“扫一扫IP段”,结果要么是面对海量IP无从下手,要么是扫了半天只得到一堆冷冰冰的“存活”或“关闭”状态,对后续工作帮助甚微。这就像“盲人摸象”,只摸到了局部,却无法拼凑出完整的、有价值的资产画像。

真正的内网探测,应该是一场有策略、有层次、有目标的“庖丁解牛”。它的核心价值在于,将一片混沌的网络空间,解构成一张清晰的资产地图。这张地图上,不仅标注了哪些主机是“活”的,更重要的是,清晰地标明了每台主机上开放了哪些端口,运行着哪些服务,甚至暴露了哪些Web应用。这对于后续的漏洞评估、权限提升、横向移动,乃至是日常的资产梳理和合规检查,都至关重要。

那么,一个完整的、高质量的内网探测流程应该包含哪些环节?我认为可以概括为三个递进的层次:主机存活探测、端口与服务识别、Web资产发现与指纹识别。这三个环节环环相扣,缺一不可。接下来,我将结合我多年的实战经验,详细拆解每个环节的核心技术、工具选型、实操步骤,以及那些在官方文档里不会写的“坑”和技巧。

2. 第一层:主机存活探测——如何高效地“敲门”

主机存活探测是整个探测流程的起点,目标是快速、准确地找出网络内哪些IP地址对应着正在运行的主机。这一步的效率直接决定了后续工作的广度和深度。

2.1 探测原理与协议选择:不只是Ping

提到主机存活,很多人第一反应就是Ping(ICMP Echo Request)。但在实战中,尤其是在企业内网,ICMP协议被防火墙或主机防火墙(如Windows防火墙)过滤的情况非常普遍。因此,我们必须掌握多种探测手段。

  1. ICMP探测:最经典的方式。工具如ping命令或fping(用于批量)。优点是速度快,协议简单。但缺点也很明显:容易被过滤。一个常见的技巧是使用不同大小的ICMP包,或者使用-A(地址掩码请求)等不常见的ICMP类型,有时能绕过简单的过滤规则。

  2. TCP SYN探测:向目标主机的特定端口(如80, 443, 22, 445等常见端口)发送一个TCP SYN包。如果主机存活且端口关闭,会返回RST;如果端口开放,会返回SYN-ACK;如果主机不存活或无响应,则超时。这种方法比ICMP更可靠,因为业务端口开放的几率远大于ICMP被放通的几率。Nmap的-PS选项就是基于此原理。

  3. TCP ACK探测:发送一个TCP ACK包。根据RFC,无论端口状态如何,存活主机都必须返回RST包。这可以用来探测那些过滤了SYN包但不过滤ACK包(某些状态检测防火墙的配置)的主机。Nmap的-PA选项。

  4. ARP探测:在局域网(同一网段)内,这是最快、最准确的探测方式。它不经过IP层,直接询问“这个IP的MAC地址是多少?”。只要主机在线且网卡正常,就一定会回复。工具如arping或Nmap的-PR选项。这是内网探测的首选方法,前提是你和靶机在同一广播域。

2.2 工具实战:Nmap与Masscan的取舍

对于批量探测,手动pingarping显然不现实。这里我主要对比两款主力工具:NmapMasscan

Nmap:瑞士军刀,功能全面。用于主机发现时,推荐使用-sn(No port scan)选项,它会结合多种探测方式。

# 基础用法:探测192.168.1.0/24网段 nmap -sn 192.168.1.0/24 # 更全面的探测:使用ARP(局域网)+SYN(跨网段) nmap -sn -PR -PS22,80,443 192.168.1.0/24

注意:-sn在Nmap旧版本中叫-sP。使用-PR(ARP探测)在局域网内极快,通常几秒就能扫完一个C段。如果目标不在同一网段,Nmap会自动回退到ICMP/TCP探测。

Masscan:号称“世界上最快的端口扫描器”,其设计目标是全网扫描。在主机发现方面,它同样非常快,因为它采用无状态的异步扫描,可以自定义极高的发包速率。

# 使用Masscan进行ping扫描(ICMP) masscan 192.168.1.0/24 --ping

Masscan的速度优势在超大网段(如B类地址)时非常明显,但其输出格式不如Nmap友好,且功能相对单一。

我的经验选择

  • 中小型内网(C类及以下)首选Nmap-sn -PR。准确率高,速度快,结果直观。
  • 大型内网或需要极致速度:可以先用Masscan--ping快速过一遍,再用Nmap对存活IP进行二次验证和深入扫描。Masscan可能会有少量误报(漏报较少),所以需要验证。
  • 跨网段探测Nmap-sn -PE -PS22,80,445。组合使用ICMP和TCP SYN探测,提高成功率。

2.3 避坑指南:那些让你“抓狂”的漏报与误报

  • 主机防火墙的干扰:Windows Defender防火墙默认会阻止入站ICMP回显请求。这就是为什么你Ping一台全新的Windows 10/11主机不通,但它确实在线。解决方案:优先使用基于TCP的探测(如-PS445,445端口在Windows上通常开放),或者在目标网段使用ARP探测。
  • 云主机与虚拟化环境:一些云主机提供商(如AWS EC2)的安全组默认禁止所有入站流量,包括ICMP。这时,如果你有一台在云主机同一VPC内的机器,从内部用TCP探测其SSH(22)或RDP(3389)端口可能是唯一有效的方法。
  • 扫描速度过快导致丢包:尤其是Masscan,如果把速率(--rate)设置得过高(如100,000),可能会被本地操作系统或中间网络设备丢包,导致大量漏报。建议:内网扫描时,速率设置在1000-5000之间足矣。Nmap使用-T模板控制速度,-T4(激进)是平衡速度与稳定性的常用选择。
  • 结果保存与去重:批量扫描的结果一定要保存,并做好去重。Nmap可以用-oG(Grepable格式)或-oX(XML格式)输出,然后用grep或脚本提取IP。
    nmap -sn 192.168.1.0/24 -oG alive.gnmap grep "Status: Up" alive.gnmap | awk '{print $2}' > alive_hosts.txt
    这个alive_hosts.txt文件,就是我们进入下一阶段的“藏宝图”。

3. 第二层:端口与服务识别——打开主机的“房门”

拿到存活主机列表后,下一步就是探查每台主机上开放的“门”——即端口,并识别出“门后”运行的服务。这是将IP地址转化为具体资产信息的关键一步。

3.1 端口扫描技术深度解析

端口扫描不是简单地“尝试连接”,其技术细节决定了扫描的隐蔽性、准确性和速度。

  1. TCP全连接扫描(-sT):完成完整的三次握手。如果连接成功,说明端口开放。这是最稳定、最准确,但也是最“吵闹”的方式,容易被日志记录。
  2. TCP SYN半开放扫描(-sS):只发送SYN包,收到SYN-ACK即认为端口开放,随后发送RST断开连接,不建立完整连接。比全连接扫描隐蔽,是Nmap的默认扫描方式(需要root权限)。
  3. TCP FIN扫描(-sF)、NULL扫描(-sN)、Xmas扫描(-sX):发送违反TCP规范的探测包(如FIN、无标志位、FIN/URG/PSH标志位全开)。根据RFC,关闭的端口必须回应RST,开放的端口则丢弃该包。可用于绕过一些简单的防火墙和IDS。但并非所有系统都严格遵守RFC(如Windows),因此准确性有局限。
  4. UDP扫描(-sU):UDP是无连接的,所以探测更困难。Nmap会发送空的UDP报文,如果收到“ICMP端口不可达”错误,则端口关闭;否则,可能开放。UDP扫描非常慢,因为需要等待超时。

内网扫描建议:在内网环境中,对隐蔽性要求通常不高,追求的是效率和准确性。因此,Nmap的-sS(SYN扫描)是首选。如果需要扫描UDP端口,务必指定少量关键端口(如53 DNS, 161 SNMP, 123 NTP),或使用--top-ports参数。

3.2 服务版本探测与操作系统识别

知道端口开放还不够,我们需要知道上面跑的是什么。Nmap的-sV(版本探测)和-O(操作系统识别)功能无比强大。

  • -sV原理:连接到开放端口,抓取服务的banner信息,并与nmap-service-probes数据库中的探针进行匹配。它会发送多种探测报文,分析响应,从而判断服务类型(如Apache httpd)、版本号(如2.4.41),甚至有时能获取到配置信息。

    # 对存活主机进行端口扫描和版本探测 nmap -sS -sV -p- -T4 -iL alive_hosts.txt -oA port_scan_result

    -p-表示扫描所有65535个端口(慎用,极慢)。通常我会先扫常见端口--top-ports 1000

  • -O原理:通过分析TCP/IP协议栈的指纹(如初始TTL、窗口大小、TCP选项序列等)来猜测操作系统。它依赖于指纹数据库nmap-os-db。在内网,由于网络拓扑简单,-O的准确率通常很高。

一个黄金组合命令

nmap -sS -sV -O --top-ports 1000 -T4 -iL alive_hosts.txt -oA full_scan

这个命令会执行SYN扫描、对开放端口进行版本探测、尝试识别操作系统、扫描前1000个常见端口、使用激进的时序模板、从文件读取目标列表,并将结果以所有格式(Normal, XML, Grepable)输出。

3.3 结果处理与资产清单初步形成

扫描完成后,full_scan.xmlfull_scan.gnmap文件包含了海量信息。我们需要将其转化为结构化的资产清单。

  1. 使用Nmap解析工具nmap命令本身输出可读,但不利于程序处理。推荐使用nmap-parse-output或编写Python脚本解析XML输出。
  2. 简单文本提取:对于快速分析,可以从grepable格式中提取关键信息。
    # 提取所有开放了80或443端口的主机 grep -E “(80/open|443/open)” full_scan.gnmap | awk ‘{print $2}’ > web_hosts.txt # 提取运行SSH服务的主机及其版本 grep “22/open” full_scan.gnmap | grep -oP ‘ssh.*?(?=/)’ | sort | uniq -c
  3. 导入到资产管理系统:对于正规安全运营,可以将XML结果导入到类似FaradayDradis或自建的CMDB中,进行可视化管理和关联分析。

踩坑点

  • 扫描风暴:对内网成百上千台主机进行全端口扫描,会产生巨大的流量和连接数,可能触发网络监控告警,甚至影响业务。务必分批次、限速率进行,并选择业务低峰期。可以使用Nmap的--max-hostgroup--max-rate参数。
  • 版本探测的误判:有些服务会修改banner,或者非标准端口运行着非预期服务(如在8080端口运行着数据库),导致sV识别错误。需要人工核对,特别是对关键业务系统。
  • “假开放”端口:某些防火墙或负载均衡器可能会对所有探测包返回响应,造成端口“假开放”。可以通过-sT全连接扫描尝试真正建立连接来验证。

4. 第三层:Web资产发现与指纹识别——深入应用层

从端口扫描中,我们已经筛选出了运行Web服务(通常是80, 443, 8080, 8443等端口)的主机。这一步,我们要深入这些Web应用内部,发现隐藏的目录、文件、虚拟主机,并识别其使用的技术框架。

4.1 目标枚举:不止一个首页

一台主机的一个IP上,可能承载着多个Web应用。

  1. 端口扩展:除了常见端口,还要关注7001(WebLogic)、8000-9000(各种开发/测试服务)、3000(Node.js)、5000(Flask)等。
  2. 虚拟主机(vhost)发现:很多网站使用基于域名的虚拟主机。通过修改HTTP请求头中的Host字段,可以在同一IP上发现不同的网站。工具如ffufgobuster的vhost模式。
    ffuf -w /path/to/subdomain_wordlist.txt -u http://TARGET_IP -H “Host: FUZZ.example.com” -fs <size> # 根据响应大小过滤
  3. URL路径/目录爆破:这是发现后台登录界面、配置文件、备份文件等敏感资源的核心手段。字典的质量决定成败。
    # 使用 gobuster 进行目录爆破 gobuster dir -u http://TARGET_IP -w /usr/share/wordlists/dirb/common.txt -x php,html,json -t 50 # 使用 ffuf,速度更快,过滤更灵活 ffuf -w /usr/share/wordlists/dirb/common.txt -u http://TARGET_IP/FUZZ -fs 4242 # 过滤掉大小为4242的响应(通常是404页面)

4.2 指纹识别:看清应用的“DNA”

识别出Web应用使用的技术栈(CMS、框架、前端库、服务器、中间件等),能极大提高后续漏洞检测的针对性。

  1. 被动指纹识别

    • HTTP响应头Server(Nginx/1.18.0)、X-Powered-By(PHP/7.4.3)、Set-Cookie(JSESSIONID暗示Java)等。
    • 页面特征:HTML源码中的注释、特定路径(/wp-content/指向WordPress)、CSS/JS文件中的版本信息、favicon.ico的哈希值(如Shodan的Favicon指纹)。
    • 工具:浏览器插件如WappalyzerBuiltWith可以快速识别。
  2. 主动指纹识别

    • 访问特定路径:尝试访问/robots.txt/.git//wp-admin//console/等。
    • 使用专业工具
      • WhatWeb:功能强大的指纹识别工具,能识别数千种Web技术。
        whatweb http://TARGET_IP --color=never
      • Wappalyzer CLI版:与浏览器插件同源。
      • Eyewitness/Aquatone:它们不仅截图,也会进行简单的指纹识别,并生成漂亮的HTML报告,非常适合批量处理大量目标后的快速浏览。

4.3 整合与自动化:打造你的探测流水线

手动对几十上百个Web目标进行上述操作是不现实的。我们需要自动化流水线。

一个简单的流水线思路:

  1. 输入web_hosts.txt(来自端口扫描的Web主机列表)。
  2. 步骤一:基础信息获取:使用curlhttpx快速获取每个目标的标题、状态码、响应头。
    cat web_hosts.txt | httpx -title -status-code -tech-detect -o web_info.json
    httpx-tech-detect参数能进行基础的指纹识别。
  3. 步骤二:深度指纹识别:将上一步结果导入WhatWeb进行深度识别。
    cat web_hosts.txt | whatweb --input-file=- --log-json=whatweb_results.json
  4. 步骤三:目录爆破:针对识别出的重要系统(如WordPress, Jenkins)或所有目标,使用定制化字典进行目录爆破。
  5. 步骤四:报告生成:将以上所有结果(存活主机、开放端口、服务版本、Web指纹、敏感路径)整合到一个报告中,如使用nmap2html转换Nmap XML,或自己写脚本生成Markdown/HTML。

核心经验

  • 字典是关键:不要永远用common.txt。根据指纹识别结果使用针对性字典(如raft-medium-files.txt用于通用爆破,wordpress.txt用于WordPress)。
  • 速率控制:目录爆破是高频请求,务必限制线程数(-t),避免对目标造成DoS攻击或触发WAF封禁。
  • 关注非常规端口:开发、测试、临时搭建的服务往往运行在高位端口,它们的安全性通常最差,是绝佳的突破口。
  • 记录一切:所有扫描命令、使用的字典、开始结束时间,都应详细记录。这不仅是为了复现,更是为了在出现问题时(如业务受影响)能说清楚你做了什么。

5. 进阶策略与防御视角

掌握了基本的三层探测,你已经能画出不错的内网地图。但要成为高手,还需要一些进阶思维。

5.1 隐蔽扫描与时间维度

  • 时间分散:将大型扫描任务拆分成多个小任务,在数天甚至数周内分时段完成,融入正常的业务流量中,降低被检测到的概率。
  • 低速扫描:使用Nmap的-T0/-T1(偏执/猥琐)时序模板,在扫描之间插入随机延迟。
  • 利用合法流量:在已获得一定权限的主机上,利用其发起的正常网络连接来探测其他主机(如通过ARP缓存、NetBIOS查询、DNS查询日志等),这属于“Living off the Land”的范畴。

5.2 从防御者角度看探测

知己知彼,百战不殆。了解攻击者的探测手法,才能更好地防御。

  1. 监控与告警
    • IDS/IPS:部署Snort、Suricata等,定义规则检测Nmap、Masscan的扫描特征(如短时间内大量SYN包发往不同端口)。
    • 防火墙日志:分析被拒绝的ICMP、TCP SYN请求,特别是来自内网非常用IP的。
    • 主机级HIDS:如OSSEC、Wazuh,可以检测到端口扫描行为(多次连接尝试)。
  2. 减少攻击面
    • 最小化开放端口:关闭所有非必要的服务和端口。
    • 修改默认端口:将SSH、RDP等服务迁移到非标准端口,能防住大部分自动化扫描。
    • 隐藏Banner信息:配置Web服务器、应用中间件,不泄露具体的软件和版本信息。
    • 网络分段:严格的网络隔离,让即使一台主机失陷,攻击者也无法轻易扫描到核心业务网段。
  3. 部署蜜罐:在网络中部署一些伪装成真实资产的低交互蜜罐(如Honeyd, Cowrie),一旦被扫描或攻击,就能立即告警,并误导攻击者。

内网探测是一项基础但永无止境的工作。它没有一成不变的“银弹”命令,需要你根据目标网络的环境、规模、防守强度灵活调整策略。从粗暴的全网扫射,到精准的定向探测;从依赖单一工具,到构建自动化流水线;从只关注技术细节,到理解背后的网络协议和防御原理——这个过程,正是从业余走向专业的分水岭。记住,你画出的每一张资产地图,不仅是攻击的路线图,更是加固防御的施工图。

← 返回列表