Python 子域名爆破

目录

前言

众所周知,渗透测试的灵魂就是信息收集,而子域名子站作为主站的“边角料”,安全程度一般来说相对于主站是较弱一些的,因此我们可以选择从子域名入手。所以说渗透过程中尽可能多的找到子域名,就多一分找到漏洞的可能。

读取字典

读取字典中的子域名,然后拼接成一个完整域名。

with open(path, mode='r+') as f1: #path为字典文件路径
    for line in f1.readlines():
        subdomin = line.replace('\n', "") #去除字典中的换行字符
        subdomin = subdomin + '.' + domain #拼接成完整域名
        urls.append(subdomin)

请求域名

请求域名,根据返回值判断域名是否存在

for url in urls:
    try:
        response = requests.get(url='http://'+url,headers=head,timeout=3)
        if response.status_code in [200,302,403]:
            result.append(url)
            with open(domain+'.txt',mode='a+',encoding='utf-8') as f2:
                f2.write(url+'\n')
            print('成功找到域名%s' %url)
    except:
        print('没有域名%s'%url)

这段代码为核心代码,首先for 语句遍历urls列表中的所有域名,然后将请求每个域名,注意请求的时候一定是http://域名 所以本段代码中直接在Http请求中拼接的url。
try… except…语句作用是抛出异常,有些域名不存在则抛出异常,如果没有这个语句,遇到不存在的域名时候会报错,程序直接停止。

完整版代码

import requests

path = './dic.txt'         #字典路径
domain = 'qq.com'     #要爆破的域名
head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'
}
urls=[]
result = []

with open(path, mode='r+') as f1:
    for line in f1.readlines():
        subdomin = line.replace('\n', "")
        subdomin = subdomin + '.' + domain
        urls.append(subdomin)

for url in urls:
    try:
        response = requests.get(url='http://'+url,headers=head,timeout=3)
        if response.status_code in [200,302,403]:
            result.append(url)
            with open(domain+'.txt',mode='a+',encoding='utf-8') as f2:
                f2.write(url+'\n')
            print('成功找到域名%s' %url)
    except:
        print('没有域名%s'%url)

if len(result) > 0:
    print('\n')
    print('====================== 子域名爆破结果 ==========================')
    print('\n')
    print("共找到域名%d条" %len(result))
    print(result)

Python 子域名爆破

上一篇:后置处理器


下一篇:2021.3.2 爬虫基本框架