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