注意:此脚本可能会违反网站的使用条款和法律法规。在使用此脚本之前,请确保您有权进行此类攻击,并且仅攻击您有权攻击的目标。
主要思路如下:
-
build_wordlist
函数:从给定的单词列表文件中构建单词队列。如果指定了恢复点,则从该点开始构建队列。 -
dir_bruter
函数:尝试使用给定的单词列表中的每个单词进行目录爆破。如果指定了扩展名,则还会尝试使用每个单词加上扩展名进行目录爆破。如果找到了有效的URL,则会打印出来。 - 主函数:从用户输入中获取目标URL和单词列表文件路径。然后使用build_wordlist函数构建单词队列,并使用多线程启动dir_bruter函数进行目录爆破。
实际参考如下:
# 导入必要的库
from turtle import done
import urllib.request
import urllib.error
import urllib.parse
import threading
import queue
# 设置常量
threads = 50 # 线程数
target = input("\nInsira URL:") # 目标URL
wordlist = "D:\Meu jogos Meus documentos\ProgetoNovo\small.txt" # 字典文件路径
resume = None # 恢复点
user_agent = "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0" # 用户代理
# 输出提示信息
print("\033[31m\n\t******* WEBSITE BRUTE FORCE ATTACK *******\033[m\n\n")
# 定义函数:读取字典文件
def build_wordlist(wordlist):
# 打开字典文件
fd = open(wordlist,"r")
# 读取文件内容
raw_words = [line.rstrip('\n') for line in fd]
# 关闭文件
fd.close()
# 初始化变量
word = raw_words
found_resume = False
words = queue.Queue()
# 遍历字典文件中的每个单词
for word in raw_words:
# 如果有恢复点,则从恢复点开始
if resume:
if found_resume:
words.put(word)
else:
if word == resume:
found_resume = True
print("Resuming wordlist from: %s" % (resume))
else:
words.put(word)
return words
def dir_bruter(extensions=None):
# 定义一个目录爆破函数,用于尝试每个目录
while not word_queue.empty():
# 当单词队列不为空时,获取队列中的下一个单词
attempt = word_queue.get()
attempt_list = []
# 如果单词中没有".",则将其添加到目录列表中
if "." not in attempt:
attempt_list.append("/%s/" % (attempt))
else:
attempt_list.append("/%s" % (attempt))
# 如果有扩展名,则将其添加到目录列表中
if extensions:
for extension in extensions:
attempt_list.append("/%s%s" % (attempt, extension))
# 尝试每个目录
for brute in attempt_list:
url = "%s%s" % (target, urllib.parse.quote(brute))
try:
# 构建请求头并发送请求
header = {"User-Agent": user_agent}
request = urllib.request.Request(url, headers=header)
response = urllib.request.urlopen(request)
# 如果响应的长度大于0,则表示目录存在
if len(response.read()):
print("\033[32m[%d] => %s" % (response.code, url))
except urllib.error.HTTPError as e:
# 如果响应代码不是404,则表示目录存在
if e.code != 404:
print("\033[31m !!! %d => %s" % (e.code, url))
pass
except urllib.error.URLError:
pass
word_queue = build_wordlist(wordlist)
extensions = [".php",".bak",".orig",".inc"]
print("[*] Iniciando o Brute com Wordlist\n")
temp = 0
for i in range(threads):
temp = temp + 1;
t = threading.Thread(target=dir_bruter,args=(extensions,))
t.start()
# 如果线程数达到49,输出攻击结束的提示信息
if temp == 49:
print("************ ATAQUE DE FORÇA BRUTA TERMINADO ************")
有不同的方式可以加q讨论:99270043
再次提示注意:此脚本可能会违反网站的使用条款和法律法规。在使用此脚本之前,请确保您有权进行此类攻击,并且仅攻击您有权攻击的目标。