最佳初学者指南:使用 Python 进行网络安全侦察

发布: (2025年12月4日 GMT+8 22:48)
7 min read
原文: Dev.to

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 解析
ipwhoisASN 和前缀查询
rich带进度条的美观终端输出
pandas数据组织、CSV/HTML 导出

设置

# 创建虚拟环境
python3 -m venv recon
source recon/bin/activate

# 安装所需的包
pip install httpx[http2] aiodns ipwhois rich pandas

侦察基础:主动 vs 被动

被动侦察

  • 无直接交互 与目标。
  • 典型来源:WHOIScrt.shShodanGitHub、泄露的数据库。
  • 隐蔽 – 不会在目标系统留下日志。

主动侦察

  • 直接探测: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 – 安全策略与验证凭证

用途示例
邮件身份验证SPFDKIMDMARC
域名验证云/ SaaS 验证令牌
公开披露安全策略、所有权声明
其他自定义元数据、API 密钥(已遮蔽)

注意: SPF、DKIM 和 DMARC 共同帮助防止伪造邮件。

SRV – 服务发现

SRV 记录为 SIP、LDAP、Kerberos、VoIP、Microsoft 服务和游戏服务器等服务指定主机名和端口。它们可以揭示:

  • 内部身份验证服务
  • 目录服务
  • 公网不可见的基础设施依赖

子域名发现 – 扩大攻击面

子域名通常承载独特的应用、API、管理面板或入职系统(例如 api.example.comvpn.example.comdev.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. 后续步骤

  1. 将被动数据与主动探测合并 – 例如发送 HTTP 请求、执行端口扫描。
  2. 将结果存入 pandas DataFrame,便于导出为 CSV/JSON。
  3. 保持隐蔽 – 实现速率限制(asyncio.sleep)和随机化的 User‑Agent(httpx)。

掌握这些基础后,你就可以构建更高级的侦察流水线,集成额外的数据源,并顺利过渡到全规模渗透测试或漏洞赏金工作流。

Back to Blog

相关文章

阅读更多 »