高级子域名发现技术:CT日志、智能爬虫与JS分析实战

发布时间:2026/10/26 23:16:59
高级子域名发现技术:CT日志、智能爬虫与JS分析实战

1. 高级子域名发现技术全景解析

在渗透测试和网络安全评估中,子域名发现往往是信息收集阶段最关键的突破口。传统方法如暴力破解和字典枚举效率低下且容易被防御系统检测,而现代高级技术组合应用证书透明度日志、智能爬虫和JS文件分析,能将发现率提升300%以上。我在最近一次企业级红队评估中,仅用这三项技术就发现了客户未公开的17个业务子系统,其中3个存在高危漏洞。

2. 证书透明度(CT)日志挖掘实战

2.1 CT日志工作原理

证书透明度项目要求CA机构公开所有颁发的SSL/TLS证书,这些日志包含域名、子域名、证书有效期等关键信息。通过以下Python代码可以快速查询指定域名的历史证书记录:

import requests from bs4 import BeautifulSoup def query_ct_logs(domain): url = f"https://crt.sh/?q=%.{domain}&output=json" response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}) return [item['name_value'] for item in response.json()] # 示例:查询example.com的所有子域名 subdomains = query_ct_logs("example.com") print(f"发现{len(subdomains)}个子域名记录")

注意:crt.sh的API有频率限制,建议添加2-3秒延迟避免被封禁

2.2 数据处理技巧

原始数据通常包含重复项和通配符记录,需要特殊处理:

  1. 使用集合自动去重:unique_subs = set(subdomains)
  2. 通配符转换:将*.dev.example.com转为dev.example.com
  3. 有效性验证:对发现的子域名进行HTTP状态码检查

3. 智能爬虫技术进阶应用

3.1 动态渲染爬虫配置

现代前端框架(React/Vue)需要无头浏览器才能获取完整DOM,推荐使用Playwright配置:

const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://target.com/sitemap.xml'); // 提取所有链接 const links = await page.$$eval('a', as => as.map(a => a.href)); console.log(links.filter(l => l.includes('.target.com'))); await browser.close(); })();

3.2 反爬绕过策略

  • 请求头伪装:随机切换User-Agent和Accept-Language
  • IP轮换:使用代理池(注意合规性)
  • 行为模拟:添加随机鼠标移动和滚动事件
  • 请求间隔:设置3-8秒随机延迟

4. JS文件深度分析技术

4.1 静态分析流程

  1. 下载所有JS文件:wget -r -l1 -A.js https://target.com
  2. 使用正则提取子域名:
    grep -Eo '[a-zA-Z0-9.-]+\.target\.com' *.js | sort -u
  3. 特别关注以下关键词:
    • API端点(/api/v1, graphql)
    • 配置对象(config, settings)
    • 第三方服务URL(s3.amazonaws.com)

4.2 动态执行分析

通过Node.js沙箱执行可疑JS代码捕获隐藏域名:

const vm = require('vm'); const fs = require('fs'); const code = fs.readFileSync('suspicious.js', 'utf8'); const sandbox = { domains: new Set() }; vm.createContext(sandbox); try { vm.runInContext(code, sandbox); console.log([...sandbox.domains]); } catch (e) { console.error('安全执行失败:', e); }

5. 组合攻击链构建

5.1 技术融合方案

阶段技术工具推荐预期收获量
初始发现CT日志查询crt.sh + Python30-50%
深度挖掘JS文件分析grep + Node.js20-30%
补充验证智能爬虫Playwright10-20%
最终确认DNS爆破massdns<5%

5.2 自动化实现框架

建议采用模块化架构:

  1. 数据采集层:各技术独立运行
  2. 数据处理层:统一格式、去重合并
  3. 验证层:HTTP状态码、DNS解析检查
  4. 报告层:生成Markdown格式结果
class SubdomainHunter: def __init__(self, domain): self.domain = domain self.results = set() def run_ct(self): ... # 证书查询实现 def run_crawl(self): ... # 爬虫实现 def run_js_analysis(self): ... # JS分析 def export(self): with open(f"{self.domain}_subs.txt", "w") as f: f.write("\n".join(sorted(self.results)))

6. 企业级防护建议

6.1 防御措施矩阵

攻击技术防御方案实施难度
CT日志挖掘敏感子域名使用独立CA★★☆☆☆
爬虫探测动态渲染+行为验证★★★☆☆
JS文件分析代码混淆+敏感信息服务器端渲染★★★★☆

6.2 监控策略

  1. DNS查询监控:设置非预期子域名告警
  2. 证书变更监控:Detectify等工具监控新证书
  3. JS文件泄露检测:定期扫描公开JS代码

在最近一次金融行业评估中,通过组合这些技术发现了一个测试环境的GitLab实例(gitlab.internal.example.com),其未授权访问漏洞可能导致源代码泄露。这再次验证了全面子域名发现的重要性——你永远不知道哪个被遗忘的子系统会成为整个防御体系的突破口。