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

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

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

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

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

Категории

Все категории
Loading categories
Crassus — Инструмент для обнаружения повышения привилегий в Windows, который анализирует журналы загрузки Process Monitor для выявления перехвата DLL, слабых ACL и других путей повышения привилегий, автоматически генерируя исходный код прокси-DLL. | Kitploit
Инструменты/GitHubGitHub/vu-ls/crassus
Повышение привилегийЭксплуатацияТестирование на ПроникновениеАнализ Бинарных Файлов
GitHubvu-ls/crassus

Crassus

Инструмент для обнаружения повышения привилегий в Windows, который анализирует журналы загрузки Process Monitor для выявления перехвата DLL, слабых ACL и других путей повышения привилегий, автоматически генерируя исходный код прокси-DLL.

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

Популярное

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

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

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

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

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

Crassus — инструмент для обнаружения повышения привилегий в Windows

Быстрый старт

  1. В Process Monitor выберите опцию Enable Boot Logging. "Process Monitor Boot Logging option"
  2. Перезагрузите компьютер.
  3. После входа в систему и полной загрузки Windows снова запустите Process Monitor.
  4. Когда появится запрос, сохраните журнал загрузки, например, в raw.PML.
  5. Сбросьте фильтр Process Monitor по умолчанию с помощью Ctrl-R.
  6. Сохраните этот файл журнала, например, в boot.PML.
  7. Запустите Crassus.exe boot.PML.
  8. Изучите любые результаты, выделенные зелёным цветом, и соответствующие записи в results.csv.

Содержание

  • Почему "Crassus"?
    • Вы действительно создали ещё один инструмент для обнаружения повышения привилегий?
    • Возможности
    • Блок-схема
  • Скриншоты
    • Запуск Crassus
    • Вывод CSV
    • Экспорты
    • Экспорт функций DLL
    • Экспорт ординалов DLL
  • Получение Crassus.exe
    • Сборка с помощью Visual Studio
    • Использование предварительно скомпилированного Crassus.exe
  • Использование
    • Порядок выполнения
    • Аргументы командной строки
    • Примеры
    • Шаблон прокси-библиотеки DLL
    • Шаблон openssl.cnf
  • Компиляция прокси-библиотек DLL
    • Visual Studio
    • MinGW
  • Примеры из реального мира
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • Устранение неполадок
    • Отсутствующий файл не выполняется
    • Код выполняется с неожиданными привилегиями
    • Результаты исчезают после перезагрузки
  • Вклад
  • Благодарности

Почему "Crassus"?

Компания Accenture создала инструмент Spartacus, который находит возможности перехвата DLL в Windows. Взяв Spartacus за основу, мы создали Crassus, чтобы расширить возможности обнаружения повышения привилегий в Windows, не ограничиваясь поиском отсутствующих файлов. ACL, используемые файлами и каталогами привилегированных процессов, позволяют найти больше, чем просто поиск отсутствующих файлов для достижения цели.

Вы действительно создали ещё один инструмент для обнаружения повышения привилегий?

...но с изюминкой: Crassus использует SysInternals Process Monitor и парсит необработанные файлы PML. Обычное использование — создать журнал загрузки с помощью Process Monitor, а затем проанализировать его с помощью Crassus. Он также автоматически генерирует исходный код для прокси-библиотек DLL со всеми необходимыми экспортами для уязвимых библиотек DLL.

Возможности

  • Нативный парсинг файлов ProcMon PML. Парсер журналов (PML) реализован путём переноса частичной функциональности на C# из https://github.com/eronnen/procmon-parser/. Спецификацию формата можно найти здесь.
  • Crassus создаёт исходный код для прокси-библиотек DLL для всех отсутствующих DLL, которые были идентифицированы. Например, если приложение уязвимо для перехвата DLL через version.dll, Crassus создаст файлы version.cpp и version.def со всеми включёнными в них экспортами. По умолчанию прокси-библиотеки DLL запускают calc.exe. Включены сценарии сборки для сборки DLL в Visual Studio или MinGW.
  • Для других интересующих событий, таких как создание процесса или загрузка библиотеки, исследуется возможность непривилегированных пользователей изменить файл или любые части пути к файлу.
  • Способен обрабатывать большие файлы PML и сохранять все интересующие события в выходной CSV-файл.

Блок-схема

Общая суть работы Crassus может быть резюмирована в этой блок-схеме: Crassus flowchart

Скриншоты

Запуск Crassus

Running Crassus

Вывод CSV

CSV Output

Экспорты

Exports

Экспорт функций DLL

DLL Functions

Экспорт ординалов DLL

DLL Ordinals

Получение Crassus.exe

Сборка с помощью Visual Studio

Crassus разработан как проект Visual Studio 2019. Чтобы собрать Crassus.exe:

  1. Откройте Crassus.sln
  2. Нажмите Ctrl+Shift+B на клавиатуре

Использование предварительно скомпилированного Crassus.exe

Если вы доверяете запуску чужого кода, не зная, что он делает, Crassus.exe предоставлен в этом репозитории.

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

Порядок выполнения

  1. В Process Monitor выберите опцию Enable Boot Logging. "Process Monitor Boot Logging option"
  2. Перезагрузите компьютер.
  3. После входа в систему и полной загрузки Windows также можно запустить запланированные задачи, которые могут быть настроены на запуск с привилегиями.
  4. Снова запустите Process Monitor.
  5. Когда появится запрос, сохраните журнал загрузки.
  6. Сбросьте фильтр Process Monitor по умолчанию с помощью Ctrl-R.
  7. Сохраните этот файл журнала, например, в boot.PML. Причина повторного сохранения файла журнала двоякая:
    1. Старые версии Process Monitor не сохраняют журналы загрузки в виде одного файла.
    2. Журналы загрузки по умолчанию не фильтруются, что может содержать лишний шум, например, перехват DLL локальным пользователем при запуске самого Process Monitor.

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

АргументОписание
<PMLFILE>Расположение (файл) существующего файла журнала событий ProcMon.
--verboseВключить подробный вывод.
--debugВключить отладочный вывод.

Примеры

Проанализируйте журнал загрузки Process Monitor, сохранённый в boot.PML. Все уязвимые пути будут сохранены в results.csv, а все файлы исходного кода прокси-библиотек DLL — в подкаталоге stubs.

root@kitploit:~
C:\tmp> Crassus.exe boot.PML

Шаблон прокси-библиотеки DLL

Ниже приведён шаблон, используемый при создании прокси-библиотек DLL. Для DLL, обнаруженных Crassus, прокси-библиотека DLL будет содержать те же имена экспортов, что указаны в %_EXPORTS_%, а также те же ординалы, что указаны в файле .def. Crassus определит, нужно ли собирать библиотеку DLL как 32-битную или 64-битную, анализируя архитектуру родительского процесса, и соответствующим образом пометит исходный код в поле %_BUILD_AS_%.

Если реальную DLL не удаётся найти с помощью журнала Process Monitor или если имя экспорта проблематично, сценарии сборки перейдут к созданию DLL без указанных экспортов.

root@kitploit:~
#pragma once
    
//%_BUILD_AS%

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // Запустите здесь вашу полезную нагрузку.
      WinExec("calc.exe", 1);
  }

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  {
      switch (fdwReason)
      {
      case DLL_PROCESS_ATTACH:
          Payload();
          break;
      case DLL_THREAD_ATTACH:
          break;
      case DLL_THREAD_DETACH:
          break;
      case DLL_PROCESS_DETACH:
          break;
      }
      return TRUE;
  }


  #ifdef ADD_EXPORTS
  %_EXPORTS_%
  #endif
}

Шаблон openssl.cnf

Для приложений, которые небезопасно используют значение переменной OPENSSLDIR, поддельный файл openssl.cnf можно разместить в указанном месте. В этом примере программа загрузит C:\tmp\calc.dll. Убедитесь, что используете 32-битную библиотеку для 32-битных процессов и 64-битную библиотеку для 64-битных процессов.

root@kitploit:~
[openssl_init]
# Эта попытка загрузить файл c:\tmp\calc.dll при инициализации OpenSSL
# Сценарии сборки должны определить, нужно ли собирать библиотеку calc.dll как 32- или 64-битную
/tmp/calc = asdf

Компиляция прокси-библиотек DLL

Visual Studio

Компиляция возможна с помощью cl.exe, входящего в состав Visual Studio. В частности:

root@kitploit:~
cl.exe /DADD_EXPORTS /D_USRDLL /D_WINDLL <target>.cpp /LD /Fe<target>.dll /link /DEF:<target>.def

Чтобы автоматизировать процесс сборки, включая указание, должна ли библиотека быть 64- или 32-битной:

  1. Откройте командную строку разработчика Visual Studio.
  2. Соберите DLL с помощью скрипта build.bat.
  3. При необходимости переименуйте скомпилированный файл, если имя уязвимого файла заканчивается не на .dll.

Примечание: Из-за неудачного поведения vcvarsall.bat, которое определённо не является ошибкой, вы можете столкнуться с проблемами при попытке запустить build.bat более одного раза в одном сеансе командной строки разработчика Visual Studio. Если возникает ошибка, просто закройте окно и запустите его снова.

MinGW

Если Visual Studio недоступен, прокси-библиотеки DLL можно скомпилировать с помощью MinGW-w64. Например, на платформе Ubuntu MinGW можно установить следующей командой: sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

root@kitploit:~
# Создание 32-битной DLL
i686-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
i686-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

# Создание 64-битной DLL
x86_64-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
x86_64-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

Чтобы автоматизировать процесс сборки, включая указание, должна ли библиотека быть 64- или 32-битной:

  1. Откройте терминал.
  2. Запустите bash ./build.sh
  3. При необходимости переименуйте скомпилированный файл, если имя уязвимого файла заканчивается не на .dll.

Примеры из реального мира

Acronis True Image

Анализ Crassus

Как описано в VU#114757, старые версии программного обеспечения Acronis содержат множественные уязвимости повышения привилегий.

  1. Размещение openssl.cnf в месте, доступном для создания непривилегированным пользователем.
  2. Неподходящие ACL в каталоге C:\ProgramData\Acronis.

Crassus автоматически находит обе эти проблемы. Вывод Crassus для Acronis

Перехват DLL

Разместив наш скомпилированный файл curl.dll в каталоге C:\ProgramData\Acronis\Agent\var\atp-downloader\ и перезагрузившись с новым журналом загрузки Process Monitor, мы видим, что наша полезная нагрузка, запускающая calc.exe, выполняется с привилегиями SYSTEM. "Журнал Process Monitor с размещённым curl.dll"

Размещение openssl.cnf

Уязвимое программное обеспечение Acronis пытается загрузить openssl.cnf из двух разных мест. Мы разместим наш файл шаблона openssl.cnf в c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl и 32-битную полезную нагрузку calc.dll в c:\tmp. "Журнал Process Monitor с размещённым openssl.cnf"

Atlassian Bitbucket

Анализ Crassus

Как описано в VU#240785, старые версии программного обеспечения Atlassian Bitbucket уязвимы для повышения привилегий из-за слабых ACL каталога установки. Как и в случае с любым программным обеспечением Windows, которое устанавливается за пределами C:\Program Files\ или других мест с ограниченным ACL, установщик программного обеспечения должен явно задать ACL для целевого каталога.

Crassus находит множество способов достижения повышения привилегий с помощью этого программного обеспечения, включая:

  • Размещение отсутствующих DLL в местах, доступных для записи пользователем.
  • Размещение отсутствующих EXE в местах, доступных для записи пользователем.
  • Переименование каталога привилегированного EXE, чтобы позволить пользователю разместить EXE с тем же именем.

Вывод Crassus для Atlassian Bitbucket

Перехват EXE

В выводе Crassus мы видим, что c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe является привилегированным, но поскольку он выполняется, мы не можем просто заменить его. Однако мы можем использовать другой трюк для его перехвата. Возможно, мы сможем просто переименовать каталог, в котором он находится, создать новый каталог с тем же именем и разместить там нашу полезную нагрузку с тем же именем. "Переименование каталога, из которого выполняется привилегированный процесс"

После перезагрузки с журналом загрузки Process Monitor мы видим, что наш размещённый файл elasticsearch-service-x64.exe выполняется вместо реального, судя по значку калькулятора Windows. "Размещённый calc.exe как elasticsearch-service-x64.exe"

McAfee

Как описано в VU#287178, старые версии программного обеспечения McAfee уязвимы для повышения привилегий через openssl.cnf. Давайте посмотрим: Вывод Crassus для McAfee

Чтобы понять, почему в этом журнале загрузки есть две разные ссылки на openssl.cnf, обратимся к файлу results.csv: results.csv для McAfee

Обратите внимание, что загрузка файла openssl.cnf из пути D:\ потребует дальнейшего ручного исследования, поскольку возможность загрузки такого пути зависит от конкретной платформы и доступного доступа к системе. Возможно, получится создать оптический диск, предоставляющий файл openssl.cnf, который также ссылается на путь, разрешающийся на оптический диск.

Microsoft SQL Server 2022

SQL Server 2022 не очевидно уязвим для повышения привилегий из-за слабых ACL, если только он не установлен в нестандартное место. Если он установлен в каталог за пределами C:\Program Files, Crassus выявит несколько возможностей для повышения привилегий. Большинство приложений Windows, включающих привилегированный компонент, по-видимому, эксплуатируемы таким образом, если они установлены в каталог, который изначально не имеет безопасных ACL. "Microsoft SQL Server 2022, установленный в небезопасный каталог"

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

Отсутствующий файл не выполняется

Если Crassus сообщает о привилегированной загрузке файла, который пользователь может разместить или изменить, это не обязательно означает, что это эксплуатируемый сценарий. Хотя Crassus ищет потенциально интересные типы файлов, файл журнала Process Monitor напрямую не указывает, что ассоциированный процесс сделал бы с этим файлом, если бы он там был. Это может быть так же просто, как извлечение значка программы. Исследование стека вызовов файловой операции в Process Monitor может дать подсказку о том, что было бы сделано. Или просто разместите файл и исследуйте поведение с новым журналом загрузки Process Monitor, если предпочитаете более лёгкий путь грубой силы. Вы также можете столкнуться с отсутствующей библиотекой, где либо Crassus не может найти саму библиотеку, чтобы узнать, какие экспорты должны присутствовать, либо экспорты, найденные Crassus, конфликтуют таким образом, что это препятствует правильной компиляции DLL. В таких случаях Crassus перейдёт к созданию DLL, которая не экспортирует ни одного имени функции. В зависимости от того, как целевое приложение загружает библиотеку, отсутствие ожидаемых имён функций и/или номеров ординалов может помешать целевому приложению успешно загрузить библиотеку. Этот сценарий потребует ручных усилий для определения того, как должна выглядеть прокси-библиотека DLL.

Код выполняется с неожиданными привилегиями

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

Результаты исчезают после перезагрузки

Особенно при первой установке программного обеспечения или при установке обновлений Process Monitor может регистрировать файловую операцию, которая выглядит эксплуатируемой, но не происходит каждый раз при загрузке системы. Эксплуатация этих операций может быть возможна при первой перезагрузке после такого события. Чтобы избежать таких граничных случаев, убедитесь, что последующие журналы загрузки содержат те же зарегистрированные файловые операции при последующих перезагрузках.

Вклад

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

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

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

  • https://github.com/eronnen/procmon-parser/
Скачать инструмент