目录
前言
众所周知,渗透测试的灵魂就是信息收集,而子域名子站作为主站的“边角料”,安全程度一般来说相对于主站是较弱一些的,因此我们可以选择从子域名入手。所以说渗透过程中尽可能多的找到子域名,就多一分找到漏洞的可能。
读取字典
读取字典中的子域名,然后拼接成一个完整域名。
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)