Сканер поддоменов на Python

Поиск поддоменов — неотъемлемая часть подготовки ко взлому, а благодаря некоторым инструментам противостояние этим действиям стало намного проще.

Незащищенные поддомены подвергают вашу деятельность серьезной опасности, а в последнее время произошел целый ряд инцидентов, при которых взломщики воспользовались поддоменами для обхода защиты.

В случае последнего из череды инцидентов весь код сайта Vine можно было загрузить с незащищенного поддомена.

Поэтому цель статьи - показать процесс получения списка поддоменов.

Откройте новый файл Python и следуйте инструкциям, давайте исследуем родной susu.ru в демонстрационных целях. Я использовал его, потому знаю, что на susu.ru много поддоменов:

import requests

# домен для поиска поддоменов
domain = "susu.ru"

Теперь нам понадобится большой список поддоменов для сканирования, я использовал список из 100 поддоменов только для демонстрации. У меня есть файл «subdomains.txt» в текущем каталоге:

# читать все поддомены
file = open("subdomains.txt")
# прочитать весь контент
content = file.read()
# разделить на новые строки
subdomains = content.splitlines()

Теперь список поддоменов содержит поддомены, которые мы хотим протестировать, давайте их переберем в цикле:

# список обнаруженных поддоменов
discovered_subdomains = []
for subdomain in subdomains:
    # создать URL
    url = f"http://{subdomain}.{domain}"
    try:
        # если возникает ОШИБКА, значит, субдомен не существует
        requests.get(url)
    except requests.ConnectionError:
        # если поддомена не существует, просто передать, ничего не выводить
        pass
    else:
        print("[+] Обнаружен поддомен:", url)
        # добавляем обнаруженный поддомен в наш список
        discovered_subdomains.append(url)

Сначала мы создаем URL-адрес, подходящий для отправки запроса, затем мы используем функцию requests.get() для получения HTTP-ответа от сервера, это вызовет исключение ConnectionError всякий раз, когда сервер не отвечает, поэтому мы обернули это в блоке try/except.

Если исключение не возникло, значит субдомен существует. Запишем все обнаруженные поддомены в файл:
# сохраняем обнаруженные поддомены в файл:

with open("discovered_subdomains.txt", "w") as f:
    for subdomain in discovered_subdomains:
        print(subdomain, file=f)

Результат исполнения кода:

Как только он будет завершен, вы увидите новый файл discover_subdomains.txt, который включает все обнаруженные поддомены!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *