name: osint-recon
description: OSINT 开源情报收集知识库 — 四维信息收集模型(服务器→网站→域名→人员),维度四(人员信息)条件触发
OSINT 开源情报收集知识库
针对信息收集/侦察/社会工程场景的实战知识库,提供四维信息收集模型(服务器信息 → 网站信息 → 域名信息 → 人员信息),以及具体的工具使用方法和数据提取技巧。
与 recon Skill 的区别:
recon → 技术层面侦察(端口扫描、DNS、目录枚举)— 基础版
osint-recon → 全维度侦察(服务器 + 网站 + 域名 + 人员/社会工程)— 深度版
核心原则
- 四维度全覆盖 — 服务器/网站/域名三个维度始终执行,人员维度按条件触发
- 从页面提取一切可提取的信息 — 不只看 HTTP 头,还要看 HTML 内容、JS 文件、注释
- 先被动后主动 — 先看响应头、DNS、WHOIS(被动),再做端口扫描/目录枚举(主动)
- 维度完成度自检 — 每轮检查哪些维度已完成 ✅,哪些未完成 ❌,全部完成后才允许 [DONE]
- 外部链接即线索 — 页面上的每个外部链接都可能是信息来源
- 结构化输出 — 所有发现汇总为 Markdown 报告
四维信息收集模型
维度一:服务器信息
| 检查项 |
工具/方法 |
说明 |
| 开放端口 & 服务版本 |
MCP nmap / python_execute + socket |
全端口扫描或常见端口(21/22/80/443/3306/6379/8080/8443) |
| 真实 IP 探测 |
DNS 历史记录 / 全局 Ping / 邮件头提取 |
CDN 后的源站 IP — SecurityTrails/DNSHistory/全局Ping |
| 操作系统指纹 |
TTL 推断 + nmap OS 检测 |
Linux TTL≈64, Windows TTL≈128, Unix TTL≈255 |
| 中间件版本 |
响应头 Server + 错误页 + 特征文件 |
Apache/Nginx/IIS/Tomcat 版本识别 |
| 数据库识别 |
端口探测 + 错误信息 + 特征行为 |
MySQL(3306)/Redis(6379)/MongoDB(27017)/MSSQL(1433) |
维度二:网站信息
| 检查项 |
工具/方法 |
说明 |
| 网站架构 |
响应头 + 页面特征 + JS 库 |
OS + 中间件 + 数据库 + 语言 + 框架 → 完整技术栈 |
| Web 指纹 |
fetch + 响应特征匹配 |
CMS 类型、前端框架、JS 库、模板引擎 |
| WAF 检测 |
wafw00f 逻辑 + 响应特征 |
拦截页面/特殊响应头/异常状态码 |
| 敏感目录 & 敏感文件 |
python_execute + 常见路径字典 |
/admin /backup /config /api /robots.txt /sitemap.xml |
| 源码泄露 |
检查常见泄露路径 |
.git/.svn/.DS_Store/.env/web.config/备份文件(.bak/.swp/.old) |
| 旁站查询 |
同 IP 反查域名 |
站长工具/微步在线/crt.sh 同 IP 查询 |
| C 段查询 |
同网段存活主机扫描 |
nmap -sn 扫描 /24 网段 |
维度三:域名信息
| 检查项 |
工具/方法 |
说明 |
| WHOIS 注册信息 |
python_execute + whois API/命令 |
注册人/注册商/NS 服务器/注册日期/到期日期 |
| ICP 备案信息 |
工信部备案查询 API |
仅中国大陆域名需查,境外域名无备案 |
| 子域名发现 |
crt.sh + 爆破 + 搜索引擎 + DNS 区域传送 |
多方法交叉验证,确保覆盖全面 |
| DNS 记录全量 |
python_execute + dnspython/socket |
A/CNAME/MX/TXT/NS/SPF/SOA 全量查询 |
| 证书透明度日志 |
crt.sh / Censys / certspotter |
发现历史证书、子域名、关联域名 |
维度四:人员信息 ⚡ 条件触发
⚠️ 此维度仅在以下条件之一满足时才执行:
- 用户命令中明确提及"社会工程/社工/人员信息/作者追踪/人物画像"等
- 目标网站有明确作者信息(meta author、about 页面、联系方式)
不应该做社工的情况:普通企业官网无个人作者 / 用户只要求"扫描目标" / 目标是 IP/内网地址
| 追踪方向 |
方法 |
说明 |
| 作者标识提取 |
页面 meta author、about 页面 |
用户名、昵称、邮箱 |
| GitHub 追踪 |
fetch + GitHub API |
仓库、语言偏好、贡献记录、邮箱 |
| 社交媒体 |
从页面提取链接 → 访问 |
B站、微博、知乎、Twitter、LinkedIn |
| 跨平台关联 |
用用户名/邮箱搜索其他平台 |
相同 ID 跨平台搜索 |
| 历史提交 |
GitHub commits → 提交邮箱 |
关联其他项目和身份 |
| 泄露检测 |
GitHub 历史代码搜索 |
.env、config、密钥泄露 |
First-Pass 工作流
- 访问目标 →
fetch 获取首页,提取 HTTP 头 + HTML 内容
- 维度一:服务器信息 → 端口扫描、真实 IP、OS 指纹、中间件/数据库识别
- 维度二:网站信息 → Web 指纹、WAF 检测、敏感目录/源码泄露、旁站/C段
- 维度三:域名信息 → WHOIS、ICP 备案、子域名、DNS 记录、证书透明度
- 维度四(条件触发) → 提取作者信息、跨平台追踪、信息汇总
- 维度完成度自检 → 确认每个维度至少做过一轮检查
- 汇总报告 → 生成 Markdown 格式侦察报告
场景路由
| 场景 |
参考文档 |
核心内容 |
| 服务器信息收集 |
server-recon.md |
端口扫描、真实 IP、OS 指纹、中间件/数据库识别 |
| 网站信息收集 |
website-recon.md |
架构/指纹/WAF/敏感目录/源码泄露/旁站/C段 |
| Web 指纹识别 |
web-fingerprinting.md |
框架检测、版本识别、技术栈推断 |
| 作者追踪方法 |
author-tracking.md |
从页面提取作者 → 跨平台追踪 → 信息汇总 |
| OSINT 工具使用 |
osint-toolkit.md |
crt.sh、GitHub API、搜索引擎 dork、旁站/C段/ICP |
| 社会工程信息汇总 |
social-engineering-intel.md |
人物画像、关系网络、信息交叉验证 |
| 侦察报告模板 |
recon-report-template.md |
标准 Markdown 报告格式(四维度) |
⭐ 常用提取代码片段
从 HTML 提取所有外部链接
import re
html = "..." # fetch 获取的 HTML
links = re.findall(r'href=["\'](https?://[^"\']+)["\']', html)
for link in set(links):
print(link)
从 HTML 提取作者信息
import re
# meta author
author = re.findall(r'<meta\s+name=["\']author["\']\s+content=["\']([^"\']+)["\']', html)
# about 页面链接
about_links = re.findall(r'href=["\']([^"\']*(?:about|me|contact)[^"\']*)["\']', html, re.I)
查询 crt.sh 子域名
import requests
domain = "example.com"
r = requests.get(f"https://crt.sh/?q=%.{domain}&output=json")
if r.status_code == 200:
for entry in r.json():
print(entry['name_value'])
GitHub 用户信息
import requests
username = "target_user"
r = requests.get(f"https://api.github.com/users/{username}")
if r.status_code == 200:
data = r.json()
print(f"Name: {data.get('name')}")
print(f"Bio: {data.get('bio')}")
print(f"Email: {data.get('email')}")
print(f"Blog: {data.get('blog')}")
print(f"Location: {data.get('location')}")
print(f"Company: {data.get('company')}")
WAF 检测(响应特征法)
import requests
url = "https://target.com"
# 正常请求
r1 = requests.get(url)
# 触发 WAF 的请求(带攻击特征)
r2 = requests.get(url + "/?id=1' OR 1=1--")
# 对比响应
if r1.status_code != r2.status_code or len(r1.text) != len(r2.text):
print("[!] 可能存在 WAF")
print(f"正常状态码: {r1.status_code}, 攻击状态码: {r2.status_code}")
旁站查询(同 IP 反查域名)
import requests
ip = "1.2.3.4"
# 使用 chinaz API 或其他反查接口
# 也可以通过 crt.sh 查询同 IP 的证书
r = requests.get(f"https://crt.sh/?q={ip}&output=json")