Web渗透测试信息收集实战:从域名到敏感信息的侦察技能树构建
1. 项目概述从零开始构建你的“侦察兵”技能树刚接触网络安全尤其是Web渗透测试的朋友常常会有一个误区觉得那些炫酷的漏洞利用、一键拿shell才是真本事。但真正在这个行业里摸爬滚打多年的老手都明白信息收集才是整个渗透测试流程的基石甚至决定了你后续所有行动的成败。你可以把它想象成一场战役前的侦察工作如果连敌人在哪、有多少兵力、有什么防御工事都搞不清楚就贸然发起冲锋结果可想而知。这个教程要解决的就是让你从零开始系统地学会如何当一个合格的“侦察兵”。我们不会一上来就讲复杂的漏洞原理而是聚焦于最基础、最核心的七个维度域名、端口、服务、指纹、旁站、CDN和敏感信息。这七个点几乎覆盖了一次标准信息收集流程的80%以上工作。掌握它们你就能对一个目标网站或系统建立起一个立体的、多维度的认知画像。无论是参加CTF比赛、进行授权的渗透测试还是仅仅为了提升自己的安全技能这套方法论都是你必须跨过的第一道门槛。接下来我会以一个虚拟目标example-target.com为例带你一步步拆解每个环节的工具、命令、思路以及我踩过的那些坑。2. 核心思路与侦察框架设计在动手之前我们必须先建立一个清晰的侦察框架。漫无目的地使用工具只会得到一堆杂乱无章的数据无法形成有效情报。我的核心思路是遵循“由外而内由广至深”的原则。由外而内指的是先从互联网公开信息OSINT入手再尝试与目标进行交互探测。比如我们先通过搜索引擎、域名注册信息Whois了解目标背景再通过DNS查询、端口扫描等技术手段进行主动探测。由广至深指的是先进行广度扫描发现所有可能的入口点如子域名、开放端口再对每一个入口点进行深度分析如服务版本、Web指纹、目录结构。这个流程可以形象地理解为先画地图再标出所有建筑最后进入每一栋建筑查看内部结构和有价值物品。基于这个思路我设计了一个标准化的侦察流程你可以把它保存为检查清单Checklist域名资产梳理确定核心目标域名并穷尽其相关的子域名、历史域名等。网络空间测绘针对发现的域名和IP进行端口扫描确定开放了哪些服务。服务与应用识别识别开放端口上运行的具体服务如Apache, Nginx, MySQL及其版本。Web应用指纹探测针对Web服务识别其使用的CMS如WordPress, Joomla、框架、前端组件等。关联资产发现寻找与目标在同一服务器旁站或同一IP段C段的其他资产。CDN与真实IP研判判断目标是否使用了CDN并尝试绕过CDN找到真实服务器IP。敏感信息泄露挖掘在GitHub、网盘、搜索引擎中搜索与目标相关的代码、文档、配置文件等。这个流程并非完全线性各环节发现的信息会相互补充和验证。例如在子域名扫描中发现的某个域名可能指向一个未使用CDN的IP从而帮助我们找到真实IP。3. 域名信息收集绘制目标资产地图域名是我们在互联网上定位目标最直接的标识。但一个企业或组织在互联网上的资产绝不仅仅只有一个主域名。我们的首要任务就是绘制出一张尽可能完整的“资产地图”。3.1 子域名枚举发现隐藏的入口子域名如admin.example-target.com,dev.example-target.com常常是开发、测试、管理后台的入口安全防护可能较弱。枚举子域名主要有以下几种方法1. 字典爆破这是最直接的方法使用一个庞大的子域名字典尝试拼接并解析。常用的工具有subfinder,amass,ksubdomain等。# 使用 subfinder (被动收集字典爆破) subfinder -d example-target.com -o subdomains.txt # 使用 ksubdomain (纯暴力爆破速度极快) ksubdomain enum -d example-target.com -b -o subdomains_ks.txt注意爆破会产生大量DNS查询请求务必在授权测试范围内进行并控制速率避免对目标DNS服务器造成压力。2. 证书透明度日志CT LogCA机构在签发SSL证书时会将记录公开到CT Log。我们可以从中提取为目标域名签发的所有证书从而发现子域名。crt.sh网站和amass工具都利用了这个来源。# 使用 amass 收集证书信息 amass enum -passive -d example-target.com -o amass_passive.txt3. 搜索引擎语法利用搜索引擎的site:语法可以搜索被收录的子域名。site:example-target.com此外还可以使用-www来排除主站有时能发现一些特别的结果。4. 聚合平台与数据源像SecurityTrails,VirusTotal,Shodan,Censys这样的平台聚合了海量扫描数据是绝佳的被动信息源。amass和theHarvester这类工具会集成多个这样的数据源进行查询。# 使用 theHarvester theHarvester -d example-target.com -b all -f output.html实操心得不要依赖单一工具。我通常的做法是先用amass或subfinder进行一轮被动收集不直接与目标交互再用ksubdomain进行一轮高性能字典爆破最后将结果合并、去重。你会发现不同工具的数据源有互补性。3.2 域名历史与关联信息域名本身也蕴含着信息。通过Whois查询我们可以获取注册人、注册邮箱、联系电话、注册商和DNS服务器等信息。这些信息可能用于社会工程学注册邮箱可能是员工邮箱格式如namecompany.com可用于猜测其他员工邮箱。关联资产发现同一个注册人/邮箱可能注册了其他相关域名。攻击面扩大历史DNS记录A记录、MX记录等可能指向一些已被遗忘但仍在运行的旧服务器。可以使用在线Whois查询网站或者命令行工具whoiswhois example-target.com此外查看域名的DNS解析记录A, AAAA, CNAME, MX, TXT等也至关重要。TXT记录中有时会包含SPF配置、验证代码甚至内部服务器信息。# 使用 dig 命令查询各种记录 dig example-target.com ANY dig example-target.com TXT4. 端口与服务探测敲开每一扇门拿到一批域名和对应的IP地址后下一步就是探测这些IP地址上开放了哪些“门”端口以及门后提供什么“服务”。4.1 端口扫描Nmap的进阶用法Nmap是端口扫描的瑞士军刀但很多人只停留在nmap -sS -p-。这里分享几个更高效、更隐蔽的姿势。1. 端口选择策略全端口扫描-p-在大型网络中非常耗时。更聪明的做法是常用端口扫描nmap -sS -sV --top-ports 1000。这1000个端口覆盖了90%以上的常见服务。结合服务版本的扫描-sV参数可以尝试识别服务版本这对于后续漏洞利用至关重要。UDP端口扫描不要忽略UDP像DNS53、SNMP161等服务运行在UDP上。但UDP扫描慢且不可靠应有选择地进行nmap -sU -p 53,161,123,137-139。2. 扫描速度与隐蔽性-T0-5设置时序模板。-T3是默认-T4更快但更易被察觉-T2或-T1更慢更隐蔽。--max-rate和--min-rate直接控制发包速率。-sS(SYN半开扫描) 比-sT(全连接扫描) 更隐蔽。在高度敏感的环境下可以考虑使用-sN(NULL扫描)、-sF(FIN扫描) 等但这些扫描方式对Windows主机无效且结果解析复杂。3. 输出与结果管理使用-oA basename输出所有格式正常、Grepable、XML便于用其他工具如grep 或者导入到Metasploit、Nessus进行后续处理。nmap -sS -sV -oA nmap_initial example-target.com4.2 服务识别与Banner抓取端口扫描确定了门牌号-sV探测给出了服务名称。但有时我们需要更详细的信息或者-sV没能识别出来。这时需要手动进行Banner抓取。使用Netcat或Telnet直接连接端口观察服务的欢迎信息nc -nv 192.168.1.100 22 # 可能输出SSH-2.0-OpenSSH_7.4p1 Debian-10deb9u7 telnet 192.168.1.100 80 # 连接后输入HEAD / HTTP/1.0 然后按两次回车 # 可能输出Server: nginx/1.18.0对于Web服务80/443curl和httpie是更好的选择可以查看完整的HTTP响应头其中常包含服务器软件、框架、编程语言等信息。curl -I http://example-target.com # 查看响应头 curl -s http://example-target.com | grep -i powered by # 在页面源码中查找特征注意事项有些服务会修改或隐藏Banner信息Banner Grabbing以增加识别难度。这时就需要依靠更高级的指纹识别技术。5. Web应用指纹识别看清对手的真面目确定了Web服务的存在下一步就是识别它具体是什么应用。是WordPress博客还是ThinkPHP开发的业务系统或者是自定义的Java应用不同的应用对应着不同的漏洞库和测试方法。5.1 指纹识别工具与方法1. 被动指纹识别通过分析HTTP响应头、Cookie、HTML源码中的特征字符串来识别。工具如Wappalyzer浏览器插件、WhatWeb等。# 使用 WhatWeb whatweb http://example-target.com -vWhatWeb会输出它检测到的所有组件包括CMS、JavaScript库、Web服务器、编程语言等非常全面。2. 主动指纹识别通过访问特定的文件或路径来判断。例如http://target/wp-login.php存在 → 可能是WordPress。http://target/admin/存在特定登录页面 → 可能是某种后台。http://target/console/存在 → 可能是JBoss或WebLogic。我们可以使用字典来爆破这些常见路径工具如dirsearch,gobuster,ffuf。# 使用 dirsearch 扫描常见路径和文件 python3 dirsearch.py -u http://example-target.com -e php,html,js -w /path/to/common.txt3. 指纹库的维护与更新指纹识别工具的核心是一个特征规则库。规则库的时效性非常重要。新的框架版本、旧框架的新特征都需要及时更新。关注工具的GitHub仓库定期更新。对于自定义系统可能需要手动分析总结其特征添加到自己的规则库中。5.2 针对特定CMS的深度信息收集如果识别出是常见的CMS如WordPress, Joomla, Drupal信息收集可以立刻进入“专项”模式。以WordPress为例版本确定查看页面源码的meta标签或访问/readme.html。版本号是寻找已知漏洞的关键。用户枚举访问/wp-json/wp/v2/users或/author/1这类路径可能泄露用户名。插件/主题枚举通过访问/wp-content/plugins/和/wp-content/themes/目录可以列出已安装的插件和主题。再用wpscan这类专用工具扫描已知漏洞。wpscan --url http://example-target.com --enumerate vp,vt,u实操心得指纹识别不是一次性的工作。在渗透测试的不同阶段随着你对目标了解的深入可能需要重新进行或修正指纹识别。例如登录后台后看到的界面可能暴露更准确的后台框架信息。6. 旁站、C段与CDN绕过突破边界限制主站防御严密不妨看看它的“邻居”。6.1 旁站与C段扫描旁站指同一台服务器同一个IP上部署的多个网站。如果主站www.example.com和blog.example.com解析到同一个IP1.1.1.1那么它们就是旁站。攻击旁站可能最终影响到主站如通过服务器提权。C段指同一IP网段例如1.1.1.0/24中的其他服务器。这些服务器可能属于同一公司不同部门安全水平参差不齐攻破一台就可能作为跳板进入内网。如何发现通过子域名解析获取一批IP。对这批IP进行反查Reverse IP Lookup看一个IP绑定了哪些域名。网站如viewdns.info/reverseip/ 工具如amass的-addr参数。对目标IP所在的C段进行扫描。例如目标IP是1.1.1.100 那么扫描1.1.1.1-254。可以使用nmapnmap -sn 1.1.1.0/24先进行主机发现-snPing扫描再对存活主机进行端口扫描。重要警告C段扫描的侵略性非常强极易触发目标网络的安全警报并且可能扫描到与目标无关的其他公司或个人的服务器构成法律风险。必须在获得明确书面授权且授权范围包含相关网络段时才能进行6.2 CDN识别与真实IP溯源内容分发网络CDN像一面盾牌隐藏了服务器的真实IP。我们的目标就是尝试绕过这面盾牌。1. 如何判断目标使用了CDN多地Ping使用ping.chinaz.com或www.itdog.cn等网站从全球多地Ping目标域名。如果返回的IP地址各不相同且属于CDN服务商如Cloudflare, Akamai, 阿里云 腾讯云的IP段则很可能使用了CDN。检查DNS记录大型CDN通常会使用CNAME记录将域名指向CDN的别名例如xxx.kunlun.com。检查HTTP响应头某些CDN会在响应头中添加特有字段如Server: cloudflare,CF-RAY等。2. 寻找真实IP的常见方法“绕过CDN”历史DNS记录查询网站可能是在后期才接入CDN的。查询历史DNS记录通过SecurityTrails,viewdns.info等可能会找到早期的A记录直接指向真实IP。子域名大法很多公司只给主站或核心业务用了CDN而一些子域名如test.example.com,dev.example.com,intra.example.com可能直接解析到真实IP。这也是为什么子域名枚举如此重要。邮件服务器溯源公司的邮件服务器MX记录有时和Web服务器在同一内网或同一台机器上。给目标公司邮箱发封邮件查看邮件原文的邮件头其中的Received字段可能包含发件服务器的内部IP。SSL证书关联如果目标使用了独享的SSL证书可以通过证书的序列号、指纹SHA1在Censys或Shodan上搜索可能会找到使用相同证书的其他域名或IP其中可能包含真实IP。国外访问有些CDN服务商对国内和国外线路的配置不同。主站可能针对国内用了CDN但国外线路直接解析回源站。可以使用国外的在线代理或VPS进行访问测试。利用网站功能网站上的“忘记密码”、“邮件订阅”、“RSS订阅”等功能在发送邮件或通知时其系统可能会从源站直接发出从而在邮件头中暴露真实IP。踩坑记录真实IP溯源是个体力活加运气活没有一种方法保证100%成功。我经常是多种方法组合使用并且需要持续关注。有时候在测试的某个深夜目标的某个子域名解析突然变了可能就会暴露真实IP。养成记录和整理所有关联IP、域名的习惯建立一个自己的情报库。7. 敏感信息泄露挖掘在互联网的“垃圾桶”里寻宝开发人员、运维人员无意中上传到公开仓库、网盘、论坛的代码、配置文件、日志文件是信息泄露的重灾区常常能直接拿到数据库密码、API密钥、后台地址等“宝藏”。7.1 搜索引擎黑客技巧利用搜索引擎如Google, Bing, Shodan, Fofa, ZoomEye的高级语法进行精准搜索。搜索特定文件类型site:example-target.com filetype:pdf site:example-target.com ext:doc | ext:docx | ext:ppt搜索目录列表site:example-target.com intitle:index of搜索配置文件、密码文件site:example-target.com inurl:config | inurl:password | inurl:key site:example-target.com password | passwd | pwd | key | secret搜索数据库连接信息site:example-target.com jdbc:mysql | DB_PASSWORD | .envShodan/Fofa/ZoomEye这类网络空间搜索引擎更强大可以直接搜索特定标题、特定端口、特定服务版本、特定国家城市的资产。# Shodan 搜索 Apache 2.4.49 该版本有严重漏洞 apache 2.4.49 # Fofa 搜索标题包含“后台管理”的网站 title后台管理7.2 代码仓库与公开文档挖掘GitHub/GitLab是最大的敏感信息泄露来源。搜索公司名、项目名、邮箱后缀可能会发现源代码中硬编码的密码、API Key、Token。内部系统的访问地址、架构图。.git目录泄露通过git-dumper等工具可以下载整个仓库历史可能找到历史提交中的敏感信息。网盘与文档分享站点在百度网盘、Google Drive、SlideShare等平台搜索目标公司名称有时能找到内部培训PPT、客户名单、通讯录等。实操心得这项工作需要极大的耐心和想象力。关键词需要不断变换组合公司简称、全称、产品名、项目代号、员工姓名拼音等。找到一份泄露的运维文档其价值可能超过你扫描一个星期的漏洞。建议将这项工作常态化而不仅仅是渗透测试开始时才做。8. 信息整理与自动化让侦察工作流程化手工操作效率低下且容易遗漏。我们需要将上述所有环节工具化、流程化。8.1 工具链整合你可以编写一个Shell脚本或Python脚本将各个工具串联起来。一个简单的流程可能是输入主域名。调用subfinder/amass收集子域名。调用massdns/dig解析子域名到IP。调用nmap/masscan对IP进行快速端口扫描。调用httpx/naabu识别HTTP/HTTPS服务。调用whatweb/nuclei对Web服务进行指纹识别和基础漏洞扫描。将结果域名、IP、端口、服务、指纹输出到一个结构化的报告中如JSON或HTML。市面上也有成熟的集成化工具如recon-ng,SpiderFoot更偏向OSINT以及自动化程度更高的Sn1per,Arjun等框架。8.2 情报管理与持续监控一次性的信息收集是不够的。目标的资产、配置、代码都在变化。你需要建立一个持续监控的机制。定期如每周重新运行你的侦察脚本对比新旧结果发现新增的子域名、新开放的端口、新上线的服务。利用GitHub Watch功能监控目标相关代码仓库的更新。设置Google Alerts或使用monitor之类的工具监控互联网上是否出现新的与目标相关的敏感信息。最终所有收集到的信息应该被妥善整理放入笔记如Obsidian, Notion或情报管理平台并清晰地标注来源、时间、可信度。这份不断更新的“目标档案”是你后续进行漏洞扫描、渗透攻击、横向移动的导航图。信息收集是一门艺术更是一项需要耐心、细心和创造力的工程。它没有太多炫技的成分但扎实的信息收集能力是区分脚本小子和专业渗透测试人员的第一道分水岭。希望这篇长文能帮你打好这个基础。记住在虚拟世界里情报就是一切。