入口在主站之外:信息收集的工程化管线与攻防同图
原创
今木安全
今木安全
今木信息安全
2026年10月20日 11:30
上海
去阅读
漏洞挖掘的起步动作是信息收集,多数入门材料把它写成工具清单:这个查子域名、那个扫目录、再来一个搜邮箱。清单式收集的问题是产出物没法维护——跑完一轮得到几百个零散的域名和 IP,哪些活着、谁负责、跑着什么服务,全靠脑子记,放两周就是一堆废数据。
实战里更有解释力的是另一个判断:主站往往防护最厚,WAF、限流、审计一应俱全,测试者甚至摸不到真实 IP;真正开放的入口藏在主站之外——子域名、测试环境、遗留系统、关联域名。信息收集的目标因此不是\"收集得多\",而是把\"这个目标在互联网上暴露了哪些资产\"答成一份可验证、可更新的地图。
这份地图同时是防守方的短板清单。近年攻击面管理(EASM)成为独立品类,做的事与攻击者的侦察同源:同一批数据源、同一套聚合方法,差别只在产出物的用途。
一、五条收集线与产出物
| 收集线 | 原理 | 产出物 | 触碰目标 |
|---|---|---|---|
| DNS 区域传送 | AXFR 主从同步机制被错误开放 | 整张 zone 表(子域名+IP 一次拿全) | 一次查询 |
| 目录与默认资产 | 中间件默认目录与配置文件 | 数据库凭据、用户信息、部署路径 | 低频请求 |
| 报错与被动流量 | 应用报错与响应头泄露内部信息 | 绝对路径、SQL 语句、框架版本 | 零额外请求 |
| 人的信息 | 社工与公开情报 | 邮箱、命名习惯、内部系统入口 | 不接触 |
| 子域名枚举 | 被动源聚合+主动爆破 | 边界资产清单 | 分层可控 |
「触碰目标」一列是隐蔽性标尺:前三条线和枚举的被动层几乎不留痕迹,主动爆破一定会在目标的 DNS 查询日志里留记录。先跑零触碰的线,主动爆破留到需要补盲时再做。
二、DNS 区域传送:一条命令拿全 zone 表
协议位置与缺陷根因
AXFR 由 RFC 5936 定义,用途是主从 DNS 服务器之间同步 zone 数据:从服务器按变更通知向主服务器发起 AXFR 查询,拉走整张 zone。设计上这个能力只应对从服务器开放,常见错误是 allow-transfer 留成默认 any——任何外部主机都能一次拉走整张 zone:所有子域名、对应 IP、CNAME 指向,枚举工具跑几小时的产出一次到位。
判定命令链
交互式判定,Windows 自带的 nslookup 就够
nslookup
server dns.example.cn # 指定目标域的权威 NS
ls example.cn # 尝试列出整张 zone
Linux 下一行判定
dig @dns.example.cn example.cn AXFR +short
Nmap 脚本版,可批量过多个 NS
nmap --script dns-zone-transfer \
--script-args dns-zone-transfer.domain=example.cn \
-p 53 -Pn dns.example.cn
判定标准明确:返回成片的 子域名 IN A 记录 即漏洞存在,返回 Transfer failed 说明已限制。多个 NS 都要试——主从配置不一致时,从服务器常比主服务器更容易漏开。dnsenum 这类聚合工具把 AXFR 作为第一步自动尝试,命中后直接跳过后续爆破环节。
加固配置
BIND 下用 TSIG 密钥收口,zone 只对持密钥的从服务器开放传送:
key \"xfr-key\" {
algorithm hmac-sha256;
secret \"
};
zone \"example.cn\" {
type master;
file \"db.example.cn\";
allow-transfer { key \"xfr-key\"; };
};
从服务器侧对应配置 masters { <主服务器 IP> key \"xfr-key\"; };。改完必须从外部视角复测一次 dig @<NS> example.cn AXFR,这条检查应进资产巡检清单——zone 传送属于\"配置漂移就复发\"的问题,一次加固不等于永久安全。
三、中间件默认目录:以 Tomcat 为例
七个目录与各自的敏感点
中间件默认安装的目录结构是信息收集的固定题——拿到一个 Web 目录遍历或任意文件读取后,知道去哪翻文件决定了产出。以 Tomcat 为例,默认安装固定七个目录:
| 目录 | 用途 | 信息收集视角 |
|---|---|---|
| bin | 启动关闭脚本与命令 | 版本信息、JVM 参数 |
| conf | 配置文件 | 最敏感 :连接串、账号、端口 |
| lib | 运行期加载的 jar 包 | 依赖版本、已知 CVE 对应 |
| logs | 日志文件 | 堆栈、内部路径、IP |
| temp | 临时文件 | 上传残留 |
| webapps | 部署的应用 | 应用本体、WEB-INF |
| work | JSP 编译产物 | 编译后的页面逻辑 |
conf 目录值得单独展开:server.xml 常带数据源配置和内部服务端口,tomcat-users.xml 存管理端账号(弱部署下是明文或简单摘要),context.properties 一类文件带环境路径。日志目录同样有产出——catalina 日志里的完整堆栈会暴露框架版本、绝对路径甚至内网拓扑。
常见暴露位
默认安装自带的管理与示例应用是高频入口:/manager/html(应用部署管理,弱口令可直接部署 war 包)、/host-manager、/examples(示例 servlet 含会话操作样例)。WEB-INF/web.xml 虽不能直接 HTTP 读取,但配合任意文件读取漏洞就是第一批要翻的文件——里面列出全部 Servlet 映射和数据源定义。webapps 下的 WEB-INF 里,classes 与 lib 存编译产物和依赖包,反编译 war 包是拿源码级信息的常规路径。
防御侧对应动作:删除 examples、manager 改路径加强口令并限源 IP、conf 文件权限收敛到运行账号。这些进第七节的改造点清单。
四、子域名枚举:四层管线
被动层:证书透明度日志是第一数据源
浏览器厂商要求公开信任的 TLS 证书必须记入公开的证书透明度(CT)日志,否则 Chrome、Safari 直接不信任。副作用是结构性的:一个子域名只要签发过证书,主机名就永久公开可查——测试环境签过一张,哪怕后来下线,记录还在。crt.sh 聚合了各日志库,按域名模糊检索:
curl -s \"https://crt.sh/?q=%25.example.cn&output=json\" \
| jq -r '.[].name\_value' \
| tr '\
' '\0' | xargs -0 sort -u > ct\_subs.txt
%25 是 % 的 URL 编码,匹配任意前缀。这一层零触碰。
被动源不止 CT 日志,各有盲区,多源归并才谈得上覆盖:
| 被动源 | 记录内容 | 盲区 |
|---|---|---|
| CT 日志(crt.sh、Censys) | 所有公开信任证书的 SAN 字段 | 内部命名、未签证书的资产 |
| 被动 DNS 库 | 历史解析记录 | 新上线资产 |
| 网空测绘引擎(Shodan、Censys、FOFA) | 开放端口、服务指纹、证书 | CDN 后的源站 |
| 历史 Whois 与关联域名反转 | 关联品牌域名、注册信息 | 隐私保护注册 |
工具层面 subfinder 聚合数十个被动源,subfinder -d example.cn -all -o subs.txt 一条命令跑完,配齐各数据源 API key 后覆盖面明显提升。Amass 更重,带 ASN 归属分析与递归关联,适合对大目标做全量测绘。成熟组织的被动覆盖率能到七八成——它上线过的资产,第三方数据基本都记着。
变体层与主动爆破
被动源系统性漏掉两类资产:刚上线的、从未公开签过证书的。变体生成按已知命名习惯扩展候选——有 dev.example.cn 就该试 dev-api、dev-test、dev2;有自建 git 服务习惯的团队,git.example.cn 这类命中概率不低。dnsgen 拿现有子域名做组合变换,puredns 高并发验证并自动过滤泛解析:
从已知子域名生成变体并解析验证
subfinder -d example.cn -silent \
| dnsgen - \
| puredns resolve -r resolvers.txt -w variant.txt
字典爆破补盲
puredns bruteforce wordlist.txt example.cn -r resolvers.txt
泛解析是主动爆破最大的坑:*.example.cn 对任意子域名都返回同一 IP 时,不过滤会得到几万条垃圾记录。puredns 先用随机前缀探测泛解析再过滤,这也是不用 dig 手跑的原因。
验证与指纹
解析出来的域名先验存活再谈利用:
cat variant.txt | httpx -status-code -title -tech-detect -o live.txt
httpx 并发探测 HTTP/HTTPS 存活,顺带输出标题与技术栈。httpx 支持 -screenshot 参数直接批量截图,配合 gowitness 能给全部存活资产建视觉档案,后台登录页一眼可辨。存活资产按「测试环境 > 管理后台 > 老版本中间件」排优先级——测试环境通常没有生产级的防护和审计,是最常见的实际入口。
五、被动流量与人的信息
报错即情报
Burp 的被动扩展在流量经过时于代理侧静默检查响应,不发出任何额外请求,属于零额外请求的信息收集。错误消息检查类插件(如 burp-suite-error-message-checks)抓取响应里的 Fatal error、SQL 报错片段——数据库报错常带完整 SQL 语句、表名和 Web 目录绝对路径;响应头分析类插件(如 Header Analyzer)核对安全响应头的缺失与误配。信息全在正常业务流量里,这是隐蔽性最高的一条线。
防御动作对应三件事:自定义错误页、关掉堆栈输出、生产环境禁用 debug 模式。
搜索引擎语法
| 语法 | 命中目标 |
|---|---|
site:example.cn inurl:admin |
后台入口 |
site:example.cn ext:sql ext:bak ext:xls |
遗留数据文件 |
intitle:\"index of\" site:example.cn |
开着目录列示的站点 |
theHarvester 聚合多个公开源收邮箱和主机名(theHarvester -d example.cn -b all)。邮箱的命名格式本身是情报——比如拼音全拼加姓氏——这种习惯常被同一批人复用在子域名、内部系统和默认账号上,拿到格式就能预测未发现的资产名。邮箱列表在授权钓鱼演练里还有一用:按格式生成的候选地址可做投递前验证,区分哪些真实存在。
代码托管与人员信息
代码托管平台的泄露搜索是稳定产出线:拿目标域名、内部项目代号、密钥前缀当关键词搜代码和历史提交,硬编码的数据库配置、误传的部署脚本都在其中,配套 gitleaks 这类规则引擎可以批量跑、也可以进 CI 持续扫。
还有一条线产出不稳定但偶有惊喜:网盘和群组里搜目标域名,命中过运维遗留的资产清单和口令表。这类搜索极易越出授权边界,只适合在明确授权的项目里做,且仅限授权范围。
遗留策略文件
Flash 时代的 crossdomain.xml 跨域策略文件曾是不易察觉的资产线索来源,里面常列出内部接口域名。平台退役后这条收集线失效,但历史遗留的策略文件本身成了暴露面的一部分,见到就该清。
六、AI 的介入:侦察成本坍缩
攻击侧:侦察成为最先 Agentic 化的环节
侦察是渗透流程里最程序化的环节,因此最先被多智能体改造。当前开源与商用的自动化渗透框架普遍把侦察拆成独立 agent:侦察 agent 调度 subfinder、nmap、whatweb 等工具,产出结构化资产清单,直接喂给漏洞分析与利用 agent,全流程无需人在环路里。
公开基准给了这个位移一个量化标尺:web 漏洞利用基准 XBEN(104 道真实挑战)上,一位从业二十年的顶级人类渗透测试员限时 40 小时解出 85%,自治 agent 以约 28 分钟达到同等正确率;另一个商用 agent 首次尝试解出 96%,平均 19 分钟拿到可验证的利用证据。侦察与资产测绘正是这些 agent 的起手环节。
AI 在侦察环节的具体收益有三块:
• 变体生成:LLM 按目标组织的命名习惯生成子域名候选,命中率高于固定字典。字典爆破是拿词表赌概率,生成式候选按命名惯例收敛,词表里没有的组合(dev-v2-api、gitlab-test)能被猜出来。
• 报错语义归并:被动插件抓回的报错由模型分流为可利用信息与噪音,人工研判从逐条看变成看汇总。
• 管线编排:被动聚合、变体、爆破、存活验证的完整管线由 agent 自动跑,人工需要数天的全资产测绘压到夜间一批任务。
给子域名候选生成写个可直接复用的 prompt:
已知子域名:dev.example.cn, api.example.cn, git.example.cn,
jira.example.cn, uat-api.example.cn
任务:为 example.cn 生成 50 个最可能存在的子域名候选。
规则:延续现有命名惯例(环境前缀+业务+序号),覆盖测试、灰度、
监控、内部系统四类;输出纯列表,不要解释。
产出直接拼进 puredns 的解析队列即可闭环。
价值判断:侦察的人工边际成本正在逼近零。这直接动摇按年交付的渗透测试经济模型——agent 能每天对全部资产跑一轮侦察,年检节奏在覆盖频次上落后三个数量级,买\"一年测一次\"的钱不如买\"每天测一轮\"。
防守侧:EASM 把同一张地图产品化
攻击者拿地图找入口,防守方的对应物是外部攻击面管理(EASM),近年已成独立品类,各家方案的核心能力都是同一批:CT 日志与被动 DNS 聚合、网空测绘、资产指纹、持续监控。
EASM 与攻击者侦察的真正分差在产出物:攻击者的地图到\"资产+暴露服务\"就够用,防守方的地图必须给每项资产挂上归属——谁负责、该不该存在、何时下线。行业共识是发现已是商品,归属才是难点:没有 owner 的资产打不了补丁、加不了监控、也关不掉,挂在它上面的漏洞只是报告里的一个数字。大型企业里人工归属消耗 EASM 运营的四到六成工作量,用模型按命名惯例、证书主体、云账单与 SSO 日志自动关联资产和团队,是当前的主要改造方向。
两个量化事实决定紧迫度。其一,近年多期行业泄露统计里,漏洞利用已超过凭据窃取成为首位初始入口,头部报告给出 31% 的占比——攻击者就在打暴露面,而且打得进。其二,云原生环境下两到四成外部资产是瞬态的,容器和 serverless 的存活周期短于常见扫描周期,定时扫描对它们结构性失明;事件驱动的发现(云审计日志、DNS 变更流)正在替代定时扫描,行业基准节奏是自动化发现至少每周一轮、漏洞枚举两周一轮。
位移的判断
侦察数据源的覆盖度正在成为攻防对抗的第一变量。攻击侧多源聚合的成本接近零,防守方资产台账不全的话,对抗在第一层就分出胜负。人的经验价值后移:侦察自动化之后,分差留在业务逻辑判断和利用链构造上——恰好也是目前自动化最难复制的部分。
七、防御重构:七个改造点
| # | 改造点 | 做法 |
|---|---|---|
| 1 | AXFR 收口 | allow-transfer 限定从服务器并加 TSIG;外部自测进巡检清单 |
| 2 | CT 日志自监控 | 监控本域名新增证书签发,未知签发即告警 |
| 3 | 域名生命周期 | 删云资源前先删 DNS 记录,杜绝悬挂 CNAME |
| 4 | 影子资产治理 | 持续发现+归属闭环,无主资产限时认领、逾期下线 |
| 5 | 报错治理 | 自定义错误页、关堆栈输出、生产禁 debug |
| 6 | OSINT 收敛 | 代码托管泄露扫描进 CI,邮箱格式与命名规范统一治理 |
通配符证书的权衡
CT 日志会泄露 SAN 里的每个主机名,签通配符证书(*.example.cn)能不把具体子域名写进日志,是最直接的隐藏手段。代价是私钥一旦泄露,全线子域名的加密同时失守,且证书撤销传播慢。可行折中:外部暴露面用通配符,高敏子系统走独立 CA 和私有 PKI,内部命名不进公开日志。
子域名接管
悬挂 CNAME(记录指向已释放的云资源)是最典型的失分项:攻击者认领被释放的资源后,能在你的子域名下直接挂内容,继承域名信任做钓鱼甚至吃 Cookie。防御就是第三条改造点——资源下线流程里删记录必须先于删资源,并用持续比对(DNS 记录 vs 云资源存活)自动发现悬挂项。
> 文中涉及的技术手段仅用于授权范围内的安全测试,请严格遵守《网络安全法》及相关法律法规,未经授权不得对任何系统进行测试。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论