20260303网安学习日志——信息收集一阶段
写这篇日志之前先说一下背景。我给自己定了个规矩:每周三固定输出一篇网安学习日志,用输出倒逼输入,免得光看视频不动手,学完就忘。今天是第一篇,正好赶上"信息收集"第一阶段的收尾,就把这块的完整思路、实操命令、踩过的坑一次性理顺。这篇日志写给两类人看:一是刚入行网安、正在找学习路线的零基础朋友,二是打算拿信息收集相关方向做网安毕设、需要一套可落地研究路径的同学。信息收集听起来简单,不就是查查资料嘛,但真正按渗透测试的标准去做,这套东西的深度和广度远超你想象。
1. 信息收集一阶段到底在"收"什么:先建全局观
1.1 信息收集在网安学习路线中的定位
如果把一次完整的渗透测试项目比作盖房子,信息收集就是打地基。地基不牢,后面所有环节——漏洞扫描、利用、权限提升、痕迹清理——全都建在沙子上。我见过不少新手一上来就急着学SQL注入、学反弹Shell,觉得那才叫"真本事",结果真正拿到一个授权目标时懵了:不知道该从哪里下手,也不知道哪些信息对后续攻击路径有用。
网安行业里有一句流传很久的话:信息收集的深度,决定了渗透测试的上限。这句话不是鸡汤,是我这段时间实操下来最真实的感受。学习路线层面,信息收集通常被拆成两个阶段:一阶段做"广度覆盖",目标是搞清楚目标暴露面和基本属性;二阶段做"深度定向",是针对具体目标资产做精准挖掘。这篇日志讲的就是一阶段——先把地图画出来,再谈怎么去走。
1.2 被动收集与主动收集的核心区别
一阶段信息收集首先要分清楚两个大类:被动信息收集(被动信息收集,Open Source Intelligence,简称OSINT)和主动信息收集(Active Reconnaissance)。
被动收集的核心原则是:不直接接触目标系统,只靠公开渠道、第三方平台、搜索引擎、证书透明度日志、DNS记录等"别人已经留存在互联网上"的数据做分析。优点是隐蔽性好,不会触发目标系统的告警;缺点是你只能拿到别人"不经意间暴露的东西",信息可能不完整。
主动收集则是直接向目标发起请求,比如访问目标网站、扫描端口、枚举子域名,优点是信息全面且实时;缺点是一旦目标部署了态势感知或WAF,你的扫描行为可能被记录甚至触发封禁。
两者的关系我用一个粗浅但好记的类比:被动收集像你在小区门口观察一栋楼的灯光、外卖配送记录、快递柜取件频率,判断里面住了多少人、作息规律;主动收集则是直接敲开门问"你家几口人、门锁什么牌子的",虽然问得清楚,但也暴露了自己。
在一阶段学习里,正确顺序是先被动、后主动,先用便宜的方式把基础数据攒齐,再决定要不要主动触碰目标。
1.3 一阶段信息收集的三个核心维度
我把一阶段要收的信息归纳成三个维度,这三个维度也是后续学习路线中反复用到的框架:
| 维度 | 目标 | 典型信息 | 工具/手段 | 对应阶段 |
|---|---|---|---|---|
| 组织维度 | 摸清目标单位/个人的基本盘 | 域名、备案、企业信息、员工邮箱、子公司关联 | ICP备案查询、天眼查、WHOIS、搜狗微信搜索 | 被动 |
| 资产维度 | 摸清目标数字资产的暴露面 | 子域名、IP段、端口、Web指纹、CDN、云厂商 | Subfinder、DNS解析、Nmap、WhatWeb、Fofa | 被动+主动 |
| 人员维度 | 摸清"人"这个最薄弱的环节 | 社交媒体、GitHub仓库、简历、公开文档 | GitHub搜索、Google Hacking、社工库(仅了解) | 被动 |
三个维度是递进关系:先确定组织,再枚举资产,最后落到人。人往往是整个链条里最容易被突破的环节,而GitHub这类代码托管平台又是技术人员信息暴露的重灾区,这也是为什么下面我会单独花一整章去讲GitHub信息收集。
2. 实操记录:从域名到指纹的完整链路
信息收集不能光啃理论,得真跑一遍。我把最近一次在授权范围内做的完整链路实操记录下来,用的都是合法合规、公开可查的数据源,目标是我自己搭的一个测试环境,顺便挂了一个备案在我名下的闲置域名,全程没有触碰任何未经授权的第三方系统。
2.1 第一步:确认组织和域名归属
动手前第一件事,是确认你要收集的目标到底属于哪个组织。很多人忽略这一步,直接拿一个域名就开始扫,结果扫到云厂商共享IP上去了,把别人家的服务当成了目标,既浪费精力,还容易越界。
我常用的操作流程是:
- 通过ICP备案查询,确认域名的备案主体,拿到公司全称。
- 用天眼查或企查查反查该主体名下的其他域名、子公司、关联企业。这一步能扩展出不少"意料之外"的资产——很多公司不同业务用不同域名,A站点的漏洞往往能从B站点的配置里找到线索。
- 用WHOIS查域名注册人信息。虽然现在隐私保护普及了,注册人邮箱大多打码,但注册时间、更新记录、注册商这些元数据仍然有价值。比如一个2005年注册的老域名,大概率有历史DNS记录可以挖掘。
一个实操细节:查备案的时候,PC端和移动端查出来的结果有时不一样,建议两个都查一次,顺便看看该主体有没有做过备案变更——变更记录里常常带着旧域名和旧联系方式。
2.2 第二步:子域名枚举——最值得花时间的环节
子域名收集是信息收集一阶段里投入产出比最高的动作。主域名往往是重点防护对象,但子域名经常是"捡来的孩子没人疼":测试环境、后台面板、内部系统、文档站点,全都挂在主域名下面,防护等级天差地别。
一阶段我用到的子域名枚举手段,按效率排序:
- 证书透明度日志(Certificate Transparency,CT):用crt.sh这个网站,输入主域名,就能把过去签过SSL证书的所有子域名列出来。这算是"被动收集"里最宝藏的数据源,很多人不知道它存在。
- Subfinder(高性价比):一款Go写的命令行工具,聚合了数十个公开数据源,运行几秒钟就能出一批子域名。
- DNS历史记录查询:利用SecurityTrails、ViewDNSInfo这类平台查历史DNS解析记录,能找到曾经解析到某IP的域名。对于老域名,历史记录经常能扒出已经不再公开暴露的子系统。
- 字典爆破:这一阶段我用的不多,因为这是偏主动的方式。工具比如Amass的爆破模式、ffuf配合子域名字典。属于"如果前三种没收获再上"的手段。
跑完子域名枚举后,用httpx批量做一次存活探测,把那些仍然返回TCP连接但HTTP无响应的主机标记出来——这些地方有时候藏着非Web服务,或者防火墙白名单之外的管理入口。
2.3 第三步:IP定位与CDN溯源
拿到子域名列表后,下一步是解析IP。但这里的坑非常多,我把一阶段遇到的问题列一下:
- CDN干扰:国内主流CDN厂商有:阿里云CDN、腾讯云CDN、网宿、Cloudflare等。如果域名解析到这些平台的节点IP,直接扫描是扫不到真实源站的。这时候要靠"历史DNS记录"来找CDN接入前的源站IP,或者用一些非常规手段(这里不提具体做法,避免被滥用)。
- 泛解析陷阱:有些域名开了"泛解析",随便输入一个不存在的子域名也会解析到某个固定IP。批量枚举时如果没过滤泛解析记录,会导致结果里混入大量"假资产"。
- IP段归属判断:解析出的IP要去确认ASN和运营商归属,比如属于阿里云的、华为云的还是某个IDC机房的。云上IP段往往是共享的,扫到的东西未必属于目标,分析和记录时要有意识地打上"共享资源"标签。
2.4 第四步:指纹识别——判断对方用了什么技术栈
指纹识别的目标,是确认目标站点用的Web服务器、后端语言、前端框架、CMS类型、WAF类别。知道了技术栈,后续找针对性漏洞的方向就清晰了。
一阶段里我用的组合是:
WhatWeb:命令行指纹识别工具,能识别几百种Web技术。对新手来说,一条命令跑完,输出里就带着CMS指纹、服务器类型、JavaScript框架信息。- Wappalyzer(浏览器插件):浏览目标站点时实时显示技术栈。优点是不用额外学习成本,缺点是只能覆盖已访问的页面。
Nmap的-sV服务版本探测:针对具体IP做端口服务识别。这个更适合放到后续的端口扫描环节,但一阶段也应该接触一下,因为很多公司只在特定端口开放了Web管理界面。
指纹识别有个经验技巧:别只探测首页,要找登录页、API接口文档页、静态资源路径(如/static/js/app.js)来交叉判断。首页可能做了强缓存或用了统一的框架壳子,但API接口的报错信息、JS文件的打包工具特征,往往能暴露更多底层信息。一次实测里,首页指纹显示"Web框架:未知",但/api/docs接口直接暴露了Swagger UI,后面的事大家都能猜到。
3. Windows主机信息收集:别只盯着Web打
很多人学信息收集,把精力全花在Web资产上,忽略了主机层面的信息收集。但在真实的攻防演练和红队评估里,Windows主机的信息收集往往是横向移动的起点。这也是热门搜索词里专门有"Windows主机信息收集"的原因。
3.1 为什么Windows主机信息收集如此关键
Windows在企业内网中的占比极高,OA系统、域控服务器、文件共享、业务数据库,十有七八跑在Windows上。一旦拿到一台Windows主机的权限,里面的本地信息可能直接帮你打通整个内网。这个思维和Web渗透完全不同——Web渗透是"从外往里打",主机信息收集是"从里往外扩"。
对于网安学习者来说,即使你现在还没有实战机会去接触真实内网,也应该先在虚拟机里把Windows环境搭建好,熟悉它的信息收集方法。这个技能在等保测评、应急响应、红队评估里都是必考项。
3.2 一阶段必须掌握的Windows信息收集点
第一阶段不要求你学会那些复杂的免杀和横向手法,但下面这些信息收集内容必须滚瓜烂熟:
| 信息类型 | 具体内容 | 常用命令 |
|---|---|---|
| 系统基本信息 | 主机名、系统版本、补丁信息、架构 | systeminfo、ver、wmic os get version |
| 网络环境 | IP地址、路由表、ARP缓存、DNS后缀、当前网络连接 | ipconfig /all、route print、arp -a、netstat -ano |
| 用户与权限 | 当前用户、本地用户、管理员组、登录会话、域关系 | whoami /all、net user、net localgroup administrators |
| 进程与服务 | 运行进程、服务列表、计划任务、启动项 | tasklist /svc、wmic service list brief、schtasks /query |
| 敏感信息 | 桌面文件、下载目录、配置文件、浏览器存储的凭据、Wi-Fi密码 | dir /s搭配关键词、netsh wlan show profiles |
一个比较容易被新手忽略的点:systeminfo的"修补程序"字段能直接判断这台主机缺了哪些补丁,很多老机器常年不打补丁,永恒之蓝这类漏洞一打一个准。
3.3 常用的信息收集承载工具:PowerShell
Windows环境下,PowerShell是信息收集的核心承载工具。我把一阶段需要熟练使用的PowerShell命令做了个精简清单:
Get-Acl:查看文件/注册表权限,找"权限配置不当"的目录。Get-ChildItem -Recurse:递归列目录,配合-Filter筛选包含password、secret、config等关键词的文件。Get-Process -IncludeUserName:查看进程对应的用户身份,辅助判断是否存在以高权限运行的第三方软件。Get-HotFix:比systeminfo更快地列出补丁更新记录。Get-NetTCPConnection:列出TCP连接和监听端口,能判断当前主机跟谁在通信、有没有可疑外联。
如果你不想一条条敲命令,可以下载集成好的PowerShell信息收集脚本,但一阶段我更建议你每条命令手动执行一遍,把每个字段的含义查明白。用脚本一下跑一百条命令的结果,你可能只记住了"看起来很多",却没学会"怎么读"。等手动跑熟了,再去用脚本节省时间,效果完全不一样。
3.4 Windows信息收集的常见坑
- 杀毒软件拦截:很多安全产品对
whoami /all、net user这类命令也做了行为监控,在高防护环境下会被拦截或告警。做学习实验时,建议先在一台无防护的隔离虚拟机里跑,真实的演练场景则需要提前确认授权范围和工具准入。 - 命令输出太长不会筛:
systeminfo的输出很长,新手容易迷失。可以用systeminfo | findstr /B /C:"OS Name" /C:"OS Version"这样按关键词过滤,快速定位关键字段。 - 只收集不分析:信息收集的产出不只是一份命令回显,而是一个结论。比如
ipconfig /all拿到了当前网段,你还要进一步思考:这个网段还有哪些主机?域控是否在这个网段?哪些端口是数据库端口?推理链比数据本身更重要。
4. GitHub信息收集:开源仓库里的"隐形资产"
GitHub信息收集是我最近才补上的一块拼图,也是热门搜索词里着墨较多的方向。为什么单开一章?因为在技术人员眼里,GitHub是一个代码托管平台;但在信息收集视角下,GitHub是一个巨大的、被公开索引的敏感信息泄漏池。
4.1 GitHub信息收集的原理:一切公开代码都可被检索
GitHub上有海量的公开仓库,很多开发者在公司项目里写代码时习惯性地把密钥、IP地址、内网域名、数据库连接串直接写进代码里,提交后就忘了清理。更麻烦的是,即使后来把代码改掉并删除了敏感信息,旧的提交(commit)依然留在Git历史里。
利用GitHub的代码搜索功能和第三方工具,可以把这些"不小心公开的信息"挖出来。我不打算在这里展开任何与漏洞利用相关的具体手法和平台攻击性操作,只从信息收集与安全防御的角度讲思路:当你写代码或者做代码评审时,应该意识到公共仓库内每一条代码记录,长远看都是可能被外部检索到的暴露面。
4.2 一阶段可以上手的GitHub信息收集思路
对于网安学习者,我建议你用自家或授权的开源项目做实验,练好下面这些基本的搜索思路:
- 基于关键词搜索:在GitHub搜索框里输入
"password" "username"、"api_key" "secret"这类组合,学习检索逻辑,理解哪些关键词组合更容易命中敏感信息。 - 利用限定语法缩小范围:GitHub支持的检索限定词非常多,比如
language:python "password"限定语言,org:某个组织名限定组织,extension:env限定只看.env文件。学会这些语法,你的搜索效率会大幅提升。 - 关注提交历史和Issue:仓库的提交历史里可能留有早期误提交的敏感文件,Issue讨论中也可能有人贴出过配置截图或环境变量。
- 关注Gist片段:Gist是GitHub的代码片段功能。很多人把临时测试用的密钥、配置片段贴成Gist却不设私密,这个搜索起来更容易命中。
我自己的一个实际操作案例:我从自己过往的一个开源小项目里,用搜索语法找到了两年前不小心提交进去的一个数据库测试连接串。这个连接串指向的数据库已经销毁,但如果这是一个生产环境的连接串,后果可想而知。
4.3 GitHub信息收集的学习路线建议
我个人建议的练习路径是:
- 注册一个全新的GitHub账号,开了二步验证之后,创建一个私有仓库,在仓库里故意提交一些包含"占位符密钥"、内网测试IP的代码,再用GitHub搜索看能不能搜到——通常在公开仓库里能搜到,私有仓库搜不到,这个对比能让你直观理解公开与私有的区别。
- 学会使用GitHub官方搜索文档,把语法过一遍。官方文档里对每种检索限定词的解释比任何教程都完整。
- 找一个你喜欢的知名度较高的开源项目,在它的Issue和Discussions里浏览,看看有没有开发者讨论过密钥轮换、安全配置等问题,学习他们是怎么做代码级安全防护的。
需要提醒的是:GitHub信息收集一旦越过"发现"的线,走到"利用泄露的凭据去登录系统",就必须要有明确的授权。学习阶段,请把所有练习放在自己的项目或明确的授权范围内。这条边界是网安从业者的职业底线,没有例外。
5. 网安毕设与学习路线:把信息收集变成可落地的研究方向
搜索热词里出现了"网安毕设",说明不少人正在为毕业设计发愁,想找既有技术含量又不至于深不见底的方向。我个人的判断是:信息收集方向作为网安毕设选题,是性价比很高的选择——它既有清晰的研究边界,又有大量可量化的评估指标,还不需要搭建特别复杂的攻防环境。
5.1 为什么信息收集适合做成网安毕设
信息收集类毕设的主流评价维度是"发现能力",也就是"你设计的系统/方法能不能比现有手段发现更多、更精准的暴露资产"。这个维度的优势是:
- 指标好量化:发现子域名的数量、指纹识别的准确率、敏感信息命中的精确率和召回率,全部可以量化。
- 数据集好获取:资产测绘领域有公开的数据集(如各大SRC平台的授权范围内资产),也可以自己搭建一套测试环境作为实验对象,不需要依赖特殊资源。
- 技术栈集中:主要涉及Python、HTTP请求、正则表达式、数据聚合,这些都是网安本科生已经掌握或能快速自学的技术。
5.2 三个可行的毕设方向与设计思路
方向一:企业资产暴露面自动化测绘工具。核心功能是输入一个主域名,自动完成子域名枚举、DNS解析、指纹识别、开放端口探测、证书信息提取,最终生成一份资产清单报告。设计上可以拆成四个模块:子域名收集模块、主动探测模块、指纹识别模块、报告生成模块。技术上的难点在于"多数据源聚合"和"结果去重",这些恰恰是答辩时能讲故事的点。
方向二:基于GitHub代码检索的组织信息泄漏巡检工具。设计思路是:输入一个组织的用户名,自动检索该组织名下的公开仓库,对仓库内的配置文件和文档做敏感信息模式匹配(比如高德Key、云厂商AccessKey、数据库连接串),生成泄漏告警清单。这个方向很贴近行业实际需求,因为很多企业已经在采购类似服务做暗网监测和GitHub泄漏监控。
方向三:基于被动数据源的资产发现与变化监测平台。这个方向更偏研究和数据侧,核心是持续采集证书透明度日志、DNS记录变化、搜索索引快照,分析目标资产的"生命周期变化",比如新上线了哪个子域名、哪个子域名即将过期、证书什么时候被替换。这类平台的基本逻辑跟业界的攻击面管理产品(ASM)方向一致,前沿性也够。
5.3 学习路线推荐的顺序与时间投入
基于我这段时间的个人安排,信息收集一阶段完整过一遍的合理时间周期是3周到4周,前提是每天保证1到2小时的专注实操时间。具体拆分:
- 第1周:学会被动收集三件套——WHOIS查询、证书透明度日志查询、ICP备案查询,每天做三个目标的查询练习并记录分析结果。
- 第2周:上手子域名枚举工具(Subfinder + crt.sh + httpx),练习批量存活探测和结果筛选,跑通一条"域名→子域名→IP→指纹"的完整链路。
- 第3周:Windows主机信息收集,在虚拟机里安装一个Windows Server和一个Windows 10,分别执行上面表格里的命令,学着做"收集并输出结论"的分析报告。
- 第4周:GitHub信息收集与个人沉淀,把你的所有命令和结果整理成模板,形成一套自己可以复用的"信息收集工作流"。
学完之后,如果你要做毕设,可以直接选取上面某一周的内容做深挖和系统化包装,半年时间绝对够。
5.4 毕设答辩时容易被问到的三个问题
提前预判答辩老师的提问方向,可以少走很多弯路。信息收集类毕设,以下三个问题大概率会被问到:
- 你的系统跟已有的开源工具(比如类似于Subfinder和Nmap组合的方案)相比,优势在哪里?这个问题考验你对现有工具边界的理解。回答模板:已有工具偏单点能力,我的系统做了多源聚合和结果归一化,减少了人工判定的工作量,并针对具体场景做了优化。
- 你的实验结果用什么指标来衡量?需要提前定义混淆矩阵里的TP、FP、FN是什么含义。比如子域名收集里,TP表示成功发现且真实存在的子域名,FP表示泛解析或第三方平台产生的误报,FN表示未发现的存量子域名。
- 如何保证你的工具不会被用于未授权场景?这个问题必须提前想清楚:你要从功能上增加授权校验机制(比如要求输入授权证明或限定测试域名列表),还是专门设计只做被动收集以降低风险——两种路径都有道理,但要能自圆其说。
6. 一阶段学习中我踩过的三个坑
日志的最后,记一下我在这段时间里踩过的坑和调整的思路。这些坑不一定有多高级,但真实踩过之后,它们比任何教程都让人印象深刻。
第一个坑:迷信工具,不读原始数据。最开始我跑Subfinder,一堆子域名瞬间出来,感觉非常痛快。但我根本不看证书透明度日志的原始查询结果,也不看DNS解析的原始终端输出,结果一次演示里被问到"这个子域名是从哪个数据源发现的",我答不上来。后来我强制自己每周至少做一次"纯手动"收集——不借助聚合工具,只用crt.sh网页、DNS命令行、搜索语法去手工收一个目标,把每个数据的来源链路写清楚。这个习惯让我的分析能力长了一大截。
第二个坑:忽略结果去重和存活验证。第一次做完整链路收集时,一百多个子域名里混了几十条泛解析记录和历史解析记录,我拿着这份"脏数据"去做后续步骤,白白浪费了大半天时间。后来我形成了铁律:子域名结果必须先过滤泛解析,再做HTTP存活探测,然后才进入指纹识别环节,顺序不能乱。
第三个坑:只收集,不记录,不沉淀。信息收集的结果如果不整理成结构化的报告,过两天你自己都忘了当时发现过什么。我现在维护一套模板化的记录文档,按"目标名称、数据来源、发现时间、资产URL、技术栈指纹、备注"六个字段做表格式归档。时间长了,这份归档本身就是一份很有价值的资产清单,后续做复盘、写报告、做毕设,全都能用上。
信息收集一阶段到这里告一段落,下一篇日志我计划按时间线推进到二阶段的深度定向技术,再补充主动探测和工具联动的内容。每周三见。