74 lines
2.9 KiB
Markdown
74 lines
2.9 KiB
Markdown
### 如何处理子域名爆破的泛解析问题
|
||
|
||
**1. 泛解析的探测与识别**
|
||
|
||
在进行子域名爆破之前,第一步是确定目标域名是否开启了泛解析
|
||
|
||
**操作方法:**
|
||
|
||
1. **随机生成一个不存在的子域名**:例如,`random-string-123.example.com`。这个字符串要足够随机且复杂,以确保它不可能是真实存在的子域名
|
||
2. **对其进行 DNS 查询**:使用 `ping`、`dig` 或 `nslookup` 等命令来查询其 IP 地址
|
||
3. **记录返回的 IP 地址**:如果返回了一个 IP 地址,那么这个地址很可能就是泛解析的地址
|
||
|
||
为了提高准确性,你可以多生成几个随机子域名并重复上述步骤。如果它们都解析到相同的 IP 地址,那么就可以确认泛解析已开启,且你已经找到了泛解析的 IP 地址
|
||
|
||
|
||
|
||
**2. 爆破过程中的泛解析过滤**
|
||
|
||
确认泛解析后,在进行子域名爆破时,你需要过滤掉所有解析到泛解析 IP 地址的结果
|
||
|
||
**操作方法:**
|
||
|
||
1. **使用专门的工具**:许多现代的子域名爆破工具,如 **Subfinder**、**Massdns**、**Amas** 等,都内置了泛解析过滤功能。它们会在爆破前自动进行泛解析检测,并在爆破过程中自动过滤掉泛解析结果
|
||
2. **手动处理(脚本化)**:如果你使用的是不具备自动过滤功能的工具,或者想自己编写脚本,可以采用以下策略:
|
||
- **第一步:获取 IP 列表**
|
||
- 运行你的爆破工具,例如 `dnsrecon` 或 `fierce`,并将所有解析出的子域名及其 IP 地址保存到一个文件中
|
||
- **第二步:过滤泛解析**
|
||
- 编写一个简单的脚本(Python、Bash 等)
|
||
- 遍历文件中的每一行数据(`子域名 IP`)
|
||
- 对比每个 IP 地址,如果它等于之前探测到的泛解析 IP 地址,就将其所在的行删除或标记
|
||
- 最后,你剩下的就是非泛解析的、真实存在的子域名
|
||
|
||
**一个简单的 Python 脚本示例:**
|
||
|
||
```python
|
||
import sys
|
||
|
||
def filter_wildcard(input_file, wildcard_ip):
|
||
"""
|
||
过滤包含泛解析 IP 的子域名
|
||
"""
|
||
try:
|
||
with open(input_file, 'r') as f:
|
||
lines = f.readlines()
|
||
|
||
filtered_domains = []
|
||
for line in lines:
|
||
parts = line.strip().split()
|
||
if len(parts) >= 2:
|
||
domain, ip = parts[0], parts[1]
|
||
if ip != wildcard_ip:
|
||
filtered_domains.append(domain)
|
||
|
||
return filtered_domains
|
||
|
||
except FileNotFoundError:
|
||
print(f"Error: The file '{input_file}' was not found.")
|
||
sys.exit(1)
|
||
|
||
if __name__ == "__main__":
|
||
if len(sys.argv) != 3:
|
||
print("Usage: python filter_domains.py <input_file> <wildcard_ip>")
|
||
sys.exit(1)
|
||
|
||
input_file = sys.argv[1]
|
||
wildcard_ip = sys.argv[2]
|
||
|
||
real_domains = filter_wildcard(input_file, wildcard_ip)
|
||
|
||
print("Found the following real subdomains:")
|
||
for domain in real_domains:
|
||
print(domain)
|
||
```
|