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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/accenture/spartacus
Оборонительные ИнструментыГенерация полезной нагрузкиАнализ КодаЭксплуатацияОбратная инженерияТестирование на ПроникновениеАнализ Бинарных ФайловRed TeamingArchived
GitHubaccenture/spartacus

Spartacus

Spartacus — инструментарий для перехвата DLL/COM

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

Популярное

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

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

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

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

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

[!CAUTION] Этот репозиторий не поддерживается, посетите https://github.com/sadreck/Spartacus для последней версии.

Spartacus DLL/COM Hijacking Toolkit version

Почему «Spartacus»?

Если вы видели фильм «Спартак» 1960 года, вы помните сцену, где римляне просят Спартака сдаться. В тот момент, когда настоящий Спартак встал, многие другие также встали и заявили, что они — Спартак, используя фразу «I AM SPARTACUS».

Когда процесс, уязвимый для DLL-хиджакинга, запрашивает загрузку DLL, это похоже на вопрос «КТО ТАКОЙ VERSION.DLL?», и случайные каталоги начинают заявлять: «Я — VERSION.DLL» и «НЕТ, Я — VERSION.DLL». И так появился Спартак.

Чем этот инструмент отличается от всех других инструментов хиджакинга?

  • Spartacus автоматизирует большую часть процесса. Он парсит необработанные журналы SysInternals Process Monitor, и вы можете оставить ProcMon работать часами, чтобы обнаружить уязвимости DLL/COM-хиджакинга второго и третьего уровня (т.е. приложение, которое загружает другую DLL, которая загружает еще одну DLL при использовании определенной функции родительского приложения).
  • Автоматически генерирует решения Visual Studio для уязвимых DLL.
  • Способен обрабатывать большие PML-файлы и сохранять все интересующие события в CSV-файл. В локальном тесте обработан файл размером 3 ГБ с 8 миллионами событий за 45 секунд.
  • Поддерживает сканирование уязвимостей как DLL-, так и COM-хиджакинга.
  • Поддерживает создание самоподписанных сертификатов и подписание DLL-файлов.
  • Используя функционал Ghidra, извлекайте сигнатуры экспортируемых функций и выполняйте полезную нагрузку через отдельные прокси-функции, а не запуская всё из DllMain. Этот метод был вдохновлён и реализован на основе руководства по адресу https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain, автор Shantanu Khandelwal.
  • [Защита] Режим мониторинга, пытающийся выявить запущенные приложения, которые проксируют вызовы, как в случае «DLL-хиджакинг в процессе». Это сделано для быстрого обнаружения очевидных уязвимостей, и на него не следует полагаться.

Содержание

  • Установка
  • Поддерживаемый функционал
    • DLL-хиджакинг
      • Использование
    • COM-хиджакинг
      • Использование
    • Генерация прокси- DLL
      • Использование
    • Подписание DLL-файлов
      • Использование
    • Обнаружение DLL-хиджакинга
  • Аргументы командной строки
  • Вклад
  • Благодарности

Установка

Найдите и загрузите последнюю версию Spartacus в разделе Releases. В противном случае просто клонируйте этот репозиторий и соберите из исходников.

Поддерживаемый функционал

Ниже приведено описание каждого из режимов, поддерживаемых Spartacus.

Примечание: Аргументы командной строки значительно изменились с v1 на v2.

DLL-хиджакинг

Исходная функциональность Spartacus заключалась исключительно в поиске уязвимостей DLL-хиджакинга. Принцип работы:

  1. Создаёт на лету конфигурационный файл ProcMon (PMC) на основе переданных аргументов. Будут установлены следующие фильтры:
    • Операция — CreateFile.
    • Путь заканчивается на .dll.
    • Имя процесса не procmon.exe или procmon64.exe.
    • Включить Drop Filtered Events для минимизации размера выходного PML.
    • Отключить Auto Scroll.
  2. Запускает Process Monitor и ждёт, пока пользователь нажмёт ENTER.
  3. Пользователь запускает/завершает процессы или оставляет его работать столько, сколько нужно.
  4. Завершает Process Monitor после нажатия пользователем ENTER.
  5. Анализирует выходной файл журнала событий (PML).
    1. Создаёт CSV-файл со всеми DLL, которые вернули NAME_NOT_FOUND и PATH_NOT_FOUND.
    2. Сравнивает DLL из предыдущего шага и пытается определить DLL, которые были фактически загружены.
    3. Для каждой «найденной» DLL генерирует решение Visual Studio для проксирования всех экспортируемых функций этой DLL.

Использование DLL-хиджакинга

Соберите все события и сохраните их в C:\Data\logs.pml. Все уязвимые DLL будут сохранены в C:\Data\VulnerableDLLFiles.csv, а все решения для прокси- DLL — в C:\Data\Solutions.

root@kitploit:~
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

Проанализируйте существующий выходной файл PML, сохраните результаты в CSV и создайте решения Visual Studio для прокси- DLL.

root@kitploit:~
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

Скриншоты

DLL Runtime

CSV Output

COM-хиджакинг

Новая функция Spartacus — выявление уязвимостей локального COM-хиджакинга. Принцип работы:

  1. Создаёт на лету конфигурационный файл ProcMon (PMC) на основе переданных аргументов. Будут установлены следующие фильтры:
    • Операция — RegOpenKey.
    • Имя процесса не procmon.exe или procmon64.exe.
    • Включить Drop Filtered Events для минимизации размера выходного PML.
    • Отключить Auto Scroll.
  2. Запускает Process Monitor и ждёт, пока пользователь нажмёт ENTER.
  3. Пользователь запускает/завершает процессы или оставляет его работать столько, сколько нужно.
  4. Завершает Process Monitor после нажатия пользователем ENTER.
  5. Анализирует выходной файл журнала событий (PML).
    1. Определяет все отсутствующие ключи реестра, заканчивающиеся на InprocServer32 и с результатом NAME_NOT_FOUND.
    2. Если найденный ключ находится в HKEY_CURRENT_USER, ищет его GUID в HKEY_CLASSES_ROOT и включает его детали в экспортный CSV (если найден).

Для COM-хиджакинга Spartacus также поддерживает сканирование локальной системы на предмет некорректно настроенных COM-записей:

  1. Перечисляет все HKEY_CLASSES_ROOT, HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE.
  2. Ищет ключи реестра с именами InProcServer, InProcServer32, LocalServer или LocalServer32.
  3. Выявляет отсутствующие расположения EXE/DLL, а также любые некорректные настройки ACL, такие как возможность изменения или удаления файла текущим пользователем.

Использование COM-хиджакинга

Соберите все события и сохраните их в C:\Data\logs.pml. Вся информация об уязвимых COM-объектах будет сохранена в C:\Data\VulnerableCOM.csv.

root@kitploit:~
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

Обработайте существующий файл PML для выявления уязвимых COM-записей.

root@kitploit:~
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

Перечислите реестр локальной системы для выявления отсутствующих/некорректно настроенных COM-библиотек и исполняемых файлов.

root@kitploit:~
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose

Скриншоты

COM Runtime

CSV Output

Генерация прокси- DLL

Spartacus поддерживает создание решений Visual Studio, формируя каркасные проекты для использования на основе DLL, которую вы хотите использовать.

  • Перенаправление всех вызовов путём экспорта функций обратно в легитимную DLL.
    • Это означает, что вам придётся выполнять полезную нагрузку из функции DllMain.
  • Используя Ghidra, извлеките максимально возможное количество сигнатур/определений функций из целевой DLL и создайте для них прокси-функции.
    • Для любой функции, сигнатуру которой извлечь не удалось, будет выполнено прямое перенаправление на легитимную функцию/DLL.
    • Это означает, что вы можете выполнять полезную нагрузку из функции, отличной от DllMain.
    • Например, если вы хотите использовать version.dll, вы могли бы запустить свой имплант из GetFileVersionInfoExW, если эта функция вызывается уязвимым приложением.

Использование генерации прокси- DLL

Создайте решение, которое перенаправляет все экспорты (без проксирования функций).

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources

Можно передать несколько DLL одновременно.

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources

Создайте прокси для максимально возможного количества функций (на основе вывода Ghidra).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose

То же, что и выше, но используйте внешние файлы ресурсов для создания решения (если их нужно изменить).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources

Используйте предварительно сгенерированные прототипы функций для тех, для которых Ghidra не смог извлечь определения.

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv

Создайте прокси только для функций GetFileVersionInfoExW и GetFileVersionInfoExA.

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"

Создайте базу данных прототипов функций из существующих файлов *.h, что поможет создать прокси-функции для тех, для которых Ghidra не смог извлечь определение.

root@kitploit:~
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose

Выведите список экспортов DLL и проверьте, есть ли для каждой функции предварительно сгенерированный прототип.

root@kitploit:~
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv

Подписание DLL-файлов

Spartacus теперь поддерживает создание самоподписанных сертификатов (с копированием атрибутов из существующих файлов) и подписание DLL-файлов.

Использование подписания DLL-файлов

Создайте сертификат для подписи, используя свойства из C:\Windows\System32\version.dll (должна быть подписанная DLL).

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose

Подпишите DLL с помощью существующего/созданного сертификата.

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose

Обнаружение DLL-хиджакинга

Spartacus также имеет режим --detect, который пытается выявить активное проксирование DLL. Логика следующая:

  • Перечислить все процессы.
  • Для каждого процесса загрузить DLL (модули), загруженные в память (при наличии соответствующих разрешений).
  • Если найдена DLL с таким же именем:
    • Если оба файла находятся в системном пути (т.е. Windows, System32, Program Files), игнорировать.
    • Если только один из файлов находится в системном пути, а другой — в месте, доступном для записи пользователем, пометить файл.

Чтобы использовать эту функцию, просто запустите Spartacus с аргументом --detect.

Самоподписывание исполняемых файлов/DLL

Spartacus поддерживает режим --sign, который позволяет как создавать самоподписанные сертификаты, так и подписывать ими скомпилированные DLL.

Создайте самоподписанный сертификат, копируя данные издателя/владельца из существующего файла:

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose

И используйте этот сертификат для подписания скомпилированного файла:

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose

Аргументы командной строки

Чтобы облегчить себе жизнь, используйте файл CommandLineGenerator.html.

Вклад

Будь то опечатка, ошибка или новая функция, Spartacus открыт для вкладов при условии соблюдения следующих пунктов:

  • Вы согласны с лицензией MIT этого проекта.
  • Перед созданием pull request создайте issue, чтобы обсудить его до начала работы, так как внутренняя разработка не отслеживается через публичный репозиторий GitHub. В противном случае вы рискуете получить отклонённый pull request, если, например, мы уже работаем над той же или похожей функцией, или по любой другой причине.

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

  • https://github.com/eronnen/procmon-parser/
  • https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain
  • https://stmxcsr.com/persistence/com-hijacking.html
  • Иконка для Spartacus взята с Helmet icons created by Darius Dan - Flaticon | https://dariusdan.com/
  • https://github.com/Danielku15/SigningServer
Скачать инструмент
  • Создаёт CSV-вывод со всей собранной информацией.
  • Spartacus не создаёт автоматически решение Visual Studio для COM-хиджакинга, однако при необходимости создать прокси- DLL можно использовать режим proxy.
  • РежимАргументОписание
    --modeОпределяет используемый режим: dll, proxy, com или detect.
    all--verboseВключить подробный вывод.
    all--debugВключить отладочный вывод.
    all--external-resourcesПо умолчанию Spartacus использует встроенные ресурсы для создания файлов решений VS и т.д. Если необходимо изменить шаблоны, используйте этот аргумент, чтобы Spartacus загружал все файлы из папки ./Assets.
    dll, com--procmonРасположение (файл) SysInternals Process Monitor: procmon.exe или procmon64.exe
    dll, com--pmlРасположение (файл) для сохранения файла журнала событий ProcMon. Если файл существует, он будет перезаписан. При использовании с --existing указывает файл журнала для чтения (не будет перезаписан).
    dll, com--pmcУказывает пользовательский файл ProcMon (PMC). Этот файл не будет изменён и будет использован как есть.
    dll, com--csvРасположение (файл) для сохранения CSV-вывода выполнения.
    dll, proxy--solutionПуть к каталогу, где будут сохранены решения для прокси- DLL.
    dll, com--existingПереключатель, указывающий, что Spartacus должен обработать существующий файл журнала событий ProcMon (PML). Для указания файла журнала используйте --pml; полезно, если ProcMon работал часами или использовался в Boot Logging.
    dll--allПо умолчанию любые DLL в каталогах Windows или Program Files пропускаются. Используйте этот параметр, чтобы включить их в вывод.
    proxy--ghidraПуть к файлу analyzeHeadless.bat Ghidra. Используется, когда требуется проксировать конкретные функции, а не только DllMain.
    proxy--dllПуть к DLL, которую нужно проксировать. Можно указать несколько экземпляров этого аргумента. Кроме того, могут содержать подстановочные знаки, например C:\Windows\System32\*.dll — однако все пути должны заканчиваться на *.dll.
    proxy, sign--overwriteЕсли файл --solution (прокси) или --pfx (подпись) уже существует, используйте этот флаг для перезаписи.
    proxy--onlyСоздать прокси-функции только для функций, определённых в этой переменной. Значения разделяются запятыми, например 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'.
    proxy--actionДействие по умолчанию — создание решения VS. --action prototypes принимает в качестве входных данные папку Windows SDK и анализирует файлы *.h для создания базы данных прототипов функций. --action exports отображает экспортные функции DLL, а при использовании с --prototypes показывает, было ли предварительно сгенерировано определение функции.
    sign--actionПри использовании --action с модулем sign принимает одно из двух значений: generate для создания PFX и sign для подписания файла.
    proxy--pathВ настоящее время работает только с --action prototypes; указывает расположение каталога Windows SDK.
    proxy--prototypesРасположение файла prototypes.csv (сейчас находится в папке ./Assets).
    com--aclПеречислить локальную систему на предмет отсутствующих/некорректно настроенных COM-библиотек и исполняемых файлов.
    sign--subjectИспользуется с --action generate для указания владельца сертификата.
    sign--issuerИспользуется с --action generate для указания издателя сертификата.
    sign--copy-fromИспользуется с --action generate для указания существующего подписанного файла, из которого копируются данные издателя и владельца.
    sign--not-beforeИспользуется с --action generate для определения даты начала действия сертификата. Формат: ГГГГ-ММ-ДД ЧЧ:ММ:СС.
    sign--not-afterИспользуется с --action generate для определения даты окончания действия сертификата. Формат: ГГГГ-ММ-ДД ЧЧ:ММ:СС.
    sign--pfxПри использовании с --action generate указывает, куда будет сохранён PFX-файл. При использовании с --action sign указывает, откуда будет загружен PFX-файл.
    sign--passwordПри использовании с --action generate задаёт пароль для --pfx файла.
    sign--pathПри использовании с --action sign указывает расположение исполняемого файла/DLL для подписания.
    sign--algorithmПри использовании с --action sign задаёт алгоритм хеширования для подписания. Варианты: MD5, SHA1, SHA256, SHA384, SHA512.
    sign--timestampПри использовании с --action sign задаёт сервер меток времени, например http://timestamp.sectigo.com или http://timestamp.digicert.com.