1. 项目概述:为什么信息收集是漏洞挖掘的“胜负手”
干了这么多年安全,我越来越觉得,Web漏洞挖掘这事儿,七分靠信息,三分靠技术。你技术再牛,找不到目标、摸不清门路,就像拿着最锋利的刀却不知道往哪儿砍。很多刚入行的朋友,一上来就急着上扫描器、怼Payload,结果要么是目标不对,要么是路径不对,忙活半天颗粒无收,挫败感极强。今天,我就结合自己踩过的坑和总结的经验,系统聊聊Web漏洞挖掘中,信息收集这个最基础、也最关键的环节。
所谓信息收集,远不止是找个域名、扫个端口那么简单。它是一个立体化的侦察过程,目的是为你勾勒出一张目标的“数字地图”。这张地图上,不仅要有目标的“大门”(主域名),还要有所有可能进出的“侧门”、“后门”(子域名、旁站、C段),更要摸清目标使用的“建筑材料”(技术栈、框架、中间件)和“内部结构”(目录、文件、接口)。只有地图足够详尽,你才能找到最薄弱的那个点,精准下刀。这个过程,直接决定了你后续漏洞挖掘的效率、深度和成功率。可以说,信息收集的广度和深度,就是你漏洞挖掘能力的上限。
2. 信息收集的核心思路与分层策略
信息收集不能是“一把梭”,必须有清晰的策略和层次。我习惯把它分为四个递进的层次:资产发现、技术栈识别、敏感信息探测和关联信息拓展。每一层都为下一层提供线索,像剥洋葱一样,层层深入。
2.1 第一层:资产测绘——绘制目标数字版图
这一层的目标是回答“目标有哪些东西暴露在互联网上”。核心是发现所有与目标相关的网络资产。
1.1 域名与子域名枚举这是起点。主域名(例如example.com)之外,大量的业务、测试、管理后台往往存在于子域名中(如admin.example.com,dev.example.com,oa.example.com)。
- 常用工具与方法:
- 字典爆破:使用
subfinder,amass,ksubdomain等工具,配合一个强大的子域名字典进行枚举。字典的质量至关重要,我通常会融合公开字典(如subdomains-top1million-5000.txt)和自己长期积累的、针对特定行业(如教育、金融)的高频词汇字典。 - 证书透明度日志:利用
crt.sh网站或certspotter这类工具。因为CA机构签发SSL证书时,域名信息会被公开记录,这里能发现很多其他方法找不到的子域。 - 搜索引擎语法:Google/Bing的
site:example.com能搜到一部分,但更有效的是利用-www site:example.com来排除主站,专注于其他子域。 - DNS聚合查询:使用
SecurityTrails,ViewDNS等在线服务,它们聚合了历史DNS记录,可能发现已被遗忘但未注销解析的“幽灵”子域。
- 字典爆破:使用
实操心得:子域名枚举一定要“多源交叉验证”。单一工具或方法必有遗漏。我的标准流程是:先用
amass进行被动枚举(不发送探测包),再用ksubdomain进行高速验证,最后把结果合并去重。对于重要目标,还会手动查看crt.sh,经常有意外收获。
1.2 IP与端口探测确定了域名,下一步是找到它背后的服务器IP(A记录)以及开放了哪些服务。
- C段存活探测:拿到一个目标IP(如
192.168.1.100),探测其所在的C段(192.168.1.0/24)内其他存活主机。这常常能发现与目标在同一网络环境下的其他系统(如测试服务器、运维后台、 forgotten 的老系统),这些系统的安全性往往更弱。工具推荐nmap的-sn参数进行快速 ping 扫描,或masscan进行极速探测。 - 端口与服务识别:对存活IP进行端口扫描。
nmap的-sV参数可以探测端口上运行的服务及其版本号。这一步的信息对于后续漏洞利用至关重要(比如发现一个Apache Tomcat 8.5.19,就可以直接关联该版本的历史漏洞)。
1.3 旁站与反向域名查找旁站是指与目标网站托管在同一台服务器(同一IP)上的其他网站。由于资源共享,攻破一个旁站,可能会危及同服务器的其他站点。可以通过IP反查域名工具(如https://dns.aizhan.com)或nmap脚本http-domains来发现。
2.2 第二层:技术栈指纹识别——摸清目标的“武器装备”
知道目标在哪之后,就要搞清楚它用什么“武装”自己。不同的技术栈对应着不同的漏洞库和攻击面。
- Web框架与CMS识别:使用
Wappalyzer(浏览器插件)或whatweb命令行工具进行快速识别。是 WordPress, Joomla, ThinkPHP, Spring Boot 还是 Django?识别出CMS或框架,就能立刻联想到其常见漏洞、默认后台路径、特定版本漏洞等。 - 中间件与服务器识别:是 Nginx, Apache, IIS 还是 OpenResty?版本号是多少?
nmap的-sV扫描和 HTTP 响应头中的Server字段是主要信息来源。 - 前端技术与组件识别:检查引用的JavaScript库(如 jQuery, React, Vue 及其版本),前端框架也可能存在已知漏洞。浏览器开发者工具的“源代码”和“网络”选项卡是很好的分析入口。
- 编程语言识别:通过URL后缀(
.php,.jsp,.asp,.aspx)、Cookie名称(如PHPSESSID)、HTTP响应头中的X-Powered-By字段来判断。
注意事项:指纹识别结果可能存在误差或伪装。有些管理员会修改或隐藏响应头信息。因此,需要结合多种特征进行综合判断,比如通过特定的错误页面、默认文件、目录结构来辅助确认。
2.3 第三层:敏感信息与攻击面发现——寻找突破口
这是信息收集的“深水区”,目标是找到可以直接利用或作为跳板的敏感信息。
- 目录与文件扫描:使用
dirsearch,gobuster,ffuf等工具,配合强大的字典,爆破可能存在但未链接的目录和文件。重点寻找:- 后台登录入口 (
/admin,/wp-admin,/manage) - 配置文件 (
/config.json,.env,/WEB-INF/web.xml) - 备份文件 (
wwwroot.zip,database.sql.bak,.tar.gz) - 接口文档 (
/swagger-ui.html,/api-docs) - 源代码泄露 (
/.git/,/.svn/,/.DS_Store)
- 后台登录入口 (
- 参数与接口分析:使用浏览器插件(如
Param Miner)或代理工具(Burp Suite)爬取网站,分析所有请求,提取URL参数、API接口端点。特别关注那些看起来像ID、用户名、订单号等可以遍历的参数(如?id=1,?user=admin)。 - JS文件分析:现代Web应用大量逻辑写在JS中。手动或使用工具(如
LinkFinder,JSFinder)分析JS文件,常能发现未在页面中显式链接的API接口、子域名、敏感路径甚至硬编码的密钥、令牌。 - GitHub信息收集:如输入材料中提到的,这是SRC(安全应急响应中心)漏洞挖掘的富矿。利用GitHub搜索语法:
公司名 password/公司名 secret/公司名 api_key公司名.com或特定域名filename:config 公司名- 结合
GitDorker这类自动化工具,可以批量使用精心构造的dork(搜索语句)去挖掘员工无意中上传的代码、配置文件、内部文档、数据库连接字符串等极度敏感的信息。
2.4 第四层:关联信息与人员情报——拓宽攻击维度
这一层偏向于“人”和“组织”,在渗透测试或红队评估中更为重要。
- Whois信息:查询域名注册信息,可能获得注册人、邮箱、电话、公司地址。这些信息可用于钓鱼攻击或密码爆破(很多人用公司名、姓名、电话组合成密码)。
- 员工信息收集:从领英、公司官网、技术社区(如GitHub)寻找技术人员、运维、管理员的姓名、邮箱、社交账号。邮箱格式(如
姓.名@company.com)对后续的爆破或钓鱼很有价值。 - 历史漏洞与暴露记录:在
ZoomEye,Shodan,0.zone等网络空间测绘引擎中搜索目标,查看历史快照或暴露的服务信息,可能发现已被修复但未下线的问题系统。
3. 核心工具链与自动化工作流
手动收集效率低下,必须构建自动化工作流。下面是我常用的一套工具链和流程。
3.1 工具选型解析
我将工具分为“侦查”、“扫描”、“分析”三类。
| 工具类型 | 工具名称 | 主要用途 | 选择理由 |
|---|---|---|---|
| 资产发现 | subfinder/amass | 子域名被动枚举 | 数据源丰富,速度较快,可作为信息源基础。 |
ksubdomain | 子域名验证与爆破 | 速度极快,纯Go编写,适合对大量域名进行存活验证。 | |
nmap/masscan | 端口扫描与服务探测 | nmap脚本强大,masscan速度无敌,两者结合使用。 | |
| Web扫描 | dirsearch/gobuster/ffuf | 目录/文件爆破 | ffuf高度可定制化,过滤器和并发控制非常强大,是我的主力。 |
whatweb/Wappalyzer | Web技术栈识别 | whatweb可集成到流水线,Wappalyzer用于快速手动查看。 | |
httpx/httprobe | HTTP服务存活验证 | 快速从大量域名/端口中筛选出真正提供Web服务的资产。 | |
| 信息分析 | Burp Suite | 流量代理与手动测试 | 社区版足够用于爬虫和手动分析请求/响应,是手动测试核心。 |
LinkFinder/JSFinder | JS文件信息提取 | 自动化提取JS中的接口和路径,节省大量手动查看时间。 | |
GitDorker | GitHub敏感信息搜索 | 将手工的GitHub搜索自动化、批量化,提升信息收集维度。 | |
| 综合平台 | ARL(Asset Reconnaissance Lighthouse) | 资产侦察灯塔系统 | 国产优秀工具,将子域名、端口、服务、目录爆破、指纹识别等集成在一个Web平台,支持任务调度和报告生成,适合团队协作和周期性监控。 |
3.2 自动化工作流搭建示例
我通常使用Shell脚本或Python来串联这些工具,形成一个流水线。下面是一个简化版的思路:
- 输入:目标主域名
target.com。 - 子域名收集:
subfinder -d target.com -silent | tee subfinder.txt amass enum -passive -d target.com -o amass.txt # 合并、去重 cat subfinder.txt amass.txt | sort -u > all_subs.txt - 子域名存活验证:
# 使用httpx快速验证HTTP/HTTPS存活 cat all_subs.txt | httpx -silent -title -status-code -tech-detect -o live_subs.txt - 端口扫描(针对主域名的解析IP或重点子域名):
# 提取IP cat live_subs.txt | awk -F/ '{print $3}' | sort -u > ips.txt # 使用masscan快速扫描常用端口 masscan -iL ips.txt -p1-10000,27017,6379,9200,11211 --rate=1000 -oL masscan_output.txt # 使用nmap对masscan发现的开放端口进行详细服务识别 nmap -sV -sC -oA nmap_detail -iL <(awk '/open/ {print $4":"$3}' masscan_output.txt | sort -u) - 目录爆破与指纹识别:
# 对存活的Web服务进行目录扫描 ffuf -w live_subs.txt:DOMAIN -w /path/to/dict.txt:FUZZ -u https://DOMAIN/FUZZ -fs 424,404 -t 50 -o ffuf_results.json # 同时,whatweb可以批量识别技术栈 whatweb -i live_subs.txt --verbose --log-json=whatweb_results.json - 结果汇总与可视化:将上述步骤生成的
live_subs.txt,nmap_detail.xml,ffuf_results.json,whatweb_results.json等文件,导入到ARL或自建的数据库(如Elasticsearch + Kibana)中进行统一管理、查询和可视化展示。
踩坑实录:自动化脚本的并发和速率控制非常重要。不加限制地疯狂扫描,很容易触发目标的WAF(Web应用防火墙)封禁,甚至给自己的IP带来法律风险。在
ffuf中使用-t控制线程,在masscan中使用--rate控制包速率。对于重要目标,建议使用代理池并降低扫描频率,模拟正常用户行为。
4. 信息收集的实战应用与案例拆解
光说不练假把式。我结合一个虚构但典型的场景,看看如何应用上述策略。
场景:对test-university.edu.cn进行漏洞挖掘。
4.1 第一阶段:广撒网,绘制资产地图
- 使用
subfinder、amass并结合证书透明度日志,收集到约300个子域名。 - 经
httpx验证,存活约150个。 - 发现主站IP为
123.123.123.123,对其进行C段扫描,发现同网段123.123.123.124开放了8080端口,运行着Apache Tomcat/8.5.35,且存在默认管理后台/manager/html。这是一个典型的旁站/同C段资产发现案例。 - 通过IP反查,发现该IP上还绑定了
old-portal.test-university.edu.cn,这是一个已被新版替换但未下线的旧门户系统。
4.2 第二阶段:重点突破,识别脆弱点
- 对存活的150个子域名进行批量指纹识别。发现:
oa.test-university.edu.cn使用通达OA。lib.test-university.edu.cn使用某特定版本的数字图书馆系统。vpn.test-university.edu.cn使用的是某品牌SSL VPN网关。
- 这些识别结果立刻指明了攻击方向:通达OA有公开的漏洞利用链;该版本数字图书馆系统存在SQL注入漏洞;该品牌VPN网关历史上曝出过多个高危漏洞。
4.3 第三阶段:深度挖掘,寻找直接入口
- 对
oa.test-university.edu.cn进行目录爆破,成功发现/ispirit/..等通达OA的特定漏洞路径。 - 分析
lib.test-university.edu.cn的JS文件,发现一个隐藏的API接口/api/v1/search?keyword=,参数keyword存在SQL注入嫌疑。 - 使用
GitDorker,以"test-university.edu.cn" password和"test-university" config为关键词进行搜索,在一位实习生的GitHub仓库中,找到了一个包含数据库内网IP、用户名和明文密码的application.properties配置文件备份。
4.4 第四阶段:关联拓展
- 通过Whois信息找到技术联系人邮箱格式为
name@test-university.edu.cn。 - 在GitHub上搜索该校学生或教职工的项目,发现有人将包含校园网内部系统访问方式的
README.md设为公开。
至此,通过多层次的信息收集,我们不仅找到了多个存在已知漏洞的系统,还发现了源代码泄露、配置信息泄露等敏感信息,攻击面被极大地拓宽了。后续的漏洞验证和利用,就变得有章可循。
5. 常见问题、误区与高级技巧
5.1 常见问题与排查
- 问题:工具扫描无结果或结果很少。
- 排查:检查网络连通性;确认目标是否存在CDN(使用
ping和nslookup看解析IP是否多变);检查工具字典是否合适;是否触发了速率限制被暂时封禁。
- 排查:检查网络连通性;确认目标是否存在CDN(使用
- 问题:扫描结果中存在大量误报(如状态码200但页面是空白或错误)。
- 排查:在目录爆破时,使用
-fs(filter size) 或-fc(filter code) 参数过滤掉特定大小的响应或状态码。手动访问几个样本,总结规律后再调整过滤规则。
- 排查:在目录爆破时,使用
- 问题:GitHub搜索不到有效信息。
- 排查:尝试更具体的关键词组合,如“公司名 + 内部项目名”、“邮箱后缀”、“特定系统名称”。关注Gist(代码片段)和刚创建不久的新仓库。有时中文关键词搜索效果更好。
5.2 必须避免的误区
- 只收集,不整理:收集到海量数据后,不进行去重、验证、分类,结果是一团乱麻,无法有效利用。一定要养成随时整理、标记重点的习惯。
- 过度依赖自动化:自动化工具能提高效率,但不能替代人工分析。工具发现的“异常”需要人工复核确认;工具扫不到的深层逻辑漏洞(如业务逻辑缺陷),更需要手动测试。
- 忽视信息关联:孤立地看待每一条信息。例如,发现一个子域名
dev.test.com,又通过GitHub发现该公司开发人员习惯在代码中注释# TODO: change default password,那么对dev.test.com进行默认口令爆破的成功率就大大增加。 - 法律与道德风险:信息收集必须在授权范围内进行。未经授权对非自有目标进行端口扫描、目录爆破等主动探测行为,可能违反《网络安全法》等相关法律法规。在SRC平台挖掘漏洞,务必遵守其规定的测试范围和方法。
5.3 高级技巧与心得
- 定制化字典:维护自己的专属字典。从每次测试中收集到的特定路径、参数名、备份文件名等,不断补充到你的字典里,这比用通用字典有效得多。
- 关注“变更”:定期对目标进行信息收集(例如每周一次),并对比前后差异。新上线的子域名、新开放的服务、技术栈的升级或降级,都可能是新的攻击入口或漏洞点。
- 利用错误信息:应用程序抛出的错误信息(如SQL错误、堆栈跟踪)是宝贵的情报来源,它们可能泄露路径、数据库结构、代码片段等。
- 思维发散:不要局限于IT系统。目标公司的招聘信息可能透露其使用的技术(如“招聘Spring Cloud开发工程师”);官网新闻可能报道新系统上线;甚至公司放在网盘上的公开资料,都可能包含有用信息。
信息收集是一门艺术,也是漏洞挖掘的基石。它没有终点,随着目标的变化和技术的演进,需要不断更新工具、策略和思维。扎实的信息收集工作,能让你的漏洞挖掘之路事半功倍,从“瞎猫碰死耗子”变成“精准狙击”。记住,在黑客的眼里,信息就是弹药,收集得越多越准,你的火力就越猛。