Поиск поддоменов — неотъемлемая часть подготовки ко взлому, а благодаря некоторым инструментам противостояние этим действиям стало намного проще.
Незащищенные поддомены подвергают вашу деятельность серьезной опасности, а в последнее время произошел целый ряд инцидентов, при которых взломщики воспользовались поддоменами для обхода защиты.
В случае последнего из череды инцидентов весь код сайта 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, который включает все обнаруженные поддомены!