olizimmermann/s3dns

GitHub: olizimmermann/s3dns

一款轻量级 DNS 服务器,通过分析 DNS 流量与 CNAME 链被动发现 AWS、Azure 等云平台的存储桶资源。

Stars: 122 | Forks: 13

# S3DNS **s3dns** 是一个轻量级 DNS 服务器,通过解析 DNS 请求、追踪 CNAME 并匹配已知的存储桶 URL 模式,帮助发现云存储桶(AWS S3、Google Cloud Storage 和 Azure Blob)。 对于希望在 DNS 流量分析期间捕获暴露的云存储桶的**渗透测试人员**、**漏洞赏金猎人**和**云安全分析师**来说,它是一个非常实用的工具。 ### 🆕 2025/08/19 更新 * 添加了离线 AWS IP 范围 JSON 文件。 * 添加了离线 Azure Storage IP 范围 JSON 文件。 * 添加了使用以下选项禁用任一服务 IP 范围检查的功能: * `AZURE_IP_RANGES=false` 或 `AWS_IP_RANGES=false`(默认为 true)。 * 将 `regex_patterns` 和硬编码模式移至 `patterns` 文件夹作为 YAML 文件。你可以添加自己的模式。 * **正则表达式模式必须以 `regex_` 开头。** * 添加了更多云服务提供商 * IBM Cloud Object Storage * Oracle Object Storage * Alibaba OSS * Backblaze B2 * Linode Object Storage * Scaleway Object Storage * Vultr Object Storage * Cloudflare R2 ### 🆕 2025/06/21 更新 * 添加了 AWS GovCloud 支持。 ### 🆕 2025/04/16 更新 * 更新了正则表达式模式。 * 更新了输出以提高可见性(显示 CNAME 的原始域、客户端 IP 和 IP 范围指示符)。 * 自动从 AWS 下载 IP 范围 —— 现在也会检查这些范围! * 可以添加你自己的 IP 范围(手动调整类中的模式或 IP 范围)。 ### 🆕 2025/04/14 更新 * 为 **Google Cloud Storage** 和 **Azure Blob Storage** 存储桶添加了正则表达式支持。 ## 🚀 功能 * 作为 DNS 服务器运行(端口 `53/udp`) * 检测 DNS 请求中潜在的云存储桶: * **AWS S3**(虚拟主机和路径样式) * **GCP Buckets** * **Azure Blob Containers** * 跟踪 **CNAME 链** 以捕获隐藏的云存储桶链接 * 将存储桶指示符记录到控制台和文件 * 超轻量级且对容器友好 ## ⚙️ 工作原理 S3DNS 监听 **UDP 端口 53** 上的 DNS 查询。对于每个 DNS 请求,它会: 1. **提取请求的域** 2. **将请求转发给真实的 DNS 解析器**(例如 `1.1.1.1`) 3. **将有效的 DNS 响应返回给客户端** 与此同时,它会: * **检查 AWS/GCP/Azure 存储桶模式** * **根据已知的 IP 范围检查** AWS S3 和 Azure Blob Storage * **递归跟踪 CNAME 链** * **记录类似存储桶的域名和发现结果** ⚡ **在你的侦察期间将其用作 DNS**,它将指示你查询的任何域是否指向云存储桶。 ## 🧱 前置条件 你只需要以下其中之一: * Python **3.11+** * Docker(可选,但推荐) ## 🔧 安装 *仅在你想使用 Python 在本地运行时需要* ### 克隆仓库 ``` git clone https://github.com/olizimmermann/s3dns.git cd s3dns ``` ### 安装依赖 (建议使用虚拟环境) ``` python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ## 🧪 用法 ### 使用 Python 运行 端口 53 需要提升权限: ``` sudo python s3dns.py ``` *如果使用 `sudo` 的命令提示缺少模块,请尝试使用:`sudo venv/bin/python s3dns.py`* * 如果你自己构建镜像,请确保将其标记为与 Docker Hub 版本相同的标签以保持一致性:`docker build -t ozimmermann/s3dns:latest .` ### 使用 Docker *开始使用 S3DNS 的最简单方法。* ``` docker pull ozimmermann/s3dns:latest docker run --rm -p 53:53/udp \ -v "./bucket_findings/:/app/buckets/" \ --name "s3dns" \ ozimmermann/s3dns:latest ``` ### 使用 Docker 构建并运行 ``` docker build -t ozimmermann/s3dns:latest . ``` ``` docker run --rm -p 53:53/udp \ -v "./bucket_findings/:/app/buckets/" \ --name "s3dns" \ ozimmermann/s3dns:latest ``` 📁 发现结果保存位置: * 在 **终端** 中,和/或 * 在 `./bucket_findings/` 中 ### 故障排除 在同一台机器上使用 S3DNS 进行分析时,设置 `--network host` 标志可能会有所帮助: ``` docker run --rm -p 53:53/udp \ -v "./bucket_findings/:/app/buckets/" \ --network host \ --name "s3dns" \ ozimmermann/s3dns:latest ``` 由于端口 53 需要提升权限,某些用户(例如 Mac 用户)可能需要 `sudo`: ``` sudo docker run --rm -p 53:53/udp \ -v "./bucket_findings/:/app/buckets/" \ --name "s3dns" \ ozimmermann/s3dns:latest ``` ## 🌐 在侦察中使用 S3DNS 将你的系统或工具的 **DNS 解析器** 设置为你的 S3DNS 实例。 在分析站点时被动使用它,以 **在不主动探测的情况下发现暴露的存储桶**。 ## ⚙️ 配置 你可以通过环境变量或修改 `s3dns.py` 来调整行为。 ### 环境变量 * `DEBUG`:启用调试模式(默认值:`false`) * `AWS_IP_RANGES`:启用 AWS IP 范围检查(默认值:`true`) * `AZURE_IP_RANGES`:启用 Azure IP 范围检查(默认值:`true`) * `REAL_DNS_SERVER_IP`:设置真实的 DNS 服务器 IP(默认值:`1.1.1.1`) * `LOCAL_DNS_SERVER_IP`:设置本地 DNS 服务器 IP / 监听接口(默认值:`0.0.0.0`) * `BUCKET_FILE`:设置存储桶文件路径(默认值:`buckets.txt`) #### ⚠️ 关于 Azure IP 范围的信息 由于 Microsoft 没有明确命名其 Azure Blob Storage IP 范围,S3DNS 使用 **所有公开提供的 Azure Storage IP 地址**。这可能会导致误报。如果你遇到问题,请考虑通过设置以下选项来禁用此检查: ``` AZURE_IP_RANGES=false ``` ### 添加自定义模式 随时可以通过将模式添加到 `patterns` 目录来自定义你的模式。你可以使用所需的模式创建新的 YAML 文件。如果需要修改现有模式,可以直接在相应的 YAML 文件中进行修改。 请务必遵循现有模式文件中使用的命名约定。对于基于正则表达式的模式,请以 `regex_` 开头。所有其他模式将被视为硬匹配/硬编码模式。 ### 调试模式 **Python:** ``` su export DEBUG=TRUE python s3dns.py ``` **Docker:** ``` docker run --rm -p 53:53/udp \ -v "./bucket_findings/:/app/buckets/" \ -e "DEBUG=TRUE" \ --name "s3dns" \ ozimmermann/s3dns:latest ``` 在 Docker 中设置其他环境变量: ``` docker run --rm -p 53:53/udp \ -v "./bucket_findings/:/app/buckets/" \ -e "LOCAL_DNS_SERVER_IP=0.0.0.0" \ -e "REAL_DNS_SERVER_IP=1.1.1.1" \ --name "s3dns" \ ozimmermann/s3dns:latest ``` ## 🖼️ 输出示例 ![Sample Output Docker](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e09253bedd114025.jpg) ## 📄 许可证 MIT License — 可免费使用、改进和分享。 ## ⚠️ 免责声明 请负责任地使用。仅扫描你 **拥有** 或有 **明确许可** 分析的域。 未经授权的访问或探测可能是非法的。
标签:AWS S3, Azure Blob, CNAME解析, DNS服务器, Docker, GCP Storage, GitHub, Go语言, ORM, 云存储安全, 公有云, 存储桶发现, 安全防御评估, 对象存储, 批量查询, 程序破解, 网络扫描, 网络流量分析, 请求拦截, 资产探测, 足迹分析, 逆向工具