主动收集
端口、子域、目录、指纹、真实 IP——会留痕的那一半,以及每一步该先想清楚的事。
主动收集和被动收集的分界线是:你的请求到没到目标。
到了,就会出现在日志里、WAF 告警里、态势感知里。这不是问题,授权测试本来就会被看见——但要提前跟客户的安全团队打招呼,不然你会收到一通「你们是不是被打了」的电话。
端口扫描
先扫常见端口,再决定要不要全端口。全端口扫一遍几十万包,对小型站点的出口设备不算小事。
# 先看存活和常见端口
nmap -Pn -sV -T3 --top-ports 100 1.2.3.4
# 确认值得深入,再全端口
nmap -Pn -sS -p- --min-rate 2000 1.2.3.4
# 对确认开放的端口做版本和默认脚本
nmap -Pn -sV -sC -p 80,443,8080 1.2.3.4
-T3 是默认节奏,比 -T4 慢但不容易被限速设备掐断。扫到一半被丢包,比扫得慢更麻烦。
几个端口值得单独看:6379(Redis 未授权)、27017(MongoDB)、9200(Elasticsearch)、2375(Docker API)、11211(Memcached)。这些不是「高危端口」,是「默认不设防」的服务,配错了就是裸奔。
子域枚举
被动阶段用证书和测绘捞了一批,主动阶段补齐:
# 字典爆破
dnsrecon -d example.com -D subdomains.txt -t brt
# 或者用更快的
puredns bruteforce subdomains.txt example.com -r resolvers.txt
爆破的产出率取决于字典。用大字典跑小站,九成是无效请求。我的习惯是先跑一份几百条的高频子域(oa、mail、vpn、test、dev、git、jenkins),再按需扩。
泛解析会让爆破结果全是「成功」。先随便测一个不存在的子域,能解析出来就说明有泛解析,得按 IP 去重。
目录与文件
目录扫描是最枯燥也最容易出东西的一步。后台入口、备份文件、.git、.env、接口文档,都在这一步出来。
dirsearch -u https://example.com -e php,asp,aspx,jsp,zip,bak,sql,txt
几个常被忽略的路径:/robots.txt、/sitemap.xml、/.well-known/、/actuator/(Spring Boot)、/swagger-ui.html、/api-docs。
.git 目录能访问是大事——git-dumper 能把整个仓库拉下来,源码、历史提交、配置文件全在里面。
指纹识别
指纹决定后面测什么。识别到 Spring Boot,先看 /actuator/env;识别到 ThinkPHP,先看版本有没有已知 RCE;识别到某个国产 OA,直接去找通用漏洞。
工具用 Wappalyzer 插件就够,看 header、cookie 名、JS 路径、favicon hash。favicon 的 hash 特别好用,同一个系统换个域名,favicon 不变。
绕 CDN 找真实 IP
有 CDN 的时候,直接扫域名扫到的是 CDN 节点,白费功夫。
常用的几条路:
- 多地 ping,看解析结果是否一致。一致说明可能没上 CDN,或者只上了部分。
- 查历史 DNS 记录(SecurityTrails、微步),看 CDN 之前的解析。
- 子域里找一个没上 CDN 的(
mail、ftp、oa经常裸奔),它的 IP 常常就是源站。 - 看邮件头。目标发来的邮件,
Received字段里有真实发信服务器 IP。 - 扫全网找同 favicon 的 IP,比对证书。
找到疑似真实 IP 之后,用 hosts 绑定访问,看页面是否和主站一致。一致才算。
旁站与 C 段
同一台服务器上的其他站点、同一 C 段的其他服务器,都可能是入口。
但这里有个边界问题:旁站属于第三方,C 段更是。扫可以,打不行——除非授权范围里明确写了。这一条在授权与范围里提过,实际执行时最容易忘。
留痕这件事
主动收集的每一步都在留痕,这没法避免。能做的是让痕迹「可解释」:请求带固定的 User-Agent,标注测试来源;控制频率,别让 WAF 把整个 IP 段拉黑;重要的扫描留时间记录,方便事后和客户对日志。
参考
- 《你真的会信息收集嘛,信息收集 10 大技巧》,公众号 泷羽Sec
- 《ctfshow 从 0 开始学 web:信息搜集》,CSDN