最佳初学者指南:使用 Python 进行网络安全侦察
Source: Dev.to – Best Beginner’s Guide for Cybersecurity Recon with Python
你将学到的内容
阅读完本指南后,你将能够:
- 理解 被动 与 主动 侦察之间的区别。
- 为任何侦察项目有效地定义 范围 与 目标。
- 使用 Python 查询 DNS 记录、子域名以及证书透明度日志。
- 执行 异步网络扫描 以进行主机和服务发现。
- 高效组织侦察数据,以便进行分析和报告。
- 应用 OPSEC 与速率限制技术,在侦察过程中保持隐蔽。
这些技能为以下工作奠定了坚实基础:
- 渗透测试
- 漏洞赏金猎手
- OSINT 调查
准备好深入学习了吗?继续阅读后续章节,获取动手示例和代码片段。
前置条件
在开始之前,请确保您已准备好 Python 3.12 环境。以下列出的库推荐用于侦察任务。
| 库 | 用途 |
|---|---|
asyncio / trio | 在不使用线程的情况下并发处理成千上万的任务 |
httpx | 支持 HTTP/2、代理和 SOCKS 的异步 HTTP/HTTPS 请求 |
aiodns | 支持 DNSSEC 的异步 DNS 解析 |
ipwhois | ASN 和前缀查询 |
rich | 带进度条的美观终端输出 |
pandas | 数据组织、CSV/HTML 导出 |
设置
# 创建虚拟环境
python3 -m venv recon
source recon/bin/activate
# 安装所需的包
pip install httpx[http2] aiodns ipwhois rich pandas
侦察基础:主动 vs 被动
被动侦察
- 无直接交互 与目标。
- 典型来源:WHOIS、crt.sh、Shodan、GitHub、泄露的数据库。
- 隐蔽 – 不会在目标系统留下日志。
主动侦察
- 直接探测:DNS 查询、端口扫描、横幅抓取、网页爬取。
- 强大,但会生成日志并可能触发防火墙。
规则: 始终从被动侦察开始。 这更安全、免费,并有助于缩小需要主动探测的范围。
标准工作流
| # | 阶段 | 描述 |
|---|---|---|
| 1 | 范围定义 | 识别 IP 范围、域名和员工别名。 |
| 2 | 被动侦察 | 收集公开可用的工件。 |
| 3 | 关联与枢纽 | 去重数据,丰富发现,生成线索。 |
| 4 | 主动侦察 | 探测活跃主机、服务及其版本。 |
| 5 | 报告 | 以结构化的 JSON 或 CSV 导出结果以供分析。 |
Source: …
DNS 记录概览
DNS 是互联网识别和路由流量的基础。了解记录类型可以让你提前洞悉组织的在线结构。
A / AAAA – 主机到 IP 的映射
- A – IPv4 地址。
- AAAA – IPv6 地址。
这些记录揭示服务的托管位置(云提供商、本地、共享托管)。
CNAME – 别名和 CDN
blog.example.com → cname → example-blog.hosting.net
常见的服务包括:
- CDN 提供商(Cloudflare、Akamai)
- 邮件平台
- SaaS 仪表盘
- 云托管环境(AWS、GCP、Azure)
NS – 权威服务器
NS 记录指示哪个服务器对域名拥有权威,帮助你推断:
- 托管提供商
- DNS 是自行管理还是外包
- 冗余 / 故障转移配置
- 通过区域误配置发现可能的子域名
注意: 自托管的 NS 服务器通常表明拥有大型内部基础设施。
MX – 邮件路由
MX 记录显示负责接收邮件的邮件服务器,并可揭示:
- 使用 Google Workspace、Microsoft 365 或自定义邮件服务器
- 旧版或不安全的邮件系统
- 与邮件基础设施相关的额外子域名
TXT – 安全策略与验证凭证
| 用途 | 示例 |
|---|---|
| 邮件身份验证 | SPF、DKIM、DMARC |
| 域名验证 | 云/ SaaS 验证令牌 |
| 公开披露 | 安全策略、所有权声明 |
| 其他 | 自定义元数据、API 密钥(已遮蔽) |
注意: SPF、DKIM 和 DMARC 共同帮助防止伪造邮件。
SRV – 服务发现
SRV 记录为 SIP、LDAP、Kerberos、VoIP、Microsoft 服务和游戏服务器等服务指定主机名和端口。它们可以揭示:
- 内部身份验证服务
- 目录服务
- 公网不可见的基础设施依赖
子域名发现 – 扩大攻击面
子域名通常承载独特的应用、API、管理面板或入职系统(例如 api.example.com、vpn.example.com、dev.example.com)。发现它们可以扩大攻击面。
1. 被动枚举
从已经监控互联网的外部来源收集信息:
- 证书透明度(CT)日志
- 历史 DNS 数据
- 搜索引擎 dork
每个来源揭示了域名演变的不同层面。
2. 证书透明度日志
每个 HTTPS 站点都必须将其 SSL/TLS 证书发布到公共 CT 日志中。这包括本应保持私密的子域名。
| 工具 / 服务 | 描述 |
|---|---|
| crt.sh | 公共 CT 日志搜索引擎 |
| bufferover.run | 聚合 CT、DNS 和反向查询数据集 |
通过 CT 日志发现的示例子域名
api.example.com
dev.example.com
staging-api.example.com
internal-vpn.example.com
初学者友好的 Python 脚本获取 CT 日志
import requests
domain = "example.com"
url = f"https://crt.sh/?q=%25.{domain}&output=json"
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
entries = response.json()
subdomains = {entry["name_value"] for entry in entries}
for sub in sorted(subdomains):
print(sub)
except requests.RequestException as e:
print(f"Error fetching CT logs: {e}")
将 example.com 替换为你的目标域名。脚本会查询 crt.sh,获取所有包含该域的证书并打印去重后的子域名列表。
3. 后续步骤
- 将被动数据与主动探测合并 – 例如发送 HTTP 请求、执行端口扫描。
- 将结果存入
pandasDataFrame,便于导出为 CSV/JSON。 - 保持隐蔽 – 实现速率限制(
asyncio.sleep)和随机化的 User‑Agent(httpx)。
掌握这些基础后,你就可以构建更高级的侦察流水线,集成额外的数据源,并顺利过渡到全规模渗透测试或漏洞赏金工作流。