Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Loki — 🧙‍♂️ Node.js Command & Control для перехвата скриптов в уязвимых Electron-приложениях | Kitploit
Инструменты/GitHubGitHub/boku7/loki
Механизмы персистентностиЭксплуатацияОбход IDS/IPSШелл-кодПост-эксплуатацияКомандование и УправлениеRed TeamingРазработка Полезной Нагрузки
GitHubboku7/loki

Loki

🧙‍♂️ Node.js Command & Control для перехвата скриптов в уязвимых Electron-приложениях

Репозиторий
1.4k2204 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

🧙‍♂️ Loki Command & Control

Loki — это C2-фреймворк первой стадии (stage-1), написанный на Node.js, созданный для script-jacking’а уязвимых Electron-приложений MITRE ATT&CK T1218.015. Разработанный для red team-операций, Loki позволяет обходить защитное ПО и обходить контроль приложений за счёт эксплуатации доверенных, подписанных Electron-приложений.

Script-jacking перехватывает поток выполнения Electron-приложения, изменяя JavaScript-файлы, загружаемые во время выполнения, с помощью произвольного Node.js-кода. Этот приём можно использовать для:

  • Внедрения бэкдора в Electron-приложение
  • Опустошения (замены содержимого) Electron-приложения
  • Связывания выполнения с другим процессом

Хотя некоторые существующие инструменты уже используют script-jacking для связывания выполнения с другим процессом, Loki — первый, кто позволяет внедрять бэкдоры и опустошать (hollow) подписанные Electron-приложения без аннулирования их подписи кода.

Более подробно о том, как работает Loki, читайте в этом блоге:

  • Обход Windows Defender Application Control с помощью Loki C2

🚀 Авторы

ИмяВклад
Bobby CookeСоздатель и сопровождающий
Dylan TranСоздатель
Ellis SpringeАльфа-тестировщик
Shawn JonesКод выполнения сборок
Trusted SecКод COFFLoader
Simon ExleyАвтор видео
Clinton ElvesАвтор видео
John HammondАвтор видео

Видео

Посмотрите это видео от John Hammond о внедрении бэкдора в Cursor AI с помощью Loki C2! 🎩

  • В этом видео он рассказывает, как обнаружил новое уязвимое Electron-приложение, внедрил в него бэкдор с помощью Loki C2, настроил клиентский GUI, и мы даже придумали два способа, как постоянно удерживать приложение в фоне 🪄 — с точки зрения конечного пользователя Cursor работает как обычно! 🥷

Я внедрил бэкдор в Cursor AI

Посмотрите это видео от Simon Exley & Clinton Elves о том, как начать работу с Loki C2! 🧙‍♂️

Обход Windows Defender Application Control с помощью Loki C2

Возможности и детали

  • Канал C2 на базе Azure Storage Blob
    • SAS-токен для защиты учётной записи хранилища C2
  • AES-шифрование сообщений C2
  • Агент с поддержкой прокси (proxy-aware)
    • Использует дочерние процессы рендеринга Chromium для работы агента, выполнения шеллкода и выполнения сборок в стиле fork-n-run — наследует возможности Chromium по работе с прокси
  • Без Teamserver
    • В отличие от традиционных C2, где агенты отправляют сообщения на Teamserver, здесь Teamserver отсутствует
    • GUI-клиент и агенты выполняют check-in в одно и то же хранилище данных
  • Скрытое выполнение — работает в фоне

Команды

Все команды агента написаны на нативном Node.js и не требуют дополнительных зависимостей или событий загрузки библиотек. Исключение составляют команды scexec и assembly, которые выполняют загрузку библиотек keytar.node и assembly.node.

  • Все команды принимают пути с использованием /; \ в путях работать не будет.

Set — загрузка модулей из путей исключений контроля приложений

  • Если правила контроля приложений препятствуют загрузке библиотек для node-файлов, вы можете использовать команду set, чтобы изменить пути загрузки для assembly.node и scexec.node.
  • С помощью ls, cat, cp и mv вы можете перечислить правила контроля приложений и найти доступный для записи каталог, который является исключением.
  • После этого вы можете поместить node-файлы в каталог исключений и использовать команду set, чтобы изменить путь их загрузки на этот каталог и обойти контроль приложений.
  • Более подробно об этом векторе атаки см. в курсе CRTO2 от Daniel Duggan (@_RastaMouse)
root@kitploit:~
[04-04-2025 8:50AM MST] advsim$ help set
Set the Node load paths for assembly node and scexec nodes
	set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
	set assembly_path C:/Users/user/AppData/ExcludedApp/assembly.node
[04-04-2025 8:51AM MST] advsim$ set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
SCEXEC Node Load Path Set to : C:/Users/user/AppData/ExcludedApp/scexec.node

Возможности агента

Дополнительную информацию о возможностях агента смотрите здесь

Возможности клиента

Дополнительную информацию о возможностях клиента смотрите здесь

🧙‍♂️ Разверните иллюзии

Сначала вам нужно найти уязвимое Electron-приложение, которое не выполняет проверки целостности ASAR, например Microsoft Teams. В более новых приложениях могут быть проверки целостности, препятствующие внедрению бэкдора. Более старые версии целевого приложения с большей вероятностью окажутся уязвимыми.

  • Руководство по поиску уязвимых Electron-приложений

Простые инструкции

Вам не нужно компилировать агента при внедрении бэкдора в Electron-приложения. Просто замените содержимое {ELECTRONAPP}/resources/app/ файлами агента Loki.

Подробные инструкции

Шаг 1: Создайте учётную запись Azure Storage Blob и получите SAS-токен

  • Создание учётной записи Azure Storage через портал Azure
  • Создание учётной записи Azure Storage через Azure CLI

Шаг 2: Создайте обфусцированный Loki-пейлоад

  • Склонируйте этот репозиторий и выполните cd в него
  • Установите Node.js
  • Установите модуль javascript-obfuscator
root@kitploit:~
npm install --save-dev javascript-obfuscator
  • Запустите скрипт create_agent_payload.js, чтобы создать Loki-пейлоад с данными вашей учётной записи Storage
root@kitploit:~
bobby$ node create_agent_payload.js 
[+] Provide Azure storage account information:
        - Enter Storage Account  : 7f7584ty218ba5dba778.blob.core.windows.net
        - Enter SAS Token        : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D

[+] Configuration:
        - Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
        - SAS Token       : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
        - Meta Container  : mllyi2zjmafjm

[+] Updated /Users/bobby/apr2/LokiC2/config.js with storage configuration. 
 - Enter into the Loki Client UI
        Loki Client > Configuration

[+] Modifying PE binaries to have new hashes...
        - Payload assembly.node hash : e9d126407264821d3c2d324da0e2d1bc13cbc53e7c56340fe12b07f69b707f02
        - Payload keytar.node   hash : 292c14ffebd6cae3df99d9fbee525e29a5a704f076b82207eb3e650de45b075d

[+] Payload ready!
         - Obfuscated payload in the ./app directory

Шаг 3: Внедрение бэкдора в Electron-приложение

  • Ваш обфусцированный Loki-пейлоад сохраняется в ./app/
  • Перейдите в каталог {ELECTRONAPP}/resources/
  • Удалите всё содержимое
  • Скопируйте папку Loki ./app/ в {ELECTRONAPP}/resources/app/
  • Запустите PE-файл Electron и убедитесь, что Loki работает

Шаг 4: Настройка клиента Loki

  • Запустите GUI-клиент Loki

  • В строке меню нажмите Loki Client > Configuration, чтобы открыть окно настроек

  • Введите данные вашей учётной записи Storage и нажмите Save

  • Теперь агент должен отобразиться в панели управления (dashboard)

  • Нажмите на агента в таблице панели управления, чтобы открыть окно агента

  • Проверьте, что Loki работает корректно

Внедрение бэкдора в Electron-приложения и сохранение работы реального приложения в обычном режиме

Самый простой способ использования Loki — заменить файлы в {ELECTRONAPP}/resources/app/ файлами Loki. Это опустошает приложение, то есть оно перестаёт работать как обычно — Loki заменяет его функциональность.

Если вы действительно хотите, чтобы Electron-приложение продолжало работать, а Loki при этом разворачивался в фоне, — не всё потеряно! Мы с John Hammond придумали способ сохранить работу реального Electron-приложения. Мы добавили нужный вам файл в /loki/backdoor/init.js в этом репозитории.

Сейчас он настроен для работы с Cursor, уязвимость которого обнаружил John Hammond.

Для этого вам понадобится:

  • Скачайте приложение Cursor
  • Скопируйте все файлы Loki, кроме package.json, в cursor/resources/app/
    • Не заменяйте оригинальный package.json
  • Скопируйте /loki/backdoor/init.js в cursor/resources/app/
  • Измените содержимое cursor/resources/app/package.json:
    • установите "main":"init.js",
    • удалите "type":"module",
    • удалите "private":true,

Как это работает

  • С этими изменениями Cursor.exe при запуске/выполнении загружает init.js
  • init.js считывает package.json
  • init.js изменяет "main":"init.js", -> "main":"main.js",
    • main.js — это Loki
  • init.js запускает и отсоединяет новый Cursor.exe, который указывает на Loki
  • Loki запускается в фоне
  • init.js снова считывает package.json
  • init.js изменяет "main":"main.js", ->

Таким образом, приложение постоянно содержит бэкдор и работает как обычно. Если приложение Cursor закрыто, Loki продолжит работать в фоне.

Планы на будущее

В будущем я напишу скрипт для автоматизации этого процесса.

Рекомендации по OPSEC

  • Рекомендации по OPSEC

Руководства по компиляции

Здесь приведены инструкции по компиляции агентов и клиентов. Инструкции охватывают несколько платформ, включая Windows, Linux и macOS. Рекомендуется компилировать клиент на целевой платформе и архитектуре.

Клиент

  • Windows
  • macOS
  • Linux

Агенты

Если вы внедряете бэкдор в Electron-приложение, компилировать агентов не нужно.

Я не рекомендую компилировать агента и использовать его в операциях. Инструкции по компиляции агента предназначены для разработки.

  • Windows
  • Linux
  • macOS

Рекомендации по обнаружению

  • Изучите информацию, предоставленную MITRE, для получения более подробных сведений, примеров и информации об этом TTP:
    • MITRE ATT&CK T1218.015: Electron Applications
  • Запуск Electron-приложения из необычного каталога, например ~/Downloads/Teams/Teams.exe
  • Обращение Electron-приложений к Azure Storage Blob *.blob.core.windows.net (beaconing)
  • Использование SAS-токенов в сетевом трафике
  • Electron-приложения, порождающие дочерние процессы, такие как netstat.exe или whoami.exe
  • При выполнении JavaScript-кода Loki в процессе Electron в ~/AppData/Roaming/{NAME} будет создан каталог с именем из Loki package.json.
  • Эта запись LOLBAS Teams описывает обнаружение бэкдоров в Electron-приложениях. Информация об обнаружении приведена ниже.
  • IOC: создан каталог %LOCALAPPDATA%\Microsoft\Teams\current\app
  • IOC: файл %LOCALAPPDATA%\Microsoft\Teams\current\app.asar создан/изменён не установщиком/обновлением Teams
  • SIGMA-правило для обнаружения установленного канала Loki C2 из Electron-приложения

Ссылки || Благодарности || Наступательные исследования Electron

  • Dylan Tran (@d_tranman)
    • Соавтор агента Loki. Создал node-модули для выполнения шеллкода и сборок.
  • Valentina Palmiotti (@chompie1337), Ellis Springe (@knavesec) и Ruben Boonen за предыдущую внутреннюю работу по внедрению бэкдоров в Electron-приложения для персистентности
  • Ruben Boonen
    • Wild West Hackin’ Fest talk Statikk Shiv: Leveraging Electron Applications for Post-Exploitation
  • Andrew Kisliakov
    • Microsoft Teams and other Electron Apps as LOLbins
  • Shawn Jones
    • Для выполнения сборок в Loki Dylan портировал публичный код Шона InlineExecute-Assembly
  • mr.d0x (@mrd0x) за их предыдущую работу по использованию Electron-приложения Teams для выполнения произвольного Node.js-кода и публикации результатов в проекте LOLBAS.
  • Michael Taggart
    • Проект quASAR, инструмент для изменения Electron-приложений с целью выполнения команд
    • Quasar: компрометация Electron-приложений
  • Raphael Mudge за вдохновение глубоко погрузиться в red teaming и за поддержку выпуска этого инструмента
    • The Security Conversation
  • Fletcher Davis
    • BSides: Abusing Electron Applications
  • Pavel Tsakalidis

Лицензия

Этот проект распространяется под лицензией Business Source License 1.1. Некоммерческое использование разрешено в соответствии с условиями лицензии. Коммерческое использование требует явного разрешения автора. 3 апреля 2030 года эта лицензия будет преобразована в Apache 2.0. Полные условия см. в LICENSE.

Скачать инструмент
CommandDescription
helpПоказать справку. Использование: help или help scan
pwdПоказать рабочий каталог
lsСписок файлов и каталогов
catПоказать содержимое файла
envПоказать переменные окружения процесса
spawnЗапустить дочерний процесс
drivesСписок дисков
mvПереместить файл в новое место
sleepПриостановить выполнение на указанное число секунд с джиттером
cpСкопировать исходный файл в место назначения
exit-allЗавершить агент; агент больше не будет выходить на связь
loadЗагрузить node PE-файл с диска в процесс
scexecВыполнить шеллкод
assemblyВыполнить .NET-сборку и получить вывод команды
uploadЗагрузить файл с вашего локального компьютера оператора на удалённый агент
downloadСкачать файл с удалённого агента на локальный компьютер оператора
scanВыполнить TCP-сканирование сети в диапазоне CIDR по выбранным портам
dnsDNS-запрос. Использует системную DNS-конфигурацию
setЗадать пути загрузки Node для модулей assembly и scexec
bofВыполнить COFF-файл и вернуть вывод
"main":"./out/main.js",
  • ./out/main.js" — это настоящее приложение Cursor
  • init.js запускает и отсоединяет новый Cursor.exe, который указывает на настоящий Cursor
  • Настоящее приложение Cursor запускается, видимо пользователю и работает как обычно
  • Когда пользователь завершает работу Cursor:
    • init.js перехватывает завершение
    • init.js считывает package.json в третий раз
    • init.js изменяет "main":"./out/main.js", -> "main":"init.js",
  • SIGMA-правило для обнаружения перехвата папки приложения Electron (Teams, VS Code, RingCentral, Postman) с целью загрузки C2-фреймворка
  • BEEMKA — Electron Exploitation Toolkit