Назад к обновлениям
New releaseSep 22, 2026

PrivescCheck v2026.09.21-1

Скрипт для перечисления путей повышения привилегий в Windows

Поделиться

PrivescCheck

Быстро выявляйте распространённые уязвимости Windows и проблемы конфигурации, которые не обязательно охвачены публичными стандартами безопасности, а также собирайте полезную информацию для задач эксплуатации и постэксплуатации.

[!IMPORTANT] Важный аспект, который следует учитывать при использовании этого инструмента, заключается в том, что все проверки контроля доступа выполняются в контексте текущего пользователя. Поэтому, если он запущен с правами администратора, многие проверки уязвимостей пропускаются во избежание генерации некорректных результатов.

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

Скачайте скрипт здесь: PrivescCheck.ps1

[!TIP] Приведённую выше ссылку также можно использовать напрямую в терминале PowerShell с помощью (New-Object Net.WebClient).DownloadString(...).

Сценарий 1: Быстрая оценка

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"

Сценарий 2: Расширенная оценка

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"

Сценарий 3: Комплексная оценка

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"

Подробное использование

Invoke-PrivescCheck [-Extended] [-Audit] [-Risky] [-Report <FORMAT>[,...]]
    [-FilePath <PREFIX>]  [-Silent] [-Force]

    -Extended
        Include all "extended" checks in the scan.

    -Audit
        Include all "audit" checks in the scan.

    -Risky
        Include all "risky" checks in the scan. Those are checks that are
        likely to trigger active EDR counter measures due to their behavior.

    -Report <FORMAT>[,...]
        Specify output report file formats (TXT, HTML, CSV, XML). Use alias
        'ALL' to generate all report files. By default, the output filename
        is automatically generated. Use option '-FilePath' to specify one
        explicitly.

    -FilePath <PREFIX>
        Specify the output report file name or directory. The file extension
        is automatically appended. If a directory path is supplied, the
        filename is automatically generated at runtime.

    -Silent
        Suppress terminal output. This can be useful if you want to run the
        script as part of a batch file, in a scheduled task for instance.

    -Force
        Force execution and ignore warnings. Typically, the script stops if
        it is executed with administrator privileges. Use this option to
        execute it anyway.

Форматы файлов отчётов

Формат файла отчёта > TXT

Используйте опцию -Report TXT для создания отчёта в виде необработанного текста. Вывод аналогичен выводу в терминале, за исключением того, что он содержит только символы ASCII для лучшей совместимости с текстовыми редакторами.

Скриншот отчёта в виде необработанного текста, созданного PrivescCheck

Формат файла отчёта > HTML

Используйте опцию -Report HTML для создания HTML-отчёта. Выходной файл можно открыть в веб-браузере. Подключение к Интернету не требуется, так как он не имеет внешних зависимостей. Он более удобен для визуализации данных, чем отчёт в виде необработанного текста. Кроме того, он предоставляет возможности сортировки и фильтрации!

Скриншот HTML-отчёта, созданного PrivescCheck

Формат файла отчёта > CSV или XML

Используйте опцию -Report CSV или -Report XML для создания отчёта в формате CSV или XML. Выходной файл предназначен для облегчения разбора результатов автоматизированными инструментами отчётности.

[!NOTE] Хотя формат вывода (пока) не документирован, вы можете легко разобраться в нём, проанализировав структуру уже созданного файла. Вы можете использовать значение Id каждой проверки в качестве уникального идентификатора.

Типы проверок

Тип проверки > Base

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

Тип проверки > Extended

Проверки типа Extended могут выполняться только в том случае, если в командной строке указана опция -Extended. Они в основном предназначены для предоставления дополнительной информации, которая может быть полезна для разработки эксплойтов или постэксплуатации.

Тип проверки > Audit

Проверки типа Audit могут выполняться только в том случае, если в командной строке указана опция -Audit. Они в основном предназначены для предоставления информации, актуальной в контексте аудита конфигурации.

Советы и приёмы

Политика выполнения PowerShell

По умолчанию политика выполнения PowerShell установлена в значение Restricted на клиентах и RemoteSigned на серверах при запуске нового процесса powershell.exe. Эти политики блокируют выполнение (неподписанных) скриптов, но их можно переопределить в текущей области следующим образом.

Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1

Однако этот приём не работает, когда политика выполнения принудительно задана через GPO. В этом случае после запуска нового сеанса PowerShell вы можете загрузить скрипт следующим образом.

Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression

PowerShell версии 2

Распространённый способ обхода Constrained Language Mode заключается в использовании PSv2, поскольку в нём эта защита не реализована. Поэтому значительная часть усилий по разработке направлена на поддержание этой обратной совместимости.

[!NOTE] Хотя PowerShell версии 2 по-прежнему включён по умолчанию в последних версиях Windows (Удаление PowerShell 2.0 из Windows), он не может работать без .Net framework версии 2.0, что требует ручной установки.

Тайм-аут Metasploit

Если вы запускаете этот скрипт в сеансе Meterpreter, вы, скорее всего, получите ошибку "timeout". Это связано с тем, что Metasploit использует значение тайм-аута по умолчанию 15 секунд, которого недостаточно для завершения типичного выполнения скрипта.

meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_import /local/path/to/PrivescCheck.ps1
[+] File successfully imported. No result was returned.
meterpreter > powershell_execute "Invoke-PrivescCheck"
[-] Error running command powershell_execute: Rex::TimeoutError Operation timed out.

Можно задать другой тайм-аут с помощью опции -t команды sessions (документация). В следующем примере для сеанса с ID 1 устанавливается тайм-аут 2 минуты, но, возможно, вы захотите задать ещё большее значение.

msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"

Сборка

Обновление данных

Некоторые проверки полагаются на онлайн-данные (например, база данных драйверов LOL), но скрипт предназначен для работы в автономном режиме. Чтобы решить эту проблему, данные встраиваются в скрипт и, следовательно, нуждаются в регулярном обновлении. Этот процесс полностью автоматизирован в официальном релизе, но если вы хотите собрать скрипт локально, вы можете при желании сделать это вручную.

powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"

Сборка скрипта

Сборка скрипта так же проста, как выполнение приведённой ниже команды. Выходной файл будет сохранён в папке .\dist\.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"

Скрипт сборки использует генератор псевдослучайных чисел со случайно сгенерированным seed для выбора имени переменной для каждого модуля. Если вы хотите получать воспроизводимые результаты между сборками, вы можете повторно использовать ранее сгенерированный seed, указав опцию -NoNewSeed.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"

Скрипт сборки использует шифрование AES со случайно сгенерированным key для обфускации содержимого каждого модуля. Если вы хотите получать воспроизводимые результаты между сборками, вы можете повторно использовать ранее сгенерированный key, указав опцию -NoNewKey.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"

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

Категории