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
```
## 🖼️ 输出示例

## 📄 许可证
MIT License — 可免费使用、改进和分享。
## ⚠️ 免责声明
请负责任地使用。仅扫描你 **拥有** 或有 **明确许可** 分析的域。
未经授权的访问或探测可能是非法的。
标签:AWS S3, Azure Blob, CNAME解析, DNS服务器, Docker, GCP Storage, GitHub, Go语言, ORM, 云存储安全, 公有云, 存储桶发现, 安全防御评估, 对象存储, 批量查询, 程序破解, 网络扫描, 网络流量分析, 请求拦截, 资产探测, 足迹分析, 逆向工具