利用Python实现子域名简单收集

发布于:2024-12-08 ⋅ 阅读:(124) ⋅ 点赞:(0)

免责申明

        本文仅是用于学习研究子域名信息收集,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】及其所在国家地区相关法规内容 如您继续阅读该文章即表明您默认遵守该内容。

一、需求描述

        正常我们对子域名信息进行主动收集的时候是对一个个子域名进行ping之类的方法收集,查看是否有对应的IP地址返回;这样的话会很慢,效率太低;我们希望可以提高效率可以让程序自动获取到有用的子域名内容。

二、实现思路

        我们可以使用Python程序结合子域名字典进行枚举获取;但是使用字典枚举获取有局限【即能获取到多少子域名信息,完全取决于字典的覆盖程度】

        请注意:使用程序进行自动获取子域名内容的时候会造成较大的流量,可能会触发目标系统的安全产品的警告。

三、简单子域名字典枚举方法获取

3.1、获取子域名字典

GitHub - TheKingOfDuck/fuzzDicts: You Know, For WEB Fuzzing ! 常用的字典。You Know, For WEB Fuzzing ! 日站用的字典。. Contribute to TheKingOfDuck/fuzzDicts development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/TheKingOfDuck/fuzzDicts

3.2、简单的Python配合字典收集子域名

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
-------------------------------------------------------------------------------
Title:"网安渗透" 项目
	主题:子域名信息收集
Description:
	功能:
	  1、根据主域名与子域名字典获取到所有可用的域名
Date:2024
Version:0.1
Author:Coffee
Environment:Python 3.x
Modify Recoder:
-------------------------------------------------------------------------------
"""
import socket
import os
import sys
import time

'''
    收集域名信息
    mainDomain:主域名(如:baidu.com)
    domainDic:子域名字典(子域名字典内容如:www、shop、it等)
    saveDomainFile:保存子域名与主域名的文件
'''
def CollectSubDomain(mainDomain,domainDic,saveDomainFile):
    for subDomain in open(domainDic):
        subDomain = subDomain.replace('\n', '')
        fullDomain = f'{subDomain}.{mainDomain}'
        try:
            domainIP = socket.gethostbyname(fullDomain)
            fullDomainAndIp = f'{fullDomain}-->{domainIP}'
            print(fullDomainAndIp)
            saveDomainFile.write(fullDomainAndIp+"\n")
            time.sleep(0.5)
        except Exception as e:
            pass
    saveDomainFile.close()

'''
    使用参数收集子域名信息
    使用方法示例:CollectSubDomainName.py -dd dic.txt -md baidu.com
'''
def usePara_CollectSubDomain():
    realPara = sys.argv
    usePara = ['-dd','-md']
    domainDic = getCurNextData(usePara[0],realPara)
    print(f"域名字典:{domainDic}")
    mainDomain = getCurNextData(usePara[1], realPara)
    print(f"主域名:{mainDomain}")
    f = open(f'{mainDomain}.txt', 'a')
    CollectSubDomain(mainDomain,domainDic,f)

'''
    获取当前内容的下一个数据
    curData:当前数据
    ListData:列表
'''
def getCurNextData(curData,ListData):
    if curData in ListData:
        nextData=ListData[ListData.index(curData)+1]
        return nextData


if __name__ == '__main__':
    if len(sys.argv) == 5:
        usePara_CollectSubDomain()
    else:
        mainDomain = input("请输入需要收集的主域名字(如:coffee.com):")
        domainDic = input("请输入需要使用的子域名字典(如:c:\\\\dic.txt):")
        if not mainDomain or not domainDic:
            exit(0)
        else:
            f = open(f'{mainDomain}.txt', 'a')
            CollectSubDomain(mainDomain,domainDic,f)

 

四、其他关于子域名信息收集的资料

信息收集系列|子域名收集姿势总结 - FreeBuf网络安全行业门户icon-default.png?t=O83Ahttps://www.freebuf.com/vuls/328801.html史上最全的子域名搜集方法(证书透明度/DNS记录/威胁情报/代码仓库/dns暴力破解/各种细节)背景信息收集在安全测试当中有相当重要的作用,信息收集的程度决定了安全测试的广度和深度,而在信息收集中,初期的子域名收集尤为重要。本文将从主动信息收集和被动信息收集两个维度阐述子域名收集的方法,并给出详细的网址,方便大家查询。子域名收集一、被动信息收集 利用Google提出的证书透明度(Certifiicon-default.png?t=O83Ahttps://www.cnblogs.com/bighammerdata/p/13268624.html子域名探测方法大全子域名探测方法 在线接口 暴力枚举 搜索引擎 Certificate Transparency(证书透明) Subject Alternate Name (SAN) - 主题备用名称 Public datasets(公开数据集) 信息泄露 内容解析(HTML,JavaScript,文件) DNS解析icon-default.png?t=O83Ahttps://www.cnblogs.com/forforever/p/14197630.html红蓝对抗之域名搜集方法总结 - 博客 - 腾讯安全应急响应中心 腾讯安全应急响应中心,Tencent Security Response Center,TSRCicon-default.png?t=O83Ahttps://security.tencent.com/index.php/blog/msg/161


网站公告

今日签到

点亮在社区的每一天
去签到