说起网络安全攻防,很多人第一反应是漏洞利用、打点拿权限的画面。但真正参与过一次攻防演练或者去SRC漏洞平台做过测试的人,几乎都会有一个共同的感受:信息收集才是整条链路里最耗时、也最决定成败的环节。目标都没搞清楚就急着上工具,通常只会得到两种结果,要么扫了一堆根本不在授权范围内的无用资产,要么刚动手就被对方的防护策略拦下来,连门都摸不到。这篇文章把信息收集阶段从思路、工具到整理方法完整拆开讲一遍,适合刚接触网络安全攻防、准备打CTF或者想参加校园攻防赛的新手。内容不涉及具体系统的攻击利用,只讲合法授权范围内如何把一个目标从零摸清楚,以及为什么这一步值得反复打磨。
1. 为什么信息收集是攻防演练里最不该省的一步
1.1 攻防流程中信息收集的位置
一次规范的攻防演练,流程大致是:授权确认、信息收集、漏洞探测、漏洞验证与利用、权限控制、痕迹清理、报告编写。信息收集排在授权确认之后,是所有技术动作的起点。很多新人容易犯一个错误,觉得信息收集就是跑几个命令,随便扫一扫就完事,真正的好戏在后面。可现实是,目标如果是一栋大楼,信息收集阶段就是在画建筑图纸。图纸上哪里是正门、哪里是消防通道、哪里堆着易燃物、哪里装着摄像头,全靠这一步摸清。没有图纸就开始施工,后面每一步都会撞墙。
我在带新人时特别喜欢用“侦察兵”来类比信息收集。战场上侦察兵的工作不是自己拿枪去冲锋,而是把地形、兵力部署、通信手段、薄弱环节摸清楚,让后方指挥员能够做决策。攻防演练里的信息收集就是侦察兵的工作。你后面选择哪个漏洞去尝试、构造什么样的利用链、怎么绕过防护,依据全来自前期信息收集的结果。跳过这一步直接上扫描器,跟蒙着眼睛打靶没有本质区别。
1.2 信息收集结果如何影响后续渗透路径
信息收集的质量直接决定后续漏洞利用的命中率。举几个最简单的对应关系:如果发现目标开放了3306端口,说明大概率存在MySQL服务,后面要重点关注数据库弱口令和数据目录泄露;如果发现Web前端是ThinkPHP框架,后面就要重点排查该框架的历史漏洞;如果发现目标官网暴露了内部邮箱和人员姓名,后面可能需要考虑钓鱼邮件这类社工手段。以上方向全部来自信息收集,没有这些信息,就只能用最笨的字典盲目碰撞,成功率低、动静还大。
在SRC漏洞挖掘的场景里,信息收集决定你是否能找到别人没发现的边角资产。主站通常有成熟的安全团队守着,漏洞不好挖,但一些老域名、测试站点、内部系统映射到公网的入口,防护往往很薄弱。这些入口怎么发现?靠的还是信息收集时对子域名、历史DNS、备案信息、搜索引擎快照的仔细梳理。说白了,信息收集做得越细,你看到的攻击面就越大,手里可打的牌就越多。
1.3 授权与边界:先讲法律再讲技术
聊信息收集,必须先讲资格。网络安全攻防相关技术的练习,只能在你自己拥有资产的目标、获得书面授权的目标、公开的CTF靶场以及SRC平台明确允许测试的范围内进行。未经授权对任何网络资产进行扫描、探测、连接,本身就已经越过了法律边界,即使你什么都没利用、没破坏,仍然可能构成违法行为。这一点不是套话,是每一位从业者都必须刻在脑子里的底线。
我在和新人协作开发渗透测试/信息安全相关工作内容时,第一件事就是让每个人确认自己手上的“许可证”在哪里。如果是在企业的攻防演练中,要有明确的书面授权,写清楚允许测试的时间段、目标IP或域名范围、是否允许主动扫描、发现漏洞后对数据怎么脱敏。如果是个人练习,请老老实实去公开靶场或CTF平台。后面文章里出现的所有命令,都只在你确认有权限的目标上运行。希望读到这里的人先把这个意识立住,再往下操作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 被动信息收集:不接触目标也能攒出一份情报档案
2.1 企业公开信息与WHOIS查询
被动信息收集的核心是不直接访问目标系统,而是利用公开数据源把目标“拼”出来。第一步通常是域名信息。WHOIS是查询域名注册信息的公开协议,在Linux终端里直接执行:
bash复制whois example.com
命令返回的内容里,重点看注册商、注册时间、过期时间、域名服务器(NS)记录等。例如,域名服务器如果全部指向Cloudflare这类CDN服务商,说明源站IP大概率被隐藏了,后面主动扫描时就不能被CDN节点误导;注册时间很久但业务页面却很新,可能是历史资产;某些域名开启了隐私保护,注册人信息看不全,那就需要通过其他渠道交叉比对。
企业公开信息还包括ICP备案信息、招投标信息、招聘信息里的技术栈描述。很多公司会在招聘JD里写“负责维护Nginx集群”“熟悉Kubernetes运维”,这些信息别看太细,但能帮你拼出目标的技术架构。这部分信息全部来自合法公开渠道,不需要对目标发起任何连接,适合作为整套工作的第一步。
2.2 子域名与历史DNS记录的收集思路
主站的防护通常最严密,但子域名是暴露面的大头。很多公司的某个老项目会单独开一个子域名,部署完以后没人维护,安全补丁多年不更新,成了整个防线上的短板。子域名收集有几个常用来源,最常见的是证书透明度日志,因为HTTPS证书在签发时会被记录到公开的日志中,查询域名对应的证书记录就能带出一串子域名。现在最方便的查询入口是crt.sh,浏览器打开或者用接口拉取都行:
bash复制curl -s "https://crt.sh/?q=%25.example.com&output=json" | jq -r '.[].name_value' | sort -u
这条命令会把example.com下所有出现在证书日志里的域名列出来,包括可能被遗忘的子域。有的子域名已经不再使用,但证书仍然有效,这就是潜在的攻击面。历史DNS记录同样值得关注,比如目标现在的IP挂在CDN后面,但一年前可能直接暴露过源站IP,通过历史DNS查询平台可以找到旧记录。这类数据属于第三方公开情报,用来做资产梳理没有任何问题。
2.3 搜索引擎与网络空间测绘的巧用
搜索引擎不只是用来搜网页的,信息收集阶段它是最好的“公开数据库”。用Google或百度搜索特定语法,可以精准命中目标泄露出来的文件、后台地址、上传接口。常见的语法组合有:
text复制site:example.com filetype:doc
site:example.com inurl:admin
site:example.com intitle:后台
重点不是记住那几条语法,而是理解背后的逻辑:你是在把目标已经放到公网上的碎片信息重新找出来。比如某个员工十年前上传过一份内部网络拓扑文档,文件被搜索引擎收录但从未被清理,这就是非常关键的情报。
网络空间测绘是更进阶的信息源,Shodan、Censys、ZoomEye这类平台持续扫描全网IP,把端口、服务、产品版本做成索引。被动收集阶段可以在测绘平台上搜索目标的IP段或域名,看看哪些端口对外开放过、暴露过什么样的服务。需要注意,这类平台显示的数据可能有时间差,但它能告诉你目标网络曾经的暴露面,在判断历史变化时很有价值。
2.4 被动收集阶段的信息整理
被动收集做完后,强烈建议立刻整理成一张资产清单,别等着主动扫描完再一起整理。表格列可以包括:序号、资产名称、域名、IP、开放端口/服务、来源渠道、备注。来源渠道很重要,记录每一条信息是从WHOIS、证书日志、搜索引擎还是测绘平台拿到的,后续发现矛盾时可以追溯。我自己常用的方式是先写一个Markdown表格,数据量大了再迁移到Excel里。整理的目标只有一个:让下一次查询某个资产时,能在一分钟内找到所有相关记录,而不是重新翻一遍历史命令。
3. 主动信息收集:从探测到指纹识别
3.1 为什么主动探测要控制频率
被动信息收集攒出了大概的资产地图,接下来就进入主动阶段。主动阶段意味着你会直接向目标发送探测流量,目标的安全设备、日志系统都看得见。在授权范围内做这事儿完全OK,但节奏要克制。原因很简单:对方是有防护体系的,扫描器一顿狂扫很容易触发告警,导致IP被封禁,后面真正的测试还没开始就被踢出局。哪怕是在自己搭的靶场里,我也建议从一开始就养成控制频率的习惯,因为现实攻防中没人会给你无限次重来的机会。
控制频率的方式包括:选择合适的扫描速率参数、将扫描时间安排到业务低峰期、先把目标按优先级排序而不是全量盲扫。简单说,主动探测不是比谁跑得快,而是比谁跑得准。
3.2 主机存活与端口扫描
端口扫描是主动信息收集绕不开的一环。Nmap是最常用的工具,第一步先做主机发现,确认哪些IP是存活的:
bash复制nmap -sn 192.168.1.0/24
注意,-sn只做主机存活探测,不会扫描端口,动静相对小。确认存活后再做端口扫描。对授权目标,我建议先用常用端口列表快速扫一遍,拿到初步结果后再对重点主机做全端口扫描,而不是一上来就-p-全端口扫。命令参考:
bash复制nmap -sS -sV -T3 -p 80,443,8080,3306,3389,22 target
-sS是TCP SYN扫描,速度快、不完全建立连接,但需要root权限。-sV表示探测服务版本。扫描结果要保存文件:
bash复制nmap -oA recon_target target
-oA会同时输出三种格式,方便后面写报告和交叉比对。扫描出来的端口,重点看那些不常见的组合,比如一台Web服务器居然开放了3389远程桌面端口,或者开放了一个高端口的MySQL服务。这些异常点恰恰是后续可能要深入的方向。
3.3 服务版本识别与指纹判断
仅仅知道端口是开放的不够,你还需要知道这个端口后面跑的是什么服务以及具体的版本号。Nmap的-sV参数会做一轮服务探测,比如它可能返回:
text复制80/tcp open http nginx 1.14.0
443/tcp open ssl/http Apache httpd 2.4.29
有了服务名称和版本号,后面就能去对应公开漏洞库查询历史漏洞。除了Nmap,还需要手动抓取Web服务的响应头,来验证其真实指纹。最直接的方式:
bash复制curl -I https://target
响应头里的Server字段会显示Web中间件类型,X-Powered-By字段可能显示PHP版本,Set-Cookie字段也能透露一些后端信息。很多框架会在页面源码里留下特征,比如WordPress的wp-content目录、ThinkPHP的版本号路径、Spring Boot的默认错误页样式。这些特征看多了,一眼就能认出个大概。如果需要批量判断Web指纹,可以用WhatWeb这类工具:
bash复制whatweb https://target
需要提醒一句,服务版本识别存在误报的可能。有些管理员会修改响应头来伪装真实指纹,所以不要完全信任单个来源,要拿多个特征交叉判断。比如版本号写的是nginx 1.14.0,但页面行为明显是现代版本的特性,这就该引起警惕。
3.4 目录扫描与Web应用特征获取
发现Web服务后,目录扫描是找后台和敏感文件的常见方式。目录扫描本质上是用字典枚举目标路径,观察响应码和响应体大小,来判断路径是否存在。常用的工具有gobuster、dirsearch、ffuf,命令类似:
bash复制gobuster dir -u http://target -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,bak,txt -t 50
这段命令用一个常见字典去枚举,同时尝试.php、.html、.bak、.txt结尾的文件。看到.bak后缀时眼睛要亮一点,备份文件经常包含源码或配置信息。目录扫描不是拿到结果就结束,还要会看响应状态码。200是存在且可访问,301/302是重定向,需要跟进一下最终跳转到哪里,403可能路径存在但设置了权限限制。有些路径虽然返回404,但报错信息里可能泄露了Web服务器类型或语言版本。
另一个不能忽略的步骤是查看网站的静态配置文件或者说约定俗成的入口文件:robots.txt、sitemap.xml,以及页面源码中的注释。有人会习惯性忽略这些文件,但我在实际项目里不止一次在robots.txt里看到测试后台路径,在页面注释里看到接口文档链接。Web应用特征收集做得越全,后面找脆弱点的方向就越明确。
4. 信息收集结果的整理与绘制资产地图
4.1 从零散数据到统一表格
信息收集做到这一步,手里已经有大量零散数据:WHOIS记录、子域名列表、端口列表、Web指纹、目录扫描结果、页面快照。如果不整理,这些数据就是一堆躺在终端和文本文件里的“死数据”。我见过太多新手,跑完几百个命令后,问他“目标有哪些关键资产”,他只能重新去翻历史记录。所以每到这个阶段,我都会建议花完整的时间专门做信息汇总,而不是“待会儿再说”。
整理时先做一个基础资产表,建议字段如下:
| 资产名称 | 域名/URL | IP地址 | 端口/服务 | 中间件/指纹 | 是否重点目标 | 备注 |
|---|---|---|---|---|---|---|
| 官网 | www.example.com | 1.2.3.4 | 80/443 | Nginx 1.18 | 是 | 套了CDN |
| 测试站点 | test.example.com | 1.2.3.5 | 8080 | Tomcat 9 | 是 | 路径下有admin |
| 邮件入口 | mail.example.com | 1.2.3.6 | 443 | 未知 | 待确认 | 证书过期 |
“是否重点目标”是我强烈建议每个人都要加的一列。判断标准包括是否暴露了后台入口、是否使用老旧组件、是否有敏感服务直接公网可达。这一列在后续分配精力时非常关键。
4.2 如何画出有效网络拓扑/攻击面地图
整理完表格,最好再画一张攻击面地图。所谓攻击面地图,不一定要画得多漂亮,重点是把自己收集到的信息放到结构化的位置上去。一个典型的企业Web系统,通常可以按这样的层级来组织思路:
text复制Internet -> CDN/WAF -> 负载均衡 -> Web服务器 -> 应用服务器 -> 数据库
把你的资产表映射到这个结构里去:哪些域名走CDN,哪些IP直连源站,哪些端口是从公网直达数据库的,哪些服务是边界设备暴露出来的。画这张图的过程,本质上是在帮自己建立“数据从哪里来、又流向哪里”的模型。后续做测试时,你看到某个漏洞第一反应不是“能不能拿shell”,而是“这个点处于资产链路的哪个位置,影响范围有多大”,这就是专业和业余的分水岭。
我习惯用普通的思维导图软件或者白板来完成这一步,不需要复杂的绘图工具。图中每一层旁边的资产要能对应到表格里的某一行,保持信息可追溯。如果某个资产找不到对应位置,说明还需要继续补充信息,而不是硬塞进图里。
4.3 信息收集报告该包含哪些内容
无论你是参加攻防演练还是准备SRC测试报告,一份合格的信息收集报告至少应该包含这几块内容:目标来源与授权依据、信息收集的时间范围、使用的方法和工具、发现的资产清单、关键风险点列表、后续测试建议。特别注意要写清楚时间范围,因为信息收集是快照式的结果,过了一个月之后端口和域名都可能变。
报告中“关键风险点”不等于漏洞,它更多是你基于资产信息做的风险预判。比如某个子域名解析到一个已被遗忘的服务器、某个后台入口直接暴露在公网、某份公开文档里出现了内部IP段,这些都应该单独列出来,标记为“待验证风险”。这一步做得到位,后面做漏洞验证时会省很多力气。
5. 新手在信息收集阶段最容易踩的坑
5.1 把主动扫描当成第一件事
我见过太多人拿到目标的第一反应就是打开Nmap全端口扫描。这种做法在攻防演练里非常容易出问题:一是目标可能有非常广的IP段,全端口扫描会产生大量噪声;二是很多资产不在授权范围内,主动扫描一旦越过范围,后面的测试资格都可能被一票否决。正确的顺序应该是先把被动收集做扎实,搞清楚目标资产边界,再从最小范围开始主动探测。用一句我常跟新人说的话来概括:先查户口,再敲门。
5.2 忽略时间戳与版本变化
信息收集的结果有时效性。云环境下,IP会弹性变化;业务更新后,某个端口可能在一夜之间关闭;CDN策略调整后,源站IP可能不再被历史DNS记录指向。我在实际项目里就遇到过这样的情况:第一次信息收集时目标开放着一组中间件服务,过了三天准备做验证,端口竟然全部变了,后来才发现对方在演练开始前做了安全加固。所以信息收集不是一次性动作,而是需要定期更新的过程。每次信息收集开始前,先确认上一轮的记录是否还成立,不要直接拿旧数据做测试依据。
5.3 收集结果不做交叉验证
单一数据源的结论往往不可靠。子域名收集时,crt.sh记录到的可能包含许多不再使用的泛解析记录;端口扫描时,可能因为网络丢包漏掉了某些端口;指纹识别时,对方可能伪造了响应头。处理办法就是交叉验证。子域名可以同时用证书日志、DNS历史、搜索引擎结果比对;端口是否开放可以用Nmap和实际访问验证;Web指纹可以用curl响应头、页面特征、证书信息三个维度判断。交叉验证不是浪费时间,而是把误判的概率压到最低。
5.4 工具输出堆砌但不分析
警惕一种现象:命令跑了一堆,工具输出保存了一堆文件,但最后根本没有把关键信息抽出来。工具的输出是原始素材,不是结论。分析的过程是从Nmap的端口列表里挑出非常规端口,从目录扫描的结果里区分哪些路径真的有业务价值,从子域名列表里找到属于同一业务线但维护程度明显更低的老项目。依赖工具本身不可能替你完成判断。每跑完一个工具,我都习惯问自己一句:这条输出里,哪些信息后续可能用得上?用不上的先归档,用得上的立刻写进资产表。
6. 从信息收集到下一步:如何选择攻击路径
6.1 根据暴露面确定后续测试重点
信息收集阶段结束后,你会看到很多“可打”的方向,但精力有限,必须有优先级。优先级怎么排?我的经验是看三件事:暴露程度、影响范围、利用难度。暴露程度指这个服务是否真的可以直接从公网访问;影响范围指如果这个点被突破,是否会影响核心业务;利用难度取决于技术栈的老旧程度和是否有现成的防护机制。三者都满足的方向优先尝试,只满足一项的先列为备选。
举个例子,如果开放了一个数据库端口且这个IP不在CDN后面,这就是典型的“高暴露、高影响”资产;如果发现一个内部后台但加上了一层额外的网关认证,那就是“高影响、中难度”;如果只是扫到一个普通测试页面,没有敏感功能,可以先放着,不用优先投入。
6.2 常见攻击入口与信息收集对应关系
这里把信息收集中的常见发现和后续测试方向的对应关系整理成一张表,方便你在实际项目中对照参考。注意,表里只列方向,不展开具体利用手段,真正做测试时还需要在授权范围内结合具体环境和工具自行完成。
| 信息收集发现 | 后续重点关注方向 |
|---|---|
| 子域名指向测试环境 | 测试环境可能未接入正式防护,优先考虑弱口令、未授权访问 |
| Web中间件或框架版本较老 | 查询该版本公开漏洞,判断是否可直接利用 |
| 存在admin或manager后台路径 | 登录认证逻辑、验证码强度、默认口令 |
| 公网开放数据库端口 | 是否可直连、弱口令风险、数据目录是否暴露 |
| 搜索引擎收录了内部文档 | 文档内部可能包含账号、IP段、网络拓扑线索 |
| 邮件系统暴露在公网 | 邮件服务版本漏洞、用户枚举、钓鱼入口 |
这张表的核心不是说遇到这些情况就一定有问题,而是提醒你,信息收集的每一条结论都应该指向一个有依据的下一步动作,而不是漫无目的地遍地撒网。
6.3 持续监控与信息更新
攻防演练不是一场静态的遭遇战,资产会随着演练推进发生变化:对方可能下线暴露的端口,也可能临时上线新的系统;源站IP可能切换,子域名可能新增。我在持续几周的攻防项目中,信息收集几乎每隔两三天就会重新跑一轮,尤其是被动数据,价格低、风险小,跑一下就有收获。可以写一些简单脚本,把crt.sh的证书日志查询做成定时任务,每周自动拉一次新增子域名;还可以把Nmap扫描结果和历史记录做差异比较,发现新增开放端口时立刻跟进。
其实信息收集做到后面,拼的不是谁的工具更多,而是谁的体系更完整。把流程固定在“先被动、后主动、再整理、定期更新”这个循环里,稳定的输出比灵光一闪重要得多。最后再分享一个我在实际项目中养成的习惯:每次信息收集结束后,除了资产表,再写一份“下次优先检查清单”,把本次发现但还没确认的疑点、新增的关注资产、可能需要重跑的数据源都记下来。这个小清单看起来不起眼,但真正遇到时间跨度长的项目时,它能帮你快速恢复记忆,不至于过一个星期就忘了当初为什么要重点关注某个子域名。把这些方法用熟,你会发现信息收集本身就是一场很有成就感的攻防游戏。
