引言
在网络安全领域,子域名扫描是一项重要的信息收集技术,尤其是用在各种SRC漏洞挖掘时特别有用,找到一个冷门的子域名,往往意味着价值1000元甚至60万元
以每个越权漏洞5万元计算,通过一个大厂废弃站点赚300万的案例并不鲜见。
本文将介绍如何使用Python开发一个高效的子域名扫描工具,该工具不仅能快速发现子域名,还能收集HTTPS证书信息,以及HTTPS过期时间。
开源工具地址
核心功能实现
1. 多线程扫描
MAX_THREADS = 1000
with ThreadPoolExecutor(max_workers=MAX_THREADS) as executor:
executor.map(process_subdomain, prefixes)
通过使用ThreadPoolExecutor实现多线程并发扫描,显著提高扫描效率。每个线程负责检查一个子域名,最大支持1000个并发线程。
2. 子域名存在性验证
def check_subdomain_exists(subdomain):
try:
socket.gethostbyname(subdomain)
return True
except socket.gaierror:
return False
使用socket库的gethostbyname()函数验证子域名是否存在,通过DNS解析来确认。
3. HTTPS证书检查
def check_https_certificate(subdomain):
try:
context = ssl.create_default_context()
with socket.create_connection((subdomain, 443)) as sock:
with context.wrap_socket(sock, server_hostname=subdomain) as secure_sock:
cert = secure_sock.getpeercert()
return {
'subject': dict(x[0] for x in cert['subject']),
'issuer': dict(x[0] for x in cert['issuer']),
'notBefore': cert['notBefore'],
'notAfter': cert['notAfter']
}
except Exception:
return None
获取域名的HTTPS证书信息,包括证书主题、颁发者、有效期等重要信息。
使用方法
-
准备字典文件:
- 在dict目录下创建next_sub.txt文件
- 添加常用的子域名前缀
-
运行命令:
python script.py domain.com
- 输出结果:
- 扫描结果保存在out目录下
- domain.com.txt:包含发现的所有子域名
- domain.com_certs.txt:包含证书详细信息
性能优化建议
-
调整线程数:
- 根据服务器配置适当调整MAX_THREADS值
- 建议在500-2000之间权衡
-
超时控制:
- 为socket连接设置合理的超时时间
- 避免因单个域名卡住影响整体扫描效率
-
字典优化:
- 使用高质量的子域名字典
- 定期更新和维护字典内容
注意事项
-
合法使用:
- 仅用于授权的安全测试
- 遵守相关法律法规
-
资源消耗:
- 注意控制扫描速率
- 避免对目标服务器造成压力
-
结果验证:
- 对扫描结果进行人工复查
- 注意防止误报和漏报
通过以上方法,我们可以快速高效地发现目标网站的子域名,为后续的安全评估提供基础信息支持。该工具的多线程设计和证书信息收集功能,使其成为一个实用的子域名扫描工具。
效果
- 你会发现速度很快。