
Скрипт для перечисления путей повышения привилегий в Windows
# PrivescCheck
Быстро выявляйте распространённые **уязвимости** Windows и **проблемы конфигурации**, которые не обязательно охвачены публичными стандартами безопасности, а также собирайте полезную информацию для задач эксплуатации и постэксплуатации.
> [!IMPORTANT]
> Важный аспект, который следует учитывать при использовании этого инструмента, заключается в том, что все проверки контроля доступа выполняются в контексте текущего пользователя. Поэтому, если он запущен с правами администратора, многие проверки уязвимостей пропускаются во избежание генерации некорректных результатов.
## Быстрый старт
Скачайте скрипт здесь: [PrivescCheck.ps1](https://github.com/itm4n/PrivescCheck/releases/latest/download/PrivescCheck.ps1)
> [!TIP]
> Приведённую выше ссылку также можно использовать напрямую в терминале PowerShell с помощью `(New-Object Net.WebClient).DownloadString(...)`.
### Сценарий 1: Быстрая оценка
```bat
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"
```
### Сценарий 2: Расширенная оценка
```bat
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"
```
### Сценарий 3: Комплексная оценка
```bat
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"
```
## Подробное использование
```txt
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-символы для лучшей совместимости с текстовыми редакторами.

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

### Формат файла отчёта > CSV или XML
Используйте опцию `-Report CSV` или `-Report XML` для генерации **отчёта в формате CSV или XML**. Выходной файл предназначен для облегчения разбора результатов автоматизированными инструментами отчётности.
> [!NOTE]
> Хотя выходной формат (пока) не документирован, вы можете легко разобраться в нём, проанализировав структуру уже сгенерированного файла. Вы можете использовать значение `Id` каждой проверки в качестве уникального идентификатора.
## Типы проверок
### Тип проверки > Base
Проверки типа `Base` всегда выполняются, если только скрипт не запущен с правами администратора. Они в основном предназначены для выявления уязвимостей повышения привилегий или других важных проблем.
### Тип проверки > Extended
Проверки типа `Extended` могут выполняться только в том случае, если в командной строке указана опция `-Extended`. Они в основном предназначены для предоставления дополнительной информации, которая может быть полезна для разработки эксплойтов или постэксплуатации.
### Тип проверки > Audit
Проверки типа `Audit` могут выполняться только в том случае, если в командной строке указана опция `-Audit`. Они в основном предназначены для предоставления информации, актуальной в контексте аудита конфигурации.
## Советы и приёмы
### Политика выполнения PowerShell
По умолчанию [политика выполнения](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies) PowerShell установлена в значение `Restricted` на клиентах и `RemoteSigned` на серверах при запуске нового процесса `powershell.exe`. Эти политики блокируют выполнение (неподписанных) скриптов, но их можно переопределить в текущей области следующим образом.
```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
```
Однако этот приём не работает, когда политика выполнения принудительно задана через GPO. В этом случае после запуска нового сеанса PowerShell вы можете загрузить скрипт следующим образом.
```powershell
Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression
```
### PowerShell версии 2
Распространённый способ обхода [Constrained Language Mode](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) заключается в использовании PSv2, поскольку он не реализует эту защиту. Поэтому значительная часть усилий по разработке направлена на поддержание этой обратной совместимости.
> [!NOTE]
> Хотя PowerShell версии 2 ~~по-прежнему включён по умолчанию в последних версиях Windows~~ ([Удаление PowerShell 2.0 из Windows](https://support.microsoft.com/en-us/topic/powershell-2-0-removal-from-windows-fe6d1edc-2ed2-4c33-b297-afe82a64200a)), он не может работать без .Net framework версии 2.0, что требует ручной установки.
### Тайм-аут Metasploit
Если вы запускаете этот скрипт в сеансе Meterpreter, вы, скорее всего, получите ошибку "timeout". Это связано с тем, что Metasploit использует значение тайм-аута по умолчанию 15 секунд, которого недостаточно для завершения типичного выполнения скрипта.
```console
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` ([документация](https://www.offensive-security.com/metasploit-unleashed/msfconsole-commands/)). В следующем примере для сеанса с ID `1` устанавливается тайм-аут 2 минуты, но вы можете задать и более высокое значение.
```console
msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"
```
## Сборка
### Обновление данных
Некоторые проверки полагаются на онлайн-данные (*например*, база данных драйверов LOL), но скрипт предназначен для работы в автономном режиме. Чтобы решить эту проблему, данные встраиваются в скрипт и поэтому нуждаются в регулярном обновлении. Этот процесс полностью автоматизирован в официальном релизе, но если вы хотите собрать скрипт локально, вы можете при желании сделать это вручную.
```bat
powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"
```
### Сборка скрипта
Сборка скрипта так же проста, как выполнение приведённой ниже команды. Выходной файл будет сохранён в папке `.\dist\`.
```bat
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"
```
Скрипт сборки использует генератор псевдослучайных чисел со случайно сгенерированным **seed** для выбора имени переменной для каждого модуля. Если вы хотите получать воспроизводимые результаты между сборками, вы можете повторно использовать ранее сгенерированный **seed**, указав опцию `-NoNewSeed`.
```bat
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
```
## Благодарности
- Список слов - [CBHue/PyFuscation](https://github.com/CBHue/PyFuscation)
- Список известных уязвимых драйверов - [https://www.loldrivers.io/](https://www.loldrivers.io/)