渗透测试情报收集:从被动侦察到主动探测的实战策略
1. 情报收集渗透测试的“钓鱼执法”前奏在网络安全这个没有硝烟的战场上渗透测试员与攻击者之间的较量往往在真正的“交火”之前就已经开始了。这个阶段我们称之为“情报收集”。很多人尤其是刚入行的朋友容易把它简单理解为“用工具扫一下端口和目录”这其实是一个巨大的误区。情报收集更像是现实世界中的“钓鱼执法”行动前警方所做的大量、细致、隐蔽的摸排工作。你不会在毫无准备的情况下直接冲进一个可能藏匿着危险目标的建筑而是会先观察周边环境、记录人员进出规律、分析建筑结构、甚至伪装成不同身份去接触相关人员。渗透测试中的情报收集其核心逻辑与此高度一致在不惊动目标、不触发任何防御机制的前提下尽可能全面、深入地描绘出目标的“数字画像”为后续的精准打击找到最薄弱的入口。我见过太多因为情报收集不充分而导致的“翻车”案例。比如有人兴冲冲地对着一个目标一顿漏洞扫描结果触发了对方的Web应用防火墙WAFIP直接被拉黑后续所有测试计划泡汤也有人费尽心思找到一个看似可利用的旧版系统结果那只是对方故意留下的“蜜罐”自己反被溯源。这些问题的根源都在于把情报收集当成了一个“自动化脚本执行”的步骤而忽略了其背后“人”的思考和“策略”的运用。本期我将结合自己多年在SRC安全应急响应中心漏洞挖掘和渗透测试中的实战经验为你拆解情报收集的完整流程、核心工具背后的原理以及那些教科书上不会写的“踩坑”心得。我们的目标不是成为工具的奴隶而是成为驾驭情报的猎人。2. 情报收集的整体策略与分层模型2.1 从“被动”到“主动”情报收集的两大维度一个成熟的情报收集过程必须兼顾“被动”和“主动”两个维度它们的关系如同侦察兵使用的望远镜和夜视仪各有用途缺一不可。被动信息收集顾名思义就是在不直接与目标系统交互的情况下获取信息。这就像通过公开的卫星地图、房产登记信息、社交媒体动态来了解一个建筑。它的最大优势是隐蔽性极高几乎不会留下任何由你发起的访问记录。被动收集的核心来源包括搜索引擎不仅仅是Google、Bing。熟练运用搜索引擎语法如site:inurl:filetype:是基本功。例如site:target.com filetype:pdf可能找到泄露的员工手册、技术方案site:target.com -www可能发现那些不常被主站引用的测试、备份子域名。公开数据库和档案如WHOIS查询了解域名注册人、邮箱、电话、DNS历史记录查询查看域名解析变迁可能发现被遗忘的旧IP或子域名、SSL/TLS证书透明度日志证书在签发时会被公开记录从中可以挖掘大量子域名。第三方聚合平台如Shodan、Censys、Fofa、ZoomEye等网络空间测绘引擎。它们持续扫描全网你可以查询目标IP开放了哪些非常规端口或者全网有哪些设备使用了目标的特定技术框架如title:“Apache Tomcat/8.5”。这是发现暴露在公网的数据库、监控系统、开发接口的利器。代码仓库与历史泄露在GitHub、GitLab、码云等平台搜索目标公司的名称、邮箱后缀常常能意外发现员工不小心上传的含有API密钥、数据库连接字符串、内部账号密码的源代码片段。此外利用psbdmp.ws等平台可以查询某个邮箱是否在历史数据泄露事件中暴露过密码。注意被动收集的信息可能存在滞后或不准确但它为你勾勒了目标的初始轮廓并提供了大量用于主动探测的“线索”如潜在的子域名列表、IP段、员工邮箱格式等。主动信息收集则是需要向目标系统发送探测请求根据其响应来分析信息。这就像派遣侦察兵靠近建筑用手电查看门锁型号轻推窗户测试是否关严。主动收集会留下访问日志因此需要讲究技巧和节奏。域名与子域名枚举这是主动探测的起点。除了使用subfinder、amass、OneForAll等工具进行字典爆破和搜索引擎聚合更要利用前面被动收集到的信息。例如从SSL证书中提取的域名、从JS文件中发现的API接口地址都可能是宝贵的子域名线索。端口扫描与服务识别使用Nmap、Masscan进行端口扫描。这里的关键不是“扫全端口”而是“智能扫描”。先快速扫描常见端口-F再对开放端口进行深度服务版本探测-sV。对于Web服务80 443 8080等要立即跟进目录扫描、指纹识别。Web应用指纹识别使用Wappalyzer浏览器插件、WhatWeb、EHole等工具快速识别网站使用的技术栈如CMSWordPress Joomla、前端框架React Vue、服务器Nginx Apache、中间件Tomcat WebLogic及具体版本。识别出特定版本后才能关联已知的公开漏洞。目录与文件发现使用dirsearch、gobuster、ffuf等工具基于字典对网站目录和文件进行爆破。字典的质量至关重要。一个优秀的测试者会维护自己的字典融合通用字典、针对特定CMS的字典如针对WordPress的wp-content/plugins/、以及从当前目标JS文件中爬取到的路径关键词。两者的关系先被动后主动循环往复。被动收集为主动探测提供目标和方向避免盲目扫描主动探测发现的新信息如一个新子域名又可以作为新一轮被动收集的起点。这个循环迭代的过程就是目标画像不断清晰的过程。2.2 OPSEC贯穿始终的操作安全考量OPSECOperations Security 行动安全是情报收集乃至整个渗透测试的生命线。在“钓鱼执法”的比喻中OPSEC就是侦察员的伪装、行动纪律和撤离计划。流量来源伪装永远不要从你自己的家庭或公司IP发起主动探测。使用可靠的VPS服务器作为跳板。对于高敏感目标可以考虑使用多个不同地域、不同运营商的VPS进行轮换。一些云服务商提供按量计费的弹性IP用后即弃是不错的选择。工具特征隐藏默认配置的扫描工具特征明显。Nmap的默认TCP SYN扫描、dirsearch的默认User-Agent都会被成熟的WAF或IDS轻易识别并封锁。必须进行定制降低速率在Nmap、ffuf等工具中设置延迟--delay-p模拟正常用户访问节奏。随机化User-Agent使用工具池或随机生成合法的浏览器UA。使用代理池对于大规模扫描可以考虑使用一些免费的HTTP代理或 socks 代理需注意其稳定性和安全性将流量分散。日志与时间管理在VPS上操作时注意清除命令历史history -c并清空~/.bash_history。扫描任务尽量安排在目标业务低峰期例如当地时间的深夜这样即使产生一些异常日志也更容易被当作背景噪音忽略。法律与授权红线这是最重要的OPSEC。仅在获得明确书面授权的范围内对目标进行测试。清晰地界定测试边界哪些IP、域名可以测哪些绝对不能碰。任何对非授权目标的探测无论意图如何都可能构成违法行为。3. 核心工具链实操与深度解析工欲善其事必先利其器。但比工具本身更重要的是理解它们的工作原理和最佳使用场景。下面我以几个核心场景为例进行深度拆解。3.1 子域名挖掘从广撒网到精准狙击子域名枚举是扩大攻击面的关键。一个admin.target.com或vpn.target.com的价值可能远超主站。实战流程被动收集聚合# 使用subfinder进行多源聚合需配置API密钥如VirusTotal SecurityTrails等 subfinder -d target.com -silent -o passive_subs.txt # 使用amass进行深度枚举内置多种数据源和智能爬取 amass enum -passive -d target.com -o amass_passive.txt合并去重后你得到第一份子域名列表。这份列表通常质量较高来自证书、搜索引擎等公开记录。字典爆破主动 被动收集总有遗漏特别是那些未公开引用的内部、测试、临时系统。这时需要字典爆破。# 使用gobuster进行DNS子域名爆破 gobuster dns -d target.com -w /path/to/subdomains_wordlist.txt -t 50 -o gobuster.txt字典的选择是成败关键。不要只用一个通用字典。我的做法是基础字典使用commonspeak2、subdomains-top1million-5000.txt等。针对性字典从已发现的子域名中提取关键词如devstgapiinternal 城市缩写 部门名等生成自定义字典。组合字典将目标公司名company、产品名product与基础词汇admintestvpn进行组合。递归发现与验证 将上面发现的所有子域名作为新的目标重复进行被动收集和字典爆破即amass enum -brute -d found_sub1.com这可能会发现更深层次的域名。最后对所有发现的域名进行DNS解析验证dnsx和HTTP/HTTPS服务存活探测httpx过滤出真正可访问的Web资产。# 使用httpx进行存活探测和基础信息获取标题、状态码、指纹 cat all_subs.txt | httpx -title -status-code -tech-detect -o live_subs.txt实操心得速率控制大规模爆破时务必限制线程数和请求频率避免对目标DNS服务器造成压力或触发监控。关注“泛解析”如果发现*.target.com解析到同一个IP说明存在DNS泛解析。此时字典爆破会产生大量“假阳性”结果任何随机前缀都解析。你需要通过HTTP响应内容、标题、大小等进行二次筛选找出那些有独特内容的真实子站。记录来源为每个发现的子域名标记其来源如“证书透明日志”、“搜索引擎”、“字典爆破”这有助于评估信息的可靠性和新鲜度。3.2 端口扫描与服务测绘理解协议背后的故事端口是通向服务的门。扫描不是为了罗列数字而是理解每扇门后住着谁。Nmap的进阶用法# 第一阶段快速发现TCP SYN扫描 前1000个常见端口 nmap -sS --min-rate 1000 -p- --open -oA nmap_quick target_ip # 第二阶段服务深度识别对开放端口进行版本探测和脚本扫描 nmap -sV -sC -p 开放端口列表 -oA nmap_detail target_ip-sSTCP SYN半开放扫描速度快且相对隐蔽。--min-rate 1000设置最小发包速率加速扫描根据网络情况调整。-p-扫描所有65535个端口。在时间允许的情况下进行但通常先扫常见端口。-sV探测服务版本。-sC使用默认的Nmap脚本引擎进行更深入的探测可能会识别出具体的应用漏洞如Redis未授权访问。解读扫描结果22/tcp open ssh OpenSSH 7.4如果版本较老如OpenSSH 7.7可能存在用户名枚举等漏洞。3306/tcp open mysqlMySQL数据库暴露在公网尝试弱口令爆破必须在授权范围内或检查是否允许匿名登录。8080/tcp open http Apache Tomcat/Coyote JSP engine 8.5.19一个特定版本的Tomcat。立即去搜索该版本是否存在已知的RCE漏洞如CVE-2017-12615。同时尝试访问/manager/html进行Tomcat管理后台登录。6379/tcp open redis Redis key-value storeRedis未授权访问漏洞的经典端口。尝试使用redis-cli -h target_ip直接连接如果成功且无需认证则可能直接获取服务器权限。网络空间测绘引擎的妙用 假设Nmap发现目标开放了8080端口是Jenkins。你可以直接在Shodan中搜索port:8080 http.title:“Jenkins” org:“Target Company Name”。这可能会发现目标公司其他网段同样暴露的Jenkins服务甚至是因为配置错误而暴露的内网地址。Fofa的语法类似title“Jenkins” org“公司名”。3.3 Web资产指纹与目录结构探测确认Web服务存活后下一步是快速识别其技术构成和探索隐藏内容。指纹识别浏览器插件Wappalyzer、BuiltWith能提供最快速的初步判断。命令行工具WhatWeb或EHole能进行批量识别并输出结构化结果便于后续自动化处理。whatweb https://target.com --colornever # 输出可能包含 WordPress PHP MySQL Nginx JQuery等识别出WordPress后你的测试策略就要立刻调整开始查找wp-admin登录页面 使用wpscan扫描插件/主题漏洞 查找xmlrpc.php文件是否存在爆破可能。目录/文件爆破# 使用ffuf 功能强大且速度快 ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -mc 200, 403, 401 -t 50-mc指定匹配的状态码。200成功固然重要但403禁止访问和401需要认证同样有价值它们告诉你这个路径是存在的只是被保护了这本身就是一个敏感路径的线索。字典策略和子域名枚举一样使用复合字典。针对PHP站点加入php相关的字典如phpinfo.phpadmin.php针对备份文件加入bakoldtar.gz等后缀字典。递归扫描对于发现的重要目录如/admin//backup/可以将其作为新的根目录进行递归爆破以发现更深层的文件。JS文件分析——被忽视的金矿 现代Web应用大量使用JavaScript。前端JS文件中常常硬编码了后端API接口地址、内部域名、甚至有时会不小心泄露API密钥、加密密钥、调试信息。爬取JS文件使用gospider、hakrawler等工具爬取站点提取所有JS文件链接。静态分析使用grep、awk或专门工具如LinkFinderJSFinder分析JS文件内容搜索关键词如apiendpointurlpathkeysecrettokenpasswordinternaldevstaginglocalhost域名格式/^[a-zA-Z0-9.-]\.[a-zA-Z]{2,}/ 从JS文件中发现的https://internal-api.target.com/v1/users这样的接口其价值可能远超你爆破出来的任何目录。4. 情报的整合、分析与攻击面绘制收集到海量数据后如何将它们变成可执行的“作战地图”这一步是区分普通脚本小子和专业测试者的分水岭。4.1 数据整理与关联分析你需要将不同来源的信息进行关联。我通常使用一个简单的Markdown文档或Notion数据库来记录但更专业的方法是使用类似Maltego这样的可视化工具或者自己用Python脚本处理。构建目标资产树核心节点主域名target.com。一级分支IP地址从A记录、历史解析记录中获得。二级分支子域名挂在对应的IP或CDN服务下。叶子节点每个子域名/IP下的开放端口、服务版本、Web指纹、发现的敏感目录/文件、从JS中提取的API端点。附加属性为每个节点标记“风险等级”根据暴露的服务、版本新旧、是否存在已知漏洞初步判断、“测试状态”未测试/已测试/有漏洞、“备注”如phpMyAdmin外网可访问 需测弱口令。通过这种树状结构你可以清晰地看到资产分布哪些业务部署在同一个IP上是否存在“一损俱损”的风险薄弱环节哪个子域名的服务版本最老哪个IP上开了最多的管理端口如22 3389 5900关联路径从dev.target.com发现的内部API域名api.internal 虽然无法从外网直接访问但可能在后续的内网横向移动中成为关键跳板。4.2 攻击面评估与测试优先级排序不是所有发现的目标都值得投入同等精力。你需要基于情报进行优先级排序。高风险优先项立即跟进暴露的管理后台/wp-admin//admin//manager/htmlphpMyAdminJenkins控制台等。尝试默认口令、弱口令爆破授权下、检查是否存在未授权访问。老旧且有公开漏洞的服务如Struts2特定版本、老旧WebLogic、已知漏洞的FastJSON组件等。验证漏洞是否存在并准备利用。敏感文件泄露/.git/目录可能导致源码泄露、/.env文件可能含数据库密码、/WEB-INF/web.xmlJava Web应用配置、/backup/目录下的数据库备份文件。参数化功能点发现/api/user?id/export?file/preview?url这类带有参数的接口它们通常是SSRF服务器端请求伪造、文件包含、SQL注入等漏洞的高发区。中低风险项后续测试或监控版本较新暂无公开漏洞的常见服务。静态宣传页面。需要复杂交互才能触发的功能点。绘制攻击面地图 你可以用思维导图工具如XMind直观地绘制出来。中心是目标第一层是主要业务线官网、商城、APP后台第二层是支撑这些业务的子域名/IP第三层是具体的服务、端口和已识别的风险点。用红色高亮高风险项黄色标出中风险项。这张图就是你后续渗透测试的“导航图”。5. 常见陷阱、排查技巧与防御视角5.1 实战中踩过的“坑”与应对“扫挂了”目标服务使用dirsearch或ffuf时线程数过高字典中存在大量../之类的路径可能导致负载较低的服务器直接拒绝服务或响应缓慢。排查测试时先从小字典、低线程开始观察服务器响应时间和错误日志如果能有条件查看。使用-rate参数限制速率。技巧针对大型目标可以将目标列表分割在多台VPS上同时进行低强度扫描。被WAF/IPS完美拦截所有主动探测请求都返回相同的错误页面或状态码如403 503工具特征被识别。排查手动用浏览器访问一个不存在的路径如/random-12345.html如果返回的页面和工具探测到的“404”页面一模一样但与你正常访问的404页面不同很可能请求在到达应用前就被WAF拦截了。技巧更换工具和指纹使用nmap的--script-args http.useragent修改UA使用ffuf的-H参数自定义Header模拟真实浏览器。使用编码和混淆对扫描路径进行URL编码、双URL编码、甚至Unicode编码有时可以绕过简单的规则匹配。利用边缘节点如果目标使用了CDN如Cloudflare尝试寻找其真实的源站IP通过历史DNS记录、SSL证书关联IP、邮件服务器IP等方式直接对源站进行测试可能绕过CDN的WAF。信息过载与无效数据工具跑完后面对成千上万的子域名、端口、URL不知从何下手。技巧自动化过滤和分类。写简单的脚本或用awk、grep命令处理结果。例如从httpx的输出中快速过滤出状态码为200且标题中包含“登录”、“admin”、“dashboard”的URL从nmap输出中提取所有版本号包含特定年份如2018的服务。聚焦于“异常”和“敏感”信号。忽略“非标准”端口只盯着80 443 8080 忽略了其他端口上运行的Web服务。技巧在端口扫描阶段对所有开放端口不仅仅是80 443进行HTTP/HTTPS协议探测。使用nmap -sV --scripthttp-title -p portlist或者用httpx直接对ip:port格式的列表进行探测。5.2 从防御者视角反思如何做好自己的资产梳理作为一个经常扮演“攻击者”的测试者从防御视角思考能让你对情报收集有更深的理解。企业该如何应对定期进行“自我测绘”使用相同的工具Shodan Censys Amass从外网视角扫描自己的公网IP和域名看看攻击者能发现什么。这比任何内部资产清单都更真实。收敛攻击面非必要不暴露数据库、中间件管理后台、监控系统等严禁直接暴露在公网。必须通过VPN或零信任网络网关访问。最小化信息泄露关闭不必要的服务器标识如Server: Apache/2.4.1、框架调试信息。自定义错误页面避免泄露路径或堆栈信息。清理“僵尸资产”及时下线不再使用的测试域名、废弃的云主机。这些是最容易被遗忘的突破口。监控与告警DNS监控监控非预期的子域名解析记录创建防范子域名劫持或员工误操作。证书透明日志监控监控是否有未经授权为你域名签发的SSL证书。GitHub等代码平台监控设置告警当出现公司相关代码、密钥等信息时及时通知安全团队。强化外围防御部署WAF并合理配置规则不仅能防御攻击也能识别和拦截恶意的扫描探测。网络层限制对管理端口SSH RDP等实施IP白名单访问控制。情报收集是一场信息博弈的序幕。它枯燥、繁琐需要极大的耐心和细心但它的质量直接决定了后续渗透测试的效率和成功率。一个优秀的渗透测试员必然是一个出色的“情报分析师”。他不仅会使用工具更懂得在工具的噪音中辨别信号在海量的数据中连接线索最终从目标的数字阴影中勾勒出一条清晰的攻击路径。记住你的目标不是制造最多的请求而是获取最有价值的信息。在接下来的系列中我们将带着这份精心绘制的地图进入漏洞挖掘的实战环节。