1. 项目概述从“秘籍”到“基本功”的认知重塑看到“搞渗透还不会信息收集的看这里大佬的秘籍”这个标题很多刚入门的朋友可能会眼睛一亮以为找到了什么可以一键通天的“神器”或“捷径”。但作为一个在安全领域摸爬滚打多年的从业者我必须先泼一盆冷水信息收集从来不是什么“秘籍”而是渗透测试乃至整个安全防御体系中最基础、最核心、也最考验耐心的“基本功”。所谓“大佬的秘籍”不过是他们把那些枯燥、重复、看似不起眼的步骤做到了极致并形成了自己系统化的思维框架和自动化的工作流。信息收集专业术语叫“侦察”或“情报收集”是整个渗透测试生命周期PTES的第一步也是决定后续所有行动成败的基石。它的目标很简单在不直接接触目标系统的情况下尽可能多地获取关于目标的一切信息。这些信息就像拼图碎片收集得越多、越全你最终拼出的目标画像就越清晰发现的攻击面也就越广。很多人觉得渗透就是拿着扫描器扫端口、上漏洞利用工具这种想法非常危险且低效。没有高质量的信息收集你的攻击就像蒙着眼睛在迷宫里乱撞不仅效率低下还极易触发警报。那么信息收集到底要收集什么简单来说可以分为两大维度外部信息和内部信息。外部信息指从公开渠道、第三方视角能获取的一切比如域名、子域名、IP地址、关联公司、员工信息、技术架构、泄露的账号密码等。内部信息则是在获得一定权限后在目标网络内部进行的更深层次侦察比如主机信息、网络拓扑、共享资源、域环境信息等。今天这篇内容我们就聚焦在外部信息收集这个庞大而有趣的领域我会把我这些年从“脚本小子”到能够独立负责项目所积累的、真正实用的方法、工具链和思维模式系统地梳理给你。这不是一个工具列表而是一套可操作、可复现的工作流程。2. 信息收集的核心思路与框架设计在开始具体操作之前我们必须先建立正确的思维框架。漫无目的地使用工具只会产生大量无效噪音。高效的信息收集一定是目标驱动、层层递进、自动化与人工研判相结合的过程。2.1 明确目标与范围这是第一步也是最容易被忽略的一步。你需要问自己我的目标是什么是一个具体的域名如example.com一个IP段一家公司还是一个人授权的测试范围是什么是仅限*.example.com还是包括其控股子公司明确范围不仅能避免法律风险更能让你的精力高度聚焦。例如如果目标是example.com那么你的核心侦察范围就应该围绕这个主域名展开但同时你的思维要发散到与之可能关联的其他资产比如同根域名test.example.com,admin.example.com,dev.example.com等。兄弟域名同一家公司可能拥有example.net,example.org等。关联资产为目标提供服务的第三方云服务商、CDN、邮件服务商、客服系统等。历史资产已经被遗忘但未注销的旧域名、测试站点。2.2 分层收集策略我将外部信息收集分为四个层次像剥洋葱一样由外向内被动信息收集完全不与目标服务器产生直接交互。所有数据均来自公开渠道或第三方平台。这是最安全、最隐蔽的阶段也是我们应该投入最多时间的阶段。主要手段包括搜索引擎技巧、公开数据库查询、证书透明度日志、DNS历史记录、归档网站等。主动信息收集与目标资产进行有限的、正常的交互以获取更多信息。例如通过DNS查询获取记录通过访问网站获取HTTP头、robots.txt文件、常见文件等。虽然会产生日志但行为看起来像普通用户或搜索引擎爬虫。资产发现与枚举基于前两步的结果系统地发现所有属于目标的网络资产。包括子域名爆破、端口扫描、Web应用爬取等。这一步开始使用自动化工具会产生较明显的流量。漏洞信息关联将发现的资产域名、IP、服务、技术栈与已知的漏洞库、暴露的配置、泄露的凭证等信息进行关联分析初步评估攻击面。这个分层策略的核心思想是能用被动手段解决的绝不用主动手段能在外围摸清的绝不轻易触碰核心。很多新手一上来就搞全端口扫描不仅低效而且IP容易被封打草惊蛇。2.3 工具链选型原则工欲善其事必先利其器。但工具不是越多越好而是形成适合自己的、可串联的流水线。我的原则是本地化优先能本地部署、离线使用的工具优先于完全依赖网络的在线平台。这保证了工作的可重复性和在特定环境下的可用性。Kali Linux作为渗透测试的瑞士军刀发行版内置了大量此类工具。API集成善用各种安全平台、搜索引擎提供的API如Shodan, Censys, VirusTotal, GitHub将查询能力集成到自己的脚本中实现批量、自动化查询。自定义脚本对于重复性高的任务一定要编写脚本Python、Bash。这是从“工具使用者”进阶为“流程设计者”的关键。3. 被动信息收集在暗处观察目标被动收集是艺术的开始。这里分享几个我最常用且高效的方法。3.1 搜索引擎高级技巧Google、Bing、百度等搜索引擎是巨大的信息宝库关键在于如何使用搜索语法。Sitesite:example.com搜索该域名下的所有收录页面。这是最基本的。inurl / intitleinurl:admin site:example.com查找管理后台intitle:index of site:example.com查找目录遍历漏洞。filetypefiletype:pdf site:example.com查找所有PDF文件里面可能包含内部电话号码、邮箱、网络拓扑图。减号排除site:example.com -www排除www子域名的结果有时能发现非常规站点。关联搜索搜索目标公司的名称、邮箱后缀example.com、电话号码可能会在求职网站、文档分享平台、代码托管平台找到员工泄露的信息。实操心得不要只用一个搜索引擎。不同引擎的爬虫策略和收录结果差异很大。对于国内目标必应和百度的结果往往比谷歌更有价值。可以配合Search-Engines-Scraper这类工具进行多引擎聚合搜索。3.2 利用证书透明度日志证书透明度CT日志是为了监控SSL证书签发而设立的公共日志。每当一个域名申请了SSL证书其信息就会被记录在CT日志中。这成了我们发现子域名的绝佳途径。在线工具crt.sh是最知名的CT日志查询网站。直接搜索%.example.com可以找到所有为该域名及其子域名签发的证书记录经常能挖出很多连子域名扫描器都扫不到的“隐藏”资产比如内部系统、测试环境、预发布环境。工具集成amass、subfinder这类强大的子域名枚举工具其数据源之一就是CT日志。在配置时确保相关模块已启用。3.3 DNS历史记录与档案查询目标现在的DNS记录可能很干净但历史记录可能暴露更多。DNS历史使用SecurityTrails、ViewDNS.info等服务查询域名的历史A记录、MX记录、NS记录。你可能会发现目标以前将某个服务托管在某个IP上后来迁移了但那个IP上可能还运行着其他未被发现的资产。网站档案Wayback Machinearchive.org保存了海量网站的历史快照。你可以查看目标网站几年前的样子也许那时存在敏感文件如phpinfo.php、backup.zip的链接或者暴露了旧的API接口、管理路径。使用工具如waybackurlsGo语言编写可以快速提取某个域名在档案馆中的所有历史URL再进行筛选。3.4 代码仓库与敏感信息泄露这是近年来导致安全事件的高发区。开发人员无意中将含有密码、API密钥、云服务凭证的代码上传到了公开的GitHub、GitLab、Bitbucket等平台。手动搜索在GitHub直接搜索公司名、域名、项目名。使用高级搜索语法如filename:.env example.com搜索可能包含环境变量的文件。自动化工具truffleHog、gitrob等工具可以自动扫描Git仓库历史寻找高熵字符串可能是密钥和敏感关键词。Gitleaks也是一个非常高效的本地扫描工具。扩展范围不要只盯着GitHub。搜索example.com在Pastebin、Ghostbin等代码粘贴网站上的记录运维人员可能临时把配置或日志贴了上去忘了删。4. 主动信息收集与资产枚举在被动收集到足够多的“线索”后我们可以开始进行一些低交互度的主动探测。4.1 子域名枚举的综合战术子域名枚举是资产发现的核心。单一方法效果有限必须多管齐下。字典爆破使用强大的字典和工具进行子域名爆破。工具首选amass它集成了数十种数据源被动DNSCT日志搜索引擎等和爆破功能。subfinder也是一个优秀的被动收集工具。对于爆破字典的质量至关重要。推荐使用commonspeak2、assetnote的词汇表并结合目标业务特点自定义字典如产品名、城市名、部门缩写。# 使用 amass 进行综合枚举示例 amass enum -passive -d example.com -o passive_subs.txt amass enum -active -d example.com -w ./wordlists/subdomains.txt -o active_subs.txt泛解析识别与处理如果目标设置了DNS泛解析*.example.com都解析到同一个IP爆破会产生大量无效结果。需要先识别随便请求一个不存在的随机子域名如random123456.example.com如果返回IP则很可能存在泛解析。处理方法是在爆破时对比返回的IP如果所有子域名都指向同一个IP则将其过滤掉。递归枚举对发现的一级子域名如dev.example.com再次进行枚举可能发现更深层的二级子域名如jenkins.dev.example.com。amass的-brute模式支持递归。4.2 端口扫描与服务识别确定了IP资产从子域名解析或直接给定的IP段后下一步是端口扫描。Nmap是毋庸置疑的王者。扫描策略初步快扫nmap -sS -T4 --open -Pn target。使用SYN半开放扫描-sS速度较快-T4只显示开放端口--open跳过主机发现-Pn假设主机在线。快速摸清开放端口情况。服务版本探测对开放端口进行nmap -sV -sC -p port_list target。-sV探测服务版本-sC运行默认的Nmap脚本能获取大量有用信息如HTTP标题、SSH主机密钥、SMB共享列表等。全端口扫描在时间允许或目标范围较小时可以进行nmap -sS -T4 -p- target的全端口1-65535扫描。注意这比较耗时且流量明显。结果处理将Nmap的XML输出-oX result.xml导入到nmap-parse-output或直接使用grep进行筛选快速整理出所有开放的HTTP/HTTPS服务、数据库端口、特殊服务端口等。注意事项端口扫描是攻击性很强的行为极易被IDS/IPS检测到。在授权测试中也要注意扫描频率避免对目标业务造成影响。可以尝试使用-f分片、--data-length附加随机数据、--scan-delay设置延迟等参数来规避一些简单的检测。4.3 Web应用信息收集对于开放的80/443等Web端口需要进一步收集应用层信息。基础信息HTTP头使用curl -I获取响应头查看Server服务器类型、X-Powered-By后端语言、Set-Cookie会话信息等。文件与目录检查robots.txt、sitemap.xml、crossdomain.xml、clientaccesspolicy.xml。尝试访问常见备份文件、管理入口、配置文件如.git/、.svn/、admin/、phpinfo.php、web.config.bak等。工具如dirsearch、gobuster、ffuf可用于目录爆破。ffuf -w /path/to/wordlist.txt -u https://target/FUZZ -mc 200,301,302,403技术栈识别Wappalyzer / WhatWeb浏览器插件或命令行工具可自动识别网站使用的技术如前端框架、JavaScript库、CMSWordPress, Joomla、服务器软件、数据库等。指纹识别根据特定的文件、路径、Cookie名、HTML特征来识别应用。比如/wp-admin/指向WordPress/console/可能指向WebLogic。有丰富的开源指纹库可供使用。内容抓取与链接提取使用gospider、hakrawler或katana这类爬虫从初始页面开始爬取整个站点的链接包括JS文件中的路径、注释中的信息等。这有助于发现隐藏的API端点、测试页面。5. 信息整理、关联分析与攻击面绘制收集到海量数据后如何将其转化为可行动的“情报”是关键的一步。切忌让数据躺在不同的文本文件里睡大觉。5.1 数据归一化与去重将不同工具amass, subfinder, nmap, dirsearch等的输出结果统一整理到一个结构化的数据中。通常我会创建一个项目目录并用一个主笔记或电子表格来管理。子域名与IP将所有的子域名和对应的IP地址、CDN信息整理在一起。使用dnsx、massdns工具对子域名列表进行批量解析并识别出使用CDN如Cloudflare, Akamai的域名这些域名的真实IP需要额外花心思寻找。端口与服务将Nmap的扫描结果按IP地址归类列出所有开放端口及运行的服务、版本信息。Web应用为每个Web服务http://ip:port或https://subdomain单独建立档案记录其技术栈、发现的目录、参数、可能的框架等信息。5.2 可视化与关联分析人是视觉动物一张图胜过千言万语。网络拓扑图使用draw.io或Lucidchart手动绘制或者利用BloodHound针对内网域环境这类自动化工具。将核心资产如核心服务器、数据库、边界设备、网络区域DMZ, 内网及其连接关系画出来。攻击面地图这是我个人非常推荐的方法。创建一个电子表格或使用Obsidian、Notion这样的知识管理工具。以“资产”为核心关联所有信息资产 (URL/IP:Port)服务/应用技术栈发现漏洞/弱点关联凭证备注https://admin.example.comWeb管理后台Nginx 1.18, PHP 7.4弱密码无需爆破10.0.1.12:22SSHOpenSSH 8.2版本较新无已知洞泄露的私钥关联员工GitHubhttps://api.example.com/v1REST APINode.js未授权访问API Key泄露测试/v1/users端点5.3 脆弱性初步评估在整理过程中就要开始用攻击者的思维去评估每个资产。版本比对将收集到的软件/服务版本如Apache 2.4.49, OpenSSL 1.1.1l与公开的漏洞库如CVE数据库、Exploit-DB进行比对。工具如nmap的漏洞脚本--script vuln或vulners脚本可以辅助但人工复核必不可少。配置缺陷模式匹配根据经验匹配常见的不安全配置。例如HTTP方法允许了PUT、DELETE。目录列表未禁用。错误信息泄露了堆栈跟踪。使用了默认的账号密码或路径。凭证测试将之前从泄露库、GitHub中找到的疑似账号密码、API密钥在对应的登录入口、API接口进行测试。可以使用Burp Suite Intruder或hydra进行自动化批量测试但务必注意账号锁定策略。6. 高阶技巧与自动化工作流搭建当基本流程熟悉后你需要追求效率和深度建立自己的“武器库”。6.1 打造自动化侦察流水线手动执行上述步骤是低效的。我使用一个简单的Shell脚本或Python脚本作为调度器将工具链串联起来。核心思路是被动收集 - 子域名枚举 - 解析与去重 - 端口扫描 - Web探测 - 结果聚合。一个简化的流水线示例#!/bin/bash DOMAIN$1 echo [] 开始对 $DOMAIN 进行侦察... echo [] 1. 被动子域名收集... subfinder -d $DOMAIN -silent | anew subs_passive.txt amass enum -passive -d $DOMAIN -o subs_amass_passive.txt cat subs_passive.txt subs_amass_passive.txt | sort -u all_subs.txt echo [] 2. 解析子域名并筛选出有效IP... cat all_subs.txt | dnsx -silent -a -resp-only | sort -u ips.txt # 识别并过滤CDN IP (这里需要一份CDN IP段列表) # ./filter_cdn.sh ips.txt real_ips.txt echo [] 3. 对真实IP进行快速端口扫描... nmap -sS -T4 --open -iL real_ips.txt -oG nmap_quick.gnmap echo [] 4. 提取Web服务... cat nmap_quick.gnmap | grep -E (80|443|8080|8443)/open | awk {print $2:$3} | sed s/\/.*// web_targets.txt echo [] 5. 对Web服务进行指纹识别和目录扫描... cat web_targets.txt | while read url; do whatweb $url --log-verbosewhatweb.log dirsearch -u $url -e php,asp,aspx,jsp,html,zip,bak -o dirsearch_$(echo $url | tr /: _).txt done echo [] 侦察流水线执行完毕。这只是一个起点。你可以用Python的subprocess模块实现更复杂的逻辑加入错误处理、并发控制、结果存入数据库如SQLite等。6.2 寻找真实IP绕过CDN很多网站使用CDN服务这隐藏了服务器的真实IP。找到真实IP是直捣黄龙的关键。历史DNS记录如前所述查看SecurityTrails等的历史A记录可能在启用CDN前域名直接解析到真实IP。子域名探测主站用了CDN但很多子域名特别是内部系统、测试环境、邮件服务器mail.example.com可能没有配置CDN直接指向真实IP。这些IP可能与主站在同一个C段。SSL证书关联如果目标为多个域名使用同一张SSL证书通过CT日志找到这些域名其中可能有不经过CDN的从而找到IP。邮件服务器追踪给目标域名下的邮箱如infoexample.com发一封邮件查看邮件头中的Received字段可能包含发件服务器的内部IP。第三方服务漏洞目标可能在云服务商如AWS S3、Azure Blob上存储资源通过扫描相关的域名如s3-example.com或利用配置错误可能获取到IP信息。6.3 关注“外围”与“旁站”目标本身防守严密时可以尝试攻击其供应链或关联资产。旁站攻击同一个IP上可能托管了多个不同公司的网站虚拟主机。如果目标站点A安全但同IP的站点B存在漏洞如SQL注入攻破B后可能通过服务器权限提升进而影响到A。供应链攻击目标使用的第三方服务商客服系统、统计平台、评论插件、字体库如果存在漏洞或被攻破也可能成为进入目标的跳板。收集目标网站引用的所有第三方JS、CSS、字体等资源评估其安全性。7. 常见问题、思维误区与避坑指南最后分享一些我踩过的坑和常见的思维误区希望能帮你少走弯路。Q1工具扫不出任何子域名/端口是不是目标太安全了A首先检查你的工具字典是否合适。对于特定目标通用的字典可能无效。尝试结合目标业务名称、产品名、所在地等生成自定义字典。其次检查网络环境你的IP是否被目标或数据源如SecurityTrails API限制了最后考虑被动收集是否充分可能目标资产主要存在于内网或使用了非常规的域名格式。Q2信息收集阶段到底要花多少时间A这是一个“二八定律”的完美体现。80%的高价值信息可能在你投入的前20%时间里就找到了。但剩下的20%的深度信息可能需要你花费80%的时间去挖掘。在实战中需要根据项目周期和目标价值来平衡。对于重要目标信息收集应贯穿整个项目始终不断循环、深化。Q3收集到大量数据感觉无从下手怎么办A这是典型的信息过载。回到原点明确你的核心目标。如果是Web渗透就聚焦在Web资产上优先处理那些运行着已知框架如Struts2, ThinkPHP、存在弱口令或暴露管理后台的服务。建立优先级矩阵影响范围大、利用难度低的资产优先处理。Q4使用自动化工具会不会违法A任何未经授权的测试都是非法的。这里讨论的所有技术和工具都必须在获得明确书面授权的范围内使用或者在你自己完全可控的实验环境如靶场、虚拟机中练习。公开网络上的随机扫描是违法行为且会对你个人的职业生涯造成毁灭性影响。思维误区纠正误区一“最好的工具是那个功能最多的。”不对最好的工具是那个你最熟悉、最能融入你工作流的。把nmap的常用参数玩透比浅尝辄止地用十个扫描器更有效。误区二“信息收集就是工具输出结果的堆砌。”大错特错。工具输出的是“数据”经过你的分析、关联、推理后形成的“情报”才是价值所在。人的思维永远是核心。误区三“这个站点有WAF没法搞。”WAF是防护手段不是无敌屏障。信息收集阶段WAF可能隐藏了某些错误信息但通过仔细分析响应差异、寻找未受WAF保护的端点如API接口、移动端接口、或利用WAF规则本身的特性往往能找到突破口。对WAF的识别和绕过本身也是信息收集和后续攻击的重要课题。信息收集是一场耐心与细致的较量它没有炫酷的漏洞利用瞬间却决定了后续所有行动的效率和成功率。把它内化成一种本能你的渗透测试之路才算真正入门。真正的“大佬秘籍”就是这份对基础工作持之以恒的敬畏和深耕。