3. 信息收集与资产测绘
面试官问“你信息收集一般做到什么程度”,真正想听的并不是你背得出多少工具,而是你能否说清三件事:你收集了什么、为什么停在这里、以及你如何证明已经覆盖到位。信息收集与资产测绘是渗透测试的“地基”,但地基不是越深越好——越界就是违规,太浅则后续漏洞验证无从下手。本节围绕子域名枚举、端口扫描、指纹识别、目录爆破、搜索引擎与空间测绘工具,讲清如何在面试中把“深度”与“边界”讲成一个有逻辑、可复现的工程过程。
一、先建立“资产面”模型,再谈工具
信息收集的本质是不断缩小“未知资产”与“已知资产”之间的差距。面试中建议先给出一句话框架:以目标主域为根,向外扩展域名、IP、端口、服务、应用、目录六个层次,每一层都设定明确的停止条件。这样回答的好处是,面试官能立刻判断你是有方法论的人,而不是“工具驱动”的人。
以某授权测试目标 example.com 为例(以下均为教学示例,非真实实测数据):
- 域名层:主域、子域、泛解析、CNAME 指向的第三方托管域名;
- IP 层:A 记录、CDN 回源 IP、历史解析 IP;
- 端口层:常见 Web 端口、非标端口、UDP 服务;
- 服务层:Web 中间件、数据库、缓存、管理后台;
- 应用层:CMS、框架、语言、版本;
- 目录层:后台路径、备份文件、接口文档、上传点。
这六层不是必须全部打满,而是让你在面试中能回答“我做到哪一层、为什么”。
二、子域名枚举:深度取决于“字典 + 证书 + 被动源”的组合
子域名枚举的常见做法是三层叠加:被动收集、证书透明日志、主动爆破。被动源包括搜索引擎、威胁情报、GitHub 泄露;证书透明日志(crt.sh)能拿到大量历史证书中的域名;主动爆破则依赖字典质量。
教学示例命令(仅演示参数含义):
# 被动 + 证书透明日志收集
subfinder -d example.com -all -o sub_passive.txt
# 字典爆破,限定并发与超时,避免影响业务
puredns bruteforce subs.txt example.com \
--resolvers resolvers.txt \
--rate-limit 200 \
--wildcard-tests 5 \
-o sub_brute.txt
# 合并去重并解析
sort -u sub_passive.txt sub_brute.txt | dnsx -a -resp -o sub_resolved.txt
这里的关键不是命令本身,而是边界控制:并发限制、超时、泛解析检测、只解析不访问。面试中要主动说明:泛解析(wildcard DNS)会让爆破结果大量误报,必须先用随机子域测试,若随机子域也返回 IP,则说明存在泛解析,需要过滤。判断依据是:随机生成的 random123.example.com 若解析成功,则爆破结果不可直接采信。
三、端口扫描:从“全端口”到“有选择的深度”
端口扫描的深度体现在“扫多少”和“怎么扫”。面试中不要只说“我用 nmap 全端口扫描”,而要说清策略:
- 第一轮:对已知 IP 做常见端口快速扫描,确认存活与开放;
- 第二轮:对存活主机做全端口 TCP 扫描,但限制速率;
- 第三轮:对开放端口做服务与版本识别,必要时用脚本探测。
# 第一轮:常见端口快速扫描
nmap -sS -Pn -T3 --top-ports 1000 -iL ips.txt -oA scan_top
# 第二轮:全端口,限速,避免触发防护
nmap -sS -Pn -p- --min-rate 300 --max-retries 2 -iL alive.txt -oA scan_all
# 第三轮:服务识别与默认脚本
nmap -sV -sC -p 80,443,8080,3306 -iL alive.txt -oA scan_svc
边界判断:如果目标有 WAF 或 IPS,全端口高速扫描可能触发封禁,此时应降低速率、分时段扫描,或改用被动空间测绘数据先做筛选。面试中要能说出“我为什么在这个目标上选择限速”,而不是机械执行。
四、指纹识别与目录爆破:深度体现在“验证”而非“数量”
指纹识别常用 whatweb、wappalyzer、nmap 的 http-title 与 http-headers 脚本。教学示例:
whatweb -a 3 https://example.com
nmap -sV -p 443 --script http-headers,http-title example.com
判断依据:响应头中的 Server、X-Powered-By、Cookie 名称、特定路径的 404 页面特征,都能辅助判断中间件与框架。但指纹可能被伪造,面试中要强调“交叉验证”:用两种以上方式确认同一结论。
目录爆破的深度不是字典越大越好,而是字典与目标匹配。例如目标使用 Java 技术栈,则优先加入 actuator、swagger-ui、druid 等路径;若为 PHP,则加入 phpinfo.php、www.zip、backup.sql。教学示例:
ffuf -u https://example.com/FUZZ \
-w common.txt \
-mc 200,301,302,403 \
-fs 0 \
-rate 50 \
-o dir.json
边界控制:目录爆破会产生大量请求,必须限制速率、排除误报(如统一 200 的软 404),并在授权范围内进行。判断软 404 的方法是:先请求一个不存在的随机路径,记录其响应长度与状态码,再在爆破中过滤相同特征。
五、搜索引擎与空间测绘:被动收集的“深度”与“合规边界”
Google Hacking、Shodan、Fofa、Hunter 等工具的价值在于不直接接触目标即可获取资产信息。教学示例语法:
# Google:查找子域与敏感文件
site:example.com -www
site:example.com filetype:pdf
# Fofa:按证书与标题检索
cert="example.com"
title="后台管理" && cert="example.com"
面试中要主动说明边界:空间测绘数据可能包含非目标资产,使用前必须确认归属;搜索引擎缓存可能过期,需与主动扫描交叉验证。深度体现在“用被动数据缩小主动扫描范围”,而不是“用被动数据替代授权”。
六、面试中如何描述“深度与边界”
建议用“三层边界”来组织回答:
- 授权边界:只测试授权书列明的域名与 IP 段,子域若指向第三方托管,需确认是否在范围内;
- 技术边界:限速、限并发、避开业务高峰、不触碰破坏性操作;
- 时间边界:信息收集阶段设定截止条件,例如“子域连续两轮无新增”“端口扫描覆盖全端口且服务识别完成”。
一个可参考的面试回答结构是:先讲资产面模型,再讲每层用了什么方法、观察到什么、如何验证、为什么停止。例如:“我对 example.com 先做被动子域收集,得到约 120 个候选(示例数据),经泛解析过滤后保留 80 个;对存活 IP 做全端口扫描,发现 22、80、443、8080、3306 开放;对 Web 端口做指纹识别,判断为 Nginx + Java;目录爆破使用与 Java 匹配的字典,发现 /actuator/env 返回 200,但未进一步利用,因为当前阶段只做资产测绘。”这样的回答既有深度,又有边界,面试官能清楚判断你的工程素养。
最后提醒:信息收集的深度不是“越多越好”,而是“在授权与合规前提下,足以支撑后续验证”。能把这句话讲透,比堆砌工具名称更有说服力。