Bypass política de ejecución de scripts en Powershell
Normalmente, cuando se trata de ejecutar un script en una sesión
Powershell, lo mas normal es que aparezca un mensaje prohibiendo dicha ejecución. Esto no es más que la política de ejecución de scripts en Powershell.
En esta entrada veremos como consultar la política que rige en nuestro equipo y cinco sencillas técnicas de bypass de la política de ejecución de scripts de Powershell, sin la necesidad de alterar configuraciones.
Comprobación de política
Por defecto, la ejecución de scripts en Powershell estará restringida. Para comprobar la política actual en nuestro equipo, lo podemos hacer simplemente con la instrucción,
PS > Get-ExecutionPolicy
Y como no puede ser de otra forma, las pruebas que se realizarán a continuación, permanecen con esta política. Igualmente, al ejecutar un script sin tomar ninguna alteración, se podrá visualizar el mensaje de error:
Bypass de política de ejecución
Lectura de script y paso por parámetros
El primer método se basa en leer un script desde la consola de Powershell y, con el resultado de esta lectura, pasársela a una nueva invocación de Powershell. Esto se puede realizar mediante el comando “type” (o con Get-Content) y una tubería a Powershell.
PS > type ‘.\SysbeardScript.ps1’ | powershell.exe –
Ejecución de un script remoto
La siguiente fórmula se basa en pasarle a Powershell el script ubicado en un servidor remoto para su lectura y ejecución. Igualmente, se puede montar un servidor en local, dentro del propio sistema e invocar a su localhost.
PS > powershell -c “iex(New-Object Net.WebClient).DownloadString (‘http://127.0.0.1:8080/SysbeardScript.ps1’)”
Alterar opción “ExecutionPolicy”
Aunque parezca una obviedad alterar esta configuración, dependiendo de como se encuentre el sistema, se podrá alterar el valor de la política “al vuelo”. Es decir, será posible marcar valores como “Unrestricted” o “Bypass”, para la ejecución de un script concreto.
PS > powershell.exe -ExecutionPolicy UnRestricted -F ‘.\SysbeardsScript.ps1’
Modificación de la política general
Como no podía ser de otra forma, además de cambiarlo para una ejecución en concreto, se puede alterar la política general. Aunque es cierto que esta alteración sea probable en el menor número de escenarios, no hay que descártala. En este caso, se modifica la política mediante el registro:
PS > Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell -Name ExecutionPolicy -Value Unrestricted
Modificar las políticas de seguridad del “AuthorizationManager”
El “Authorization Manager” ayuda al equipo a controlar y restringir la ejecución de comandos. Se podría decir que, por cada tipo de comandos listado para el equipo, se solicita un permiso expreso al Authorization Manager. De esta forma, es el encargado de permitir o denegar la solicitud.
Una forma de alterar este comportamiento se basa en intercambiar el valor de autorización opara la aplicación Powershell, por un valor nulo. De esta forma, el Autorization Manager permitirá la ejecución sin restricción.
Mediante la ejecución de la siguiente instrucción conseguimos establecer este escenario y permitir la ejecución de scripts.
PS > ($ctx = $executioncontext.gettype().getfield(“_context”,”nonpublic,instance”).getvalue ($executioncontext)).gettype().getfield(“_authorizationManager” ,”nonpublic,instance”).setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager “Microsoft.PowerShell”))
Conclusiones
En esta entrada hemos visto cinco formas de saltar la política de ejecución de scripts en Powershell de forma sencilla. Hay otras muchas formas mas elaboradas que esperamos traer al blog.
¿Qué os ha parecido?¿Conocéis alguna otra forma de hacer un bypass? Dejadnos vuestros comentarios!