# Conducting External Reconnaissance With Osint

> 使用开源情报（OSINT）技术执行外部侦察，在不直接与目标系统交互的情况下映射组织的外部攻击面。测试人员从 DNS 记录、证书透明度日志、搜索引擎、社交媒体、代码仓库和数据泄露数据库等公开来源收集信息，以构建全面的目标画像。

- Skill: `killvxk/conducting-external-reconnaissance-with-osint` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/conducting-external-reconnaissance-with-osint`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/conducting-external-reconnaissance-with-osint/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/conducting-external-reconnaissance-with-osint

---

# 使用 OSINT 执行外部侦察

## 使用场景

- 在渗透测试的初始侦察阶段收集情报，在主动扫描前进行信息收集
- 映射组织的外部攻击面，识别未知或影子 IT 资产
- 收集员工信息、邮件格式和组织架构，用于社会工程学活动
- 识别在互联网上发布的暴露凭据、泄露数据或敏感文档
- 在红队演练前确定组织数字足迹的范围

**不适用场景**：跟踪、骚扰或未经授权地监视个人。OSINT 收集必须在授权演练范围内进行，并符合适用的隐私法律（GDPR、CCPA）。

## 前置条件

- 针对目标组织执行侦察的书面授权
- 配置了 VPN 或 Tor 的专用研究工作站，用于需要时的匿名查询
- 已安装 OSINT 框架工具：Amass、theHarvester、Shodan CLI、Recon-ng、SpiderFoot
- Shodan、Censys、SecurityTrails、Hunter.io、VirusTotal 和 GitHub 的 API 密钥，以获取增强结果
- 用于研究过程中访问需要注册服务的一次性邮件账户

## 工作流程

### 步骤一：域名和 DNS 枚举

枚举与目标相关的所有域名、子域名和 DNS 记录：

- **根域名识别**：从主域名开始，通过 `whoxy.com` 或 `domaintools.com` 对注册者姓名、邮件和组织进行反向 WHOIS 查询，识别所有相关域名
- **子域名枚举**：运行多个工具以获得全面覆盖：
  - `amass enum -passive -d target.com -o amass_subs.txt` 从 40+ 个数据源进行被动子域名发现
  - `subfinder -d target.com -all -o subfinder_subs.txt` 进行快速被动枚举
  - `crt.sh` 证书透明度日志查询：`curl -s "https://crt.sh/?q=%25.target.com&output=json" | jq -r '.[].name_value' | sort -u`
- **DNS 记录分析**：查询所有记录类型：`dig target.com ANY`，检查揭示邮件基础设施的 SPF、DKIM、DMARC 记录，枚举 MX 记录以识别邮件提供商
- **区域传输尝试**：`dig axfr @ns1.target.com target.com` 检查错误配置的 DNS 服务器
- **整合结果**：合并、去重并将所有发现的子域名解析为 IP 地址。将 IP 地址映射到 ASN 和托管提供商

### 步骤二：基础设施和服务发现

在不直接扫描目标系统的情况下识别面向互联网的基础设施：

- **Shodan**：`shodan search "ssl.cert.subject.cn:target.com"` 查找所有具有目标域名 TLS 证书的面向互联网服务。同时按组织名称和 IP 范围搜索
- **Censys**：搜索目标的 IP 范围和 TLS 证书，识别从互联网扫描中索引的服务、技术和潜在漏洞
- **云资产发现**：使用 `cloud_enum` 等工具检查 S3 存储桶（`target-com`、`target-backup`、`target-dev`）、Azure Blob 存储（`target.blob.core.windows.net`）和 GCP 存储
- **WAF 和 CDN 识别**：使用 `wafw00f target.com` 识别可能掩盖源服务器 IP 的 Web 应用防火墙和 CDN 提供商
- **历史数据**：使用 Wayback Machine（`web.archive.org`）查找已删除的页面、旧版应用和被遗忘的端点

### 步骤三：邮件和人员情报

收集员工信息和邮件地址，为社会工程学准备：

- **邮件收割**：`theHarvester -d target.com -b all -f harvest_results.html` 从搜索引擎、LinkedIn 和数据源收集邮件
- **邮件格式识别**：使用 `hunter.io` 确定邮件格式（first.last、flast、firstl）并验证可达性
- **LinkedIn 侦察**：按部门识别员工，特别是 IT 管理员、安全团队成员和高管。注意职位发布和员工档案中提到的技术
- **组织架构**：从 LinkedIn 数据构建组织架构图，了解汇报关系，识别关键人员，映射部门
- **社交媒体分析**：查看员工社交媒体档案，了解内部工具、技术、办公地点、徽章照片和安全实践信息
- **招聘信息**：分析公司招聘页面和招聘网站上的当前和历史招聘信息，获取技术栈详情、工具和基础设施信息

### 步骤四：凭据和数据泄露分析

搜索暴露的凭据和敏感数据：

- **泄露数据库**：通过 `haveibeenpwned.com` API 检查与目标域名相关的已泄露邮件地址
- **粘贴网站**：在 Pastebin、GitHub Gists 和类似粘贴网站上搜索泄露的凭据、配置文件或内部文档
- **代码仓库**：在 GitHub、GitLab 和 Bitbucket 中搜索：
  - `org:target "password"`、`org:target "api_key"`、`org:target "secret"`
  - 使用 `trufflehog` 或 `gitleaks` 对目标的公开仓库进行自动化密钥扫描
- **文档元数据**：下载目标网站上公开可用的文档（PDF、DOCX、XLSX）并使用 `exiftool` 提取元数据，以揭示内部用户名、软件版本、打印机名称和文件路径
- **Google Dorking**：使用精准搜索操作符：
  - `site:target.com filetype:pdf` 查找公开文档
  - `site:target.com inurl:admin` 查找管理面板
  - `site:target.com "index of /"` 查找目录列表
  - `site:pastebin.com "target.com"` 查找粘贴网站提及

### 步骤五：技术栈分析

识别目标使用的技术、框架和服务：

- **Web 技术指纹识别**：使用 `whatweb target.com` 或 Wappalyzer 浏览器扩展识别 CMS、框架、JavaScript 库、分析工具和服务器软件
- **SSL/TLS 分析**：`sslyze target.com` 或 `testssl.sh target.com` 识别密码套件、协议版本、证书详情和密码学弱点
- **JavaScript 分析**：下载并检查 JavaScript 文件，查找框架标识符、API 端点、内部主机名和版本字符串
- **基于 DNS 的服务识别**：检查 TXT 记录以识别服务提供商（如 `v=spf1 include:_spf.google.com` 表示使用 Google Workspace，`MS=msXXXXXX` 表示 Microsoft 365）
- **移动应用分析**：从应用商店下载目标的移动应用，使用 `apktool`（Android）或 `frida` 分析硬编码 URL、API 端点和嵌入的凭据

## 核心概念

| 术语 | 定义 |
|------|------------|
| **OSINT** | 开源情报；从公开可用来源（包括网站、社交媒体、公共记录和政府数据）收集的情报 |
| **被动侦察** | 在不直接与目标系统交互的情况下收集信息，不在目标日志中留下痕迹 |
| **主动侦察** | 涉及与目标系统直接交互（扫描、探测）的信息收集，可能被记录 |
| **证书透明度** | 证书颁发机构颁发的 TLS 证书的公开日志，可查询以发现子域名和基础设施 |
| **攻击面** | 未授权用户可尝试进入或从环境中提取数据的所有点的总和 |
| **Google Dorking** | 使用高级 Google 搜索操作符查找被搜索引擎索引的本不应公开的敏感信息 |
| **影子 IT** | 由员工或部门在 IT 部门不知情或未批准的情况下部署的技术系统和服务 |

## 工具与系统

- **Amass（OWASP）**：综合子域名枚举工具，结合被动来源、DNS 暴力破解和证书透明度日志分析
- **Shodan**：互联网范围扫描数据库，索引互联网连接设备的服务、横幅和元数据，可按 IP、域名或组织搜索
- **theHarvester**：用于从公开来源收集邮件、子域名、主机、员工姓名和开放端口的 OSINT 工具
- **SpiderFoot**：自动化 OSINT 收集平台，查询 200+ 数据源并将发现关联到统一图谱
- **Recon-ng**：模块化 Web 侦察框架，具有数据库后端，用于组织和交叉引用已发现的情报

## 常见场景

### 场景：红队演练的演练前侦察

**背景**：一家科技公司签约了红队评估。在主动测试开始前，团队执行被动 OSINT 以映射攻击面并识别潜在入口点。目标是一家拥有 500 名员工、主域名为 techcorp.io 的 SaaS 公司。

**方法**：
1. 通过 Amass 和 crt.sh 枚举 147 个子域名，包括 staging.techcorp.io、jenkins.techcorp.io 和 vpn.techcorp.io
2. Shodan 发现一个被遗忘的 Elasticsearch 实例在 9200 端口上无需认证即可暴露在互联网上
3. theHarvester 收集了 89 个员工邮件地址，揭示格式为 first.last@techcorp.io
4. GitHub 搜索发现一名前开发人员的公开仓库包含带有 AWS 访问密钥的 `.env` 文件
5. LinkedIn 分析揭示公司使用 Okta 进行 SSO、使用 Jira 进行项目管理、使用 AWS 进行托管
6. Google Dorking 在 docs.techcorp.io 上发现目录列表，暴露内部架构图
7. 将所有情报汇编成侦察报告，直接用于威胁建模和攻击规划阶段

**常见陷阱**：
- 仅依赖单一子域名枚举工具，遗漏其他工具通过不同数据源发现的资产
- 未检查云存储服务（S3、Azure Blob、GCP）的公开可访问存储桶
- 不搜索公开代码仓库中的凭据，这通常会直接产生访问权限
- 在本应是纯被动阶段执行主动扫描（端口扫描、漏洞扫描）

## 输出格式

```
## 外部侦察报告 - TechCorp.io

### 攻击面摘要
- **发现的域名**：3 个（techcorp.io、techcorp.com、techcorpapp.com）
- **枚举的子域名**：所有域名共 147 个唯一子域名
- **唯一 IP 地址**：34 个 IP 映射至 AWS us-east-1 和 us-west-2
- **收集的邮件地址**：89 个有效企业邮件地址
- **暴露的服务**：通过 Shodan/Censys 识别到 12 个面向互联网的服务

### 关键发现

**1. 未经认证的 Elasticsearch 实例**
- 主机：52.xx.xx.xx:9200（elastic.techcorp.io）
- 索引数据：包含用户会话令牌和 PII 的应用日志
- 来源：Shodan 搜索 "ssl.cert.subject.cn:techcorp.io"

**2. 公开 GitHub 仓库中的 AWS 凭据**
- 仓库：github.com/former-dev/techcorp-scripts
- 文件：包含 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 的 .env 文件
- 状态：密钥似乎有效（未测试 - 超出被动侦察范围）

**3. 暴露内部文档的目录列表**
- URL：https://docs.techcorp.io/internal/
- 内容：架构图、网络拓扑、运行手册
- 来源：Google Dork "site:techcorp.io intitle:index.of"

### 建议
1. 立即轮换暴露的 AWS 凭据并审计 CloudTrail 日志
2. 限制 Elasticsearch 仅允许内网访问或添加认证
3. 禁用 docs.techcorp.io 上的目录列表并审计所有 Web 服务器
4. 在所有组织仓库中实施 GitHub 密钥扫描
```

