如何10分钟内快速找出特定网站所有子域名,以便安全扫描

225 阅读2分钟

引言

在网络安全领域,子域名扫描是一项重要的信息收集技术,尤其是用在各种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证书信息,包括证书主题、颁发者、有效期等重要信息。

使用方法

  1. 准备字典文件:

    • 在dict目录下创建next_sub.txt文件
    • 添加常用的子域名前缀
  2. 运行命令:

python script.py domain.com
  1. 输出结果:
    • 扫描结果保存在out目录下
    • domain.com.txt:包含发现的所有子域名
    • domain.com_certs.txt:包含证书详细信息

性能优化建议

  1. 调整线程数:

    • 根据服务器配置适当调整MAX_THREADS值
    • 建议在500-2000之间权衡
  2. 超时控制:

    • 为socket连接设置合理的超时时间
    • 避免因单个域名卡住影响整体扫描效率
  3. 字典优化:

    • 使用高质量的子域名字典
    • 定期更新和维护字典内容

注意事项

  1. 合法使用:

    • 仅用于授权的安全测试
    • 遵守相关法律法规
  2. 资源消耗:

    • 注意控制扫描速率
    • 避免对目标服务器造成压力
  3. 结果验证:

    • 对扫描结果进行人工复查
    • 注意防止误报和漏报

通过以上方法,我们可以快速高效地发现目标网站的子域名,为后续的安全评估提供基础信息支持。该工具的多线程设计和证书信息收集功能,使其成为一个实用的子域名扫描工具。

效果

  • 你会发现速度很快。

image.png