15 Способів обходу powershell execution policy

За замовчуванням PowerShell налаштований на заборону виконання скриптів в системах на базі ОС Windows. Подібні установки можуть ускладнювати роботу адмінів, пентестеров і розробників, і в цій статті я розповім про 15 способах обходу execution policy без використання прав локального адміністратора.

За замовчуванням PowerShell налаштований на заборону виконання скриптів в системах на базі ОС Windows. Подібні установки можуть ускладнювати роботу адмінів, пентестеров і розробників, і в цій статті я розповім про 15 способах обходу execution policy без використання прав локального адміністратора. Вважаю, що є техніки, які не будуть згадані через мою забудькуватість чи елементарне незнання, однак, сподіваюся, нижченаведений список буде хорошим стартом для тих, хто має потребу в ньому.

Що таке PowerShell Execution Policy?

Execution policy визначає, які типи скриптів можуть бути запущені (якщо взагалі можуть) в системі. За замовчуванням значення параметра виставлено як «Restricted», що забороняє запуск будь-яких скриптів. Однак слід розуміти, що настройка Execution Policy ніколи не ставилася до управління безпекою, а служила лише для того, щоб адміністратори випадково не могли вивести систему з ладу. Саме тому існує безліч технік, щоб обійти ці настройки, включаючи деякі, надані компанією Microsoft. Більш докладно про Execution Policy та інші можливості налаштування безпеки в PowerShell рекомендую почитати блог Карлоса Переса.

Навіщо потрібно обходити Execution Policy?

Здається, один з найбільш поширених відповідей на питання, позначений в заголовку, - автоматизація процесів. Однак є й інші причини, за якими PowerShell став популярним серед адміністраторів, пентестеров і хакерів. PowerShell:

  • Вбудований в Window.
  • Може викликати Windows API.
  • Може запускати команди без запису на диск.
  • Може уникати виявлення антивірусами.
  • Уже позначений як «достовірний» і знаходиться в більшості білих списків.
  • Використовується при написанні багатьох утиліт безпеки з відкритим вихідним кодом.

Як подивитися налаштування Execution Policy

Перед початком використання всіх можливостей PowerShell, потрібно обійти заборону на запуск скриптів. Поточні параметри можна отримати, виконавши команду «Get-ExectionPolicy». Якщо заборона виставлений, то при запуску команди з'явиться наступне повідомлення:

PS C: \> Get-ExecutionPolicy

15 Способів обходу powershell execution policy

Малюнок 1: Результат виконання команди в системі, де встановлено заборону на запуск скриптів

Важливо відзначити, що Execution Policy може встановлюватися на різних рівнях системи. Щоб подивитися список рівнів, використовуйте команду нижче (за більш детальною інформацією звертайтесь до відповідній сторінці TechNet).

Get-ExecutionPolicy -List | Format-Table -AutoSize

15 Способів обходу powershell execution policy

Малюнок 2: Налаштування Execution Policy на різних системних рівнях

Налаштування тестового середовища

У прикладах нижче я буду використовувати скрипт з ім'ям runme.ps, що містить наступну команду для виведення повідомлення в консоль:

Write-Host "My voice is my passport, verify me."

При запуску скрипта в системі зі стандартними настройками Execution Policy виводиться наступна помилка:

15 Способів обходу powershell execution policy

Малюнок 3: Помилка, що виводиться при запуску тестового скрипта в середовищі, де настрої заборона на запуск скриптів

Якщо ваша поточна політика дозволяє запуск скриптів, поставити заборону (з метою тестування) можна за допомогою команди Set-ExecutionPolicy Restricted, запущеної з консолі адміністратора PowerShell. Ну, добре, досить пустих балачок. Перейдемо безпосередньо до методів обходу заборони, встановленого в Execution Policy.

Скопіюйте та вставте скрипт в інтерактивну консоль, як показано нижче. Однак майте на увазі, що ви будете обмежені привілеями поточного користувача. Метод найбільш часто використовується для запуску простих скриптів, коли у вас є доступ до інтерактивної консолі. Крім того, ця техніка не тягне за собою зміни налаштувань і не вимагає записи на диск.

15 Способів обходу powershell execution policy

Малюнок 4: Запуск скрипта за допомогою копіювання в інтерактивну консоль

2. Відправлення вмісту скрипта в стандартний потік введення PowerShell

Просто надішліть вміст скрипта в стандартний потік введення. Техніка не тягне за собою зміни налаштувань і не вимагає записи на диск.

Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -

15 Способів обходу powershell execution policy

Малюнок 5: Висновок вмісту скрипта в стандартний потік введення

3. Читання скрипта з файлу і перенаправлення вмісту в стандартний потік введення PowerShell

Використовуйте стандартний формат «type» або PowerShell команду «Get-Content» для читання вмісту скрипта з диска і перенаправьте отриманий результат в стандартний потік введення. Техніка не тягне за собою зміни налаштувань, однак вимагає записи на диск. Щоб уникнути записи на диск, можна використовувати мережевий загальний ресурс (network share).

Приклад 1: Використання PowerShell команди Get-Content

Get-Content. \ Runme.ps1 | PowerShell.exe -noprofile -

15 Способів обходу powershell execution policy

Малюнок 6: Використання команди Get-Content

Приклад 2: Використання команди Type

TYPE. \ Runme.ps1 | PowerShell.exe -noprofile -

15 Способів обходу powershell execution policy

Малюнок 7: Використання команди Type

4. Завантаження скрипта з мережі і запуск за допомогою Invoke Expression

Техніку можна використовувати для завантаження скрипта з інтернету і запуску без запису на диск. Також не будуть змінені ніякі настройки. Я бачив багато способів запуску скриптів подібним чином, але недавно натрапив на наступний приклад:

15 Способів обходу powershell execution policy

Малюнок 8: Завантаження скрипта з інтернету і запуск за допомогою Invoke Expression

5. Використання параметра Command

Приклад 1: Повна команда

Powershell -command "Write-Host 'My voice is my passport, verify me.'"

15 Способів обходу powershell execution policy

Малюнок 9: Запуск скрипта за допомогою повної версії параметра

Приклад 2: Коротка команда

Powershell -c "Write-Host 'My voice is my passport, verify me.'"

Можна об'єднати вищевказані команди в пакетні файли і помістити їх в автозавантаження для збільшення рівня привілеїв.

6. Використання параметра EncodeCommand

Метод схожий з попередньою технікою, але тут все скрипти закодовані в рядок Unicode. Кодування скрипта дозволяє уникнути помилок, що виникають при використанні параметра «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

15 Способів обходу powershell execution policy

Малюнок 10: Повний варіант команди

Приклад 2: Скорочений параметр

powershell.exe -Enc
VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAA
aQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA

7. Використання команди Invoke-Command

Техніка, знайдена мною в блозі Obscuresec, використовується через інтерактивну консоль або в поєднанні з параметром «Command». Головна особливість методу в тому, що його можна використовувати для запуску команд на віддалених системах, де дозволений запуск скриптів PowerShell. Техніка не тягне за собою зміни налаштувань і не вимагає записи на диск.

15 Способів обходу powershell execution policy

Малюнок 11: Використання команди Invoke-Command

Команда нижче, створена за мотивами блогу Obscuresec, може використовуватися для перенесення налаштувань execution policy з віддаленої машини на локальну.

invoke-command -computername Server01 -scriptblock | set-executionpolicy -force

8. Використання команди Invoke-Expression

Як і в попередньому випадку, техніка використовується через інтерактивну консоль або в поєднанні з параметром «Command». Метод не тягне за собою зміни налаштувань і не вимагає записи на диск. Нижче показано кілька найбільш поширених способів використання команди Invoke-Expression для обходу execution policy.

Приклад 1: Повна версія команди Get-Content

Get-Content. \ Runme.ps1 | Invoke-Expression

15 Способів обходу powershell execution policy

Малюнок 12: Повний варіант команди Get-Content

Приклад 2: Скорочений варіант Get-Content

GC. \ Runme.ps1 | iex

9. Використання прапора Bypass

Прапор доданий розробниками Microsoft для обходу execution policy при запуску скриптів з файлів. Microsoft заявляє, що при використання цього прапора «нічого не блокується і не виводиться ніяких попереджень або повідомлень». Техніка не тягне за собою зміни налаштувань і не вимагає записи на диск.

PowerShell.exe -ExecutionPolicy Bypass -File. \ Runme.ps1

15 Способів обходу powershell execution policy

Малюнок 13: Використання прапора Bypass

10. Використання прапора Unrestricted

Техніка схожа з попередньою. Хоча, при використанні прапора Unrestricted Microsoft заявляє, що «завантажуються всі конфігураційні файлу і запускаються всі скрипти. Якщо ви запустите непідписаний скрипт, завантажені з інтернету, з'явиться повідомлення з питанням про підтвердження запуску ». Метод не тягне за собою зміни налаштувань і не вимагає записи на диск.

PowerShell.exe -ExecutionPolicy UnRestricted -File. \ Runme.ps1

15 Способів обходу powershell execution policy

Малюнок 14: Використання прапора Unrestricted

11. Використання прапора Remote-Signed

Створіть скрипт. Потім підпишіть його, використовуючи керівництво. написане Карлосом Пересом. Тепер запустіть скрипт, використовуючи команду нижче:

PowerShell.exe -ExecutionPolicy Remote-signed -File. \ Runme.ps1

12. Заборона ExecutionPolicy шляхом вивантаження Authorization Manager

function Disable-ExecutionPolicy $ executioncontext.gettype (). getfield ( "_ context", "nonpublic, instance"). getvalue (
$ Executioncontext)). Gettype (). Getfield ( "_ authorizationManager", "nonpublic, instance").
setvalue ($ ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))>

15 Способів обходу powershell execution policy

Малюнок 15: Відключення Authorization Manager в поточній сесії

13. Установка Excution Policy для рівня Process

На початку статті було сказано, що execution policy може бути застосована до різних рівнів (включаючи рівень process, на яких у вас є контроль). Використовуючи цю техніку, execution policy може бути встановлена ​​в статус unrestricted під час сесії. Крім того, метод не тягне за собою зміни в налаштуваннях і не вимагає записи на диск. Я знайшов цю техніку в блозі r007break.

Set-ExecutionPolicy Bypass -Scope Process

15 Способів обходу powershell execution policy

Малюнок 16: Встановлення статусу Unrestricted для рівня Process

14. Установка статусу Unrestricted для рівня CurrentUser за допомогою команди

Техніка схожа з попередньою, але тут змінюються установки середовища поточного користувача шляхом модифікації ключа в реєстрі. Метод не тягне за собою зміни налаштувань і не вимагає записи на диск. Техніка також була знайдена в блозі r007break.

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

15 Способів обходу powershell execution policy

Малюнок 17: Встановлення статусу Unrestricted для рівня CurrentUser

15. Установка статусу Unrestricted для рівня CurrentUser через реєстр

У цьому прикладі я покажу, як виставляти постійні настройки execution policy для поточного користувача шляхом модифікації ключа реєстру безпосередньо.

15 Способів обходу powershell execution policy

Малюнок 18: Виставлення статусу для execution policy через реєстр

  • 15 Способів обходу powershell execution policy
  • 15 Способів обходу powershell execution policy
  • 15 Способів обходу powershell execution policy
  • 15 Способів обходу powershell execution policy