Доброго всем времени суток.
Помогите пожалуйста сделать динамическую смену вывода принта. Сейчас объясню
Программа через словарь проверяет сайты на скрытые разделы.
Пока ответ сайта 404 он держится на одной линии
Как только ответ другой, 200, 301 и тд этот ответ занимает эту линию и дальше опускается на 1 линию вниз и так до конца
Вот функция которая выводит это все
А ниже приложу весь код в спойлере.
Помогите пожалуйста сделать динамическую смену вывода принта. Сейчас объясню
Программа через словарь проверяет сайты на скрытые разделы.
Пока ответ сайта 404 он держится на одной линии
Как только ответ другой, 200, 301 и тд этот ответ занимает эту линию и дальше опускается на 1 линию вниз и так до конца
Вот функция которая выводит это все
А ниже приложу весь код в спойлере.
Python:
def get_site_dirs():
"""Функция проверяет директории"""
counter = 0
try:
for target_dir in DIRS:
target_url = DOMAIN + target_dir.strip() + '/'
host_answer = requests.get(target_url, allow_redirects=False)
counter += 1
if host_answer.status_code == 404:
print(f"{counter:08d} of {len(DIRS)}\t{host_answer.status_code}\t{target_url}")
else:
writetxt(f"{counter:08d} of {len(DIRS)} {host_answer.status_code} --> {target_url}")
print_host_answers(host_answer.status_code, counter, target_url)
except KeyboardInterrupt:
print(Fore.RED + 'ERROR: manually stop Ctrl+C' + Fore.RESET)
Python:
import requests
import argparse
import sys
import os
from colorama import Fore
import colorama
colorama.init()
DOMAIN = ""
DIRS = []
def greetings():
"""Функция отображает приветствие пользователя"""
print(Fore.GREEN + '''
╔═══╗╔══╗╔═══╗ ╔═══╗╔╗─╔╗╔════╗╔════╗╔═══╗╔═══╗
╚╗╔╗║╚╣║╝║╔═╗║ ║╔══╝║║─║║╚══╗═║╚══╗═║║╔══╝║╔═╗║
─║║║║─║║─║╚═╝║ ║╚══╗║║─║║──╔╝╔╝──╔╝╔╝║╚══╗║╚═╝║
─║║║║─║║─║╔╗╔╝ ║╔══╝║║─║║─╔╝╔╝──╔╝╔╝─║╔══╝║╔╗╔╝
╔╝╚╝║╔╣║╗║║║╚╗ ║║───║╚═╝║╔╝═╚═╗╔╝═╚═╗║╚══╗║║║╚╗
╚═══╝╚══╝╚╝╚═╝ ╚╝───╚═══╝╚════╝╚════╝╚═══╝╚╝╚═╝
''' + Fore.RESET)
def check_wordlist_file(path_to_wordlist):
"""Функция проверяет наличие файла со словарём"""
if not os.path.isfile(path_to_wordlist.replace("\'", "")):
print(f"{path_to_wordlist}\nФайл со словарём не найден.")
sys.exit(0)
fill_dirs_from_file(path_to_wordlist)
def set_url_format(hostname):
"""Функция проверяет форматирование url сайта"""
global DOMAIN
if hostname.split('/')[-1] == 'FUZZ':
hostname = hostname[:-4]
if hostname[-1] != "/":
hostname += "/"
DOMAIN = hostname
check_site_annotaion()
def check_site_annotaion():
"""Функция проверяет есть ли коннект с хостом"""
try:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"}
response = requests.get(DOMAIN, headers=headers, timeout=1)
response.raise_for_status()
if response.status_code == 200:
print('ОК!')
except (requests.exceptions.HTTPError, requests.exceptions.Timeout) as e:
print('Ошибка: %s' % e)
sys.exit(0)
def check_main_args():
"""Функция проверяет наличие аргументов сайта и словаря"""
if not arg.wordlist or not arg.url:
parser.print_help()
sys.exit(0)
def check_app_keys():
"""Функция проверяет правильность аргументов"""
# Наличие аргументов
check_main_args()
# Доступность файла словаря
check_wordlist_file(arg.wordlist)
# Форматирование url сайта и доступность хоста
set_url_format(arg.url)
print(f"\nРаботаем с сайтом {arg.url}. Путь к словарю {arg.wordlist}\n")
def fill_dirs_from_file(dirs_file):
"""Функция читает файл с адресами папок в список"""
with open(dirs_file, "r") as reader:
for line in reader.readlines():
DIRS.append(line)
print("\nЗагружено строк из словаря: " + str(len(DIRS)) + "\n")
def writetxt(results):
"""Функция записывает результаты в файл"""
with open('fuzz.txt', 'a', encoding='utf-8') as file:
file.write(results + '\n')
def print_host_answers(status_code, counter, url):
"""Функция отображает ответы хостов"""
if status_code == 200:
status_code = f'\033[32m{str(status_code)}\033[0m'
elif status_code == 301 or status_code == 302:
status_code = f'\033[94m{str(status_code)}\033[0m'
elif status_code == 403:
status_code = f'\033[31m{str(status_code)}\033[0m'
print(f"{counter:08d} of {len(DIRS)}\t{status_code}\t{url}")
def get_site_dirs():
"""Функция проверяет директории"""
counter = 0
try:
for target_dir in DIRS:
target_url = DOMAIN + target_dir.strip() + '/'
host_answer = requests.get(target_url, allow_redirects=False)
counter += 1
if host_answer.status_code == 404:
print(f"{counter:08d} of {len(DIRS)}\t{host_answer.status_code}\t{target_url}")
else:
writetxt(f"{counter:08d} of {len(DIRS)} {host_answer.status_code} --> {target_url}")
print_host_answers(host_answer.status_code, counter, target_url)
except KeyboardInterrupt:
print(Fore.RED + 'ERROR: manually stop Ctrl+C' + Fore.RESET)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Dir Fuzzer', usage='Script options')
parser.add_argument('-u', '--url', help='Enter domain https://site.com')
parser.add_argument('-w', '--wordlist', help='Name and path of the wordlist')
arg = parser.parse_args()
greetings()
check_app_keys()
get_site_dirs()
Последнее редактирование: