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

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

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

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

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

Категории

Все категории
Loading categories
EXCELntDonut — Excel 4.0 (XLM) Генератор макросов для внедрения DLL и EXE в память. | Kitploit
Инструменты/GitHubGitHub/redsiege/excelntdonut
Инструменты фишингаГенерация полезной нагрузкиЭксплуатацияШелл-кодФишингRed TeamingГенерация Шеллкода
GitHubredsiege/excelntdonut

EXCELntDonut

Excel 4.0 (XLM) Генератор макросов для внедрения DLL и EXE в память.

Репозиторий
517895 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| by @JoeLeonJr (@FortyNorthSec)

EXCELntDonut — это генератор макросов XLM (Excel 4.0). Начните с исходного кода на C# (EXE) и получите макрос XLM (Excel 4.0), который выполнит ваш код в памяти. Макросы XLM (Excel 4.0) могут быть сохранены в файлах .XLS.

Установка

root@kitploit:~
chmod +x install.sh
./install.sh

Что устанавливается?

  • pip3
  • mono-complete (как mcs, так и все возможные библиотеки, на которые вы ссылаетесь в своих исходных файлах)
  • EXCELntDonut в качестве CLI

Если вы хотите запускать EXCELntDonut просто как скрипт Python, вам нужно будет настроить виртуальное окружение с двумя пакетами: "pandas" и "donut-shellcode". Кроме того, вам нужно будет установить mono-complete с помощью apt-get и вызывать скрипт drive.py с помощью python3. Мы рекомендуем просто использовать скрипт ./install.sh, но решать вам.

Использование

root@kitploit:~
Usage:
	$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate

Flags:
	(required)
	-f путь к файлу, содержащему ваш исходный код на C# (только exe)

	-r Ссылки, необходимые для компиляции вашего кода на C# (те же, что используются при компиляции с mcs на Linux)
	(пример: -r 'System.Management')

	(optional)
	-o имя выходного файла
	--sandbox 
		Выполнить базовые проверки песочницы. Этот список будет обновляться по мере обнаружения новых подходов.
	--obfuscate 
		Выполнить базовую обфускацию макроса. 

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

Вы предоставляете файл C#, содержащий вашу полезную нагрузку (например, EXE с методом main, который выполняет полезную нагрузку Cobalt Strike). Этот файл C# компилируется с помощью MCS в две сборки .NET: x86 и x64. После компиляции замечательные инструменты Donut (для x86) и CLRvoyance (для x64) преобразуют каждую сборку в позиционно-независимый шеллкод. Затем все нулевые байты удаляются, так как макросы XLM (Excel 4.0) плохо работают с нулевыми байтами, и полезная нагрузка разбивается на строки длиной не более 255 символов (для x86) или 10 символов (для x64).

После подготовки шеллкода он объединяется с базовыми функциями внедрения в процесс (VirtualAlloc, WriteProcessMemory и CreateThread), а также функцией проверки архитектуры для определения того, какую полезную нагрузку (x86 или x64) следует запустить на целевой системе. Если вы выберете выполнение проверок песочницы или базовой обфускации, эти функции обновят ваш макрос. Наконец, результат помещается в CSV-файл (сохраняется как .txt).

Как создать макрос XLM (Excel 4.0)

После того как вы получили выходной файл от EXCELntDonut, откройте его в текстовом редакторе и скопируйте всё содержимое (Ctrl-A, Ctrl-C). Откройте Excel на виртуальной машине Windows, щелкните правой кнопкой мыши на "Лист 1" и выберите "Вставить". Выберите "Макрос MS Excel 4.0". Перейдите в ячейку A1 и вставьте вывод EXCELntDonut. Все данные, вероятно, будут вставлены в один столбец. Данные разделены точкой с запятой ";". Перейдите на вкладку "Данные" и нажмите "Текст по столбцам". Выберите "С разделителями" и на следующем экране выберите "Точка с запятой", затем нажмите "Готово". Макрос распределится по соответствующим столбцам и строкам.

(Примечание — если вы выбрали флаг "--obfuscate", вам придется довольно много прокручивать по горизонтали, чтобы найти свой фактический код, так как часть логики обфускации перемещает макрос в случайный раздел рабочего листа).

На этом этапе мы рекомендуем две вещи:

  1. Найдите начальную ячейку (верхняя левая ячейка вашего макрокода, скорее всего A1). Щелкните правой кнопкой мыши и выберите "Выполнить". Проверьте, работает ли ваш макрос.
  2. После того как вы убедитесь, что макрос работает, снова выберите эту же верхнюю левую ячейку. В левой части экрана должен быть раскрывающийся список с названием ячейки (скорее всего "A1"). Щелкните в раскрывающемся списке и измените текстовое значение на "Auto_open". Это обеспечит ту же автоматическую функциональность выполнения, к которой вы привыкли в макросах VBA.

Сохраните файл (.xls) и попробуйте его открыть. Он должен автоматически выполнить вашу полезную нагрузку.

Проверки песочницы

Эти проверки основаны на том, что реальные злоумышленники используют в своих вредоносных программах.

  1. Активна ли мышь?
  2. Превышает ли размер экрана 770 пикселей по ширине и 381 по высоте?
  3. Может ли хост воспроизводить звуки?
  4. Это машина под управлением Windows?

Обфускация

  1. Для инструкций внедрения в процесс (VirtualAlloc, WriteProcessMemory, CreateThread) и проверок песочницы все функции макроса будут преобразованы в следующую структуру:
root@kitploit:~
=FORMULA(D3&D23&D54&D23&D44,E45)

Функция FORMULA позволяет нам поместить формулу, которая может быть выполнена позже, в другую ячейку. Таким образом, в данном случае мы помещаем инструкции внедрения в процесс, а затем используем функцию FORMULA, чтобы поместить фактическую функцию в другую ячейку для выполнения. Это мешает защитникам, проводящим статический анализ, видеть такие вещи, как "VirtualAlloc".

  1. Весь макрос сдвинет некоторое значение вправо, так что при первоначальном открытии листа с макросами он будет казаться пустым.

Что нужно знать

  • Менее сложные полезные нагрузки просто используют команду =EXEC() для выполнения команд. Некоторые также используют URLMON для загрузки файлов. Другие файлы даже содержат слово "SHELL". Нам всё это показалось плохой идеей. Этот инструмент не включает ничего из этого. Вместо этого он внедряет ваш исходный код на C# в процесс Excel (32-битный или 64-битный) и затем выполняет его. А дальше уже ваша полезная нагрузка решает, что делать дальше.

Советы

  • Ваш исходный код на C# может делать всё, что вы захотите. Мы рекомендуем, чтобы ваш исходный код разрывал связь "Родитель > Дочерний элемент" между Excel и тем, что вы порождаете.
  • Существует много хороших публикаций о "Очень скрытых" листах Excel. Рассмотрите возможность их использования.
  • Не забудьте сделать ваш файл Excel правдоподобным.

Устранение неполадок

"Тип или имя пространства имен ... не существует ..."
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
test.cs(2,14): error CS0234: The type or namespace name `Management' does not exist in the namespace `System'. Are you missing an assembly reference?

Эта ошибка, скорее всего, означает, что вам не хватает ссылки на сборку при компиляции с помощью mono. Чтобы исправить это, просто передайте упомянутое пространство имен в флаг -r. В данном случае мы бы добавили -r 'System.Management' в командную строку. Новая команда будет выглядеть так:

root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'

"Файл метаданных ... не найден"
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
error CS0006: Metadata file `System.Management' could not be found

[x] Error in generating x86 .NET assembly using MCS. See error message above.

Эта ошибка не должна возникать, если вы запускаете EXCELntDonut без использования bash-скрипта install.sh. В этом случае вам нужно будет вручную установить mono-complete. Это загрузит соответствующие зависимости. Вы можете установить его с помощью apt следующим образом:

root@kitploit:~
apt-get install mono-complete
"Программа ... не содержит статический метод 'Main' ..."
root@kitploit:~
root@kali:~/Desktop# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generating your x86 .NET assembly.
error CS5001: Program `_excelntdonut_GJAoNuVPMcX.exe' does not contain a static `Main' method suitable for an entry point

[x] Error in generating x86 .NET assembly using MCS. See error message above.

На данный момент EXCELntDonut поддерживает только файлы C# с полезными нагрузками в функции Main.

Общие советы по устранению неполадок
  1. Сначала скомпилируйте ваш исходный код на C# с помощью csc на Windows и выполните его, чтобы убедиться, что полезная нагрузка работает. Протестируйте это, компилируя полезные нагрузки x86 и x64, поскольку вы, скорее всего, не будете знать, работает ли ваше целевое окружение с 32-битным или 64-битным Excel.
  2. Вы должны иметь возможность запускать вашу полезную нагрузку несколько раз в одном процессе, но если вы получаете странные ошибки, выйдите из Excel, откройте заново и повторите попытку.
  3. Если сомневаетесь, закройте Excel и создайте новый файл для тестирования.

Обнаружение

  • Вот несколько правил Yara для начала от @InQuest:

    Поиск очень скрытого листа

    https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule

    Поиск строки Auto_Open

    https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar

Существует много публикаций об использовании OLEDUMP.py для анализа файлов XLM. Рассмотрите эту:

https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/

Защита

  1. Включите блокировку GPO для выполнения макросов из файлов, загруженных из интернета. См. - https://www.microsoft.com/security/blog/2016/03/22/new-feature-in-office-2016-can-block-macros-and-help-prevent-infection/
  2. К сожалению, AMSI здесь не помогает.
  3. Правила ASR... мы не уверены.
  4. Большинство пользователей сегодня отправляют файлы .xlsx. Возможно, стоит заблокировать отправку файлов .xls в почтовые ящики ваших сотрудников. Не будет чем-то необычным попросить кого-то повторно отправить файл, сохраненный как .xlsx.
  5. Последняя версия Defender ATP обнаружила необфусцированную версию этого файла при сбросе на диск.

Благодарности

Это не было бы на нашем радаре без фантастической работы, проделанной ребятами из Outflank (@outflanknl). Особая благодарность @StanHacked за его понимание в ходе этого проекта. Кроме того, этот проект был бы невозможен без Donut (от @TheWover и @odzhan) и связанной с ним библиотеки Python (от @byt3bl33d3r). Кроме того, команда Accenture создала CLRvoyance, которая решила некоторые проблемы с x64, которые мы не могли решить с помощью Donut + XLM 4.0 макросов. Наконец, спасибо Philip Tsukerman из Cybereason за замечательное исследование по совместимости макросов XLM с 64-битными версиями Excel.

Отказ от ответственности

Мы не несем ответственности за неправомерное использование этого инструмента. Этот инструмент был создан для образовательных целей и авторизованного тестирования, чтобы продемонстрировать, как исходный код на C# может быть внедрен в память с помощью макроса XLM (Excel 4.0). Конечная цель этого проекта — (1) предоставить красным командам еще один вариант фишинговой полезной нагрузки для эмуляции того, что в настоящее время используют реальные противники, и (2) предоставить защитникам основу для создания аналитики и средств смягчения последствий. Без инструмента для быстрой генерации такого типа полезной нагрузки мы считаем, что защитники не будут должным образом подготовлены к тому, что их ждет. Пожалуйста, действуйте ответственно.

Лицензия

Пожалуйста, обратитесь к файлу лицензии в этой папке. Обратите внимание, что этот инструмент включает два других инструмента с открытым исходным кодом: Donut и CLRvoyance.

Скачать инструмент