Persistencia en entornos Windows
Persistencia Local
Manipulación de cuentas sin privilegios
Para evitar que el blue team nos detecte al usar la cuenta Administrator debido que, esta está siendo monitoreanda, podemos manipular una cuenta con pocos privilegios.
En caso de tener una cuenta con privilegios de administrador, podemos usarla para darle más privilegios al usuario que deseamos agregándolo al grupo Administrators
:
Con esto, podremos acceder a la máquina usando RDP, WinRM, u otro servicio de administración remota disponible.
En caso de evitar ser detectados por usar el grupo Administrators
, podemos usar el grupo Backup Operators
. Los usuarios este grupo no tienen permisos de administrador, pero podrán leer/escribir cualquier archivo o registro del sistema, ignorando cualquier DACL configurado (podríamos leer los archivos SAM
y SYSTEM
):
También, podemos agregar el usuario al grupo Remote Management Users
para poder acceder usando servicios remotos, como RDP, WinTM u otro:
Si queremos acceder usando WinRM, podemos usar la herramienta evil-winrm
:
Si validamos que estamos en el grupo Backup Operators
usando el comando whoami /groups
, y este tiene el atributo Group used for deny only
, significa que está deshabilitado, por lo tanto, no podremos ver todos los archivos.
Esto se debe a una de las características implementadas por el UAC (LocalAccountTokenFilterPolicy
), la cual, elimina de cualquier cuenta local sus privilegios de administrador al iniciar sesión de forma remota. Si bien puede elevar sus privilegios a través de UAC desde una conexión con GUI, si usa WinRM, está confinado a un token de acceso limitado sin privilegios de administrador.
Para poder recuperar los privilegios de administración de su usuario, tendremos que deshabilitar LocalAccountTokenFilterPolicy
cambiando la siguiente clave de registro a 1
:
Ahora, podemos hacer una copia de los archivos SAM y SYSTEM:
Con el script de secretsdump.py
podemos dumpear los hashes:
Archivos Backdoor
Otra forma para establecer persistencia, es modificar los archivos con los que sabemos que el usuario interactúa regularmente. Al modificarlos, podemos plantar un backdoor que se ejecutará cada vez que el usuario interactúe con él.
Para evitar ser descubiertos, debemos modificar los archivos, pero estos no pueden dejar de funcionar.
Si encontramos un ejecutable en el escritorio, es muy probable que el usuario lo use con frecuencia.
En este caso, modificaremos el binario de PuTTY, el cual, lo modificaremos usando msfvenom
para que cuando se ejecute, cree un subproceso con una shell reversa, y funcione correctamente:
Abusando de servicios
Los servicios de Windows son excelentes para configurar la persistencia, debido a que, podemos ejecutarlos en segundo plano cuando se inicia la máquina víctima.
Podemos crear e iniciar un servicio (con el nombre que deseemos) usando el siguiente comando:
En este caso, estamos reseteando la contraseña del usuario Administrator cuando se inicia el servicio, además, el servicio se inicia automáticamente.
Si queremos tener una shell reversa, debemos usar los siguientes comandos:
Generación de binario malicioso:
Subimos el payload y creamos el servicio:
Abusando de tareas programadas
La forma más común de programar tareas es utilizando el programador de tareas integrado de Windows. El programador de tareas permite un control granular de cuándo comenzará su tarea, lo que le permite configurar tareas que se activarán a horas específicas, se repetirán periódicamente o incluso se activarán cuando ocurran eventos específicos del sistema.
Se creará una tarea que ejecutará una shell reversa cada minuto:
Con este comando creamos una tarea y correrá una shell reversa usando netcat. Las opciones /sc
y /mo
indican que la tarea se ejecutará cada minuto, mientras que, la opción /ru
indica que usará los privilegios de SYSTEM.
Para validar que esta se creó de forma correcta, usamos el siguiente comando:
Persistencia activada por inicio de sesión
Cada usuario tiene una carpeta en C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\StartUp
donde, podemos dejar los ejecutables para dejar los binarios a ejecutar cuando el usuario inicia sesión.
Si queremos forzar se ejecute para todos los usuarios, podemos dejar el binario en la carpeta C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
.
Podemos generar una shell reversa usando msfvenom:
Para subir el payload a la máquina víctima, podemos usar un servidor web:
Servidor web:
Descarga desde powershell:
Backdoor de pantalla de inicio de sesión/RDP
Si tenemos acceso físico a la máquina (o vía RDP), podemos hacer un backdoor en la pantalla de inicio de sesión para acceder a una terminal sin tener credenciales válidas para una máquina.
Para validar si tenemos sticky keys, podemos presionar las teclas CTRL
, ALT
y DEL
sin mantener las otras presionadas, si cumple el mismo efecto que el presionarlas juntas, significa que tenemos este comportamiento.
La persistencia con este método se realiza abusando del atajo habilitado por defecto de cuando se presiona 5 veces la tecla SHIFT
. En este atajo, por lo general aparace la siguiente ventana:
Luego de esto, Windows ejecutará el binario C:\Windows\System32\sethc.exe
. Si somos capas de cambiar dicho binario por nuestro payload, podríamos ejecutarlo con el atajo, incluso en la pantalla de inicio de sesión antes de ingresar las credenciales.
Una forma de hacer esto, es reemplazando el binario por cmd.exe
para obtener una shell.
Para reemplazar el binario, primero debemos ser dueños del binario:
Le damos permisos a nuestro usaurio para modificarlo, y lo reemplazamos:
Recordar de hacer un respaldo de este antes de su modificación.
Luego de esto, validamos que en la pantalla de inicio, luego de apretar 5 veces la tecla SHIFT
, se nos abre una terminal:
Persistencia a través de servicios existentes
La forma más fácil es cargar la web shell en el directorio de web del servidor. Esto nos dará acceso, pero con los privilegios del usuario configurado en el IIS (que por defecto, es iis apppool\defaultapppool
). La gracia de este usuario, es que tiene el permiso SeImpersonatePrivilege
.
Podemos usar la siguiente web shell en ASP.NET, el cual, debe estar en el directorio C:\inetpub\wwwroot
:
Ahora vamos a la URL http://<target_ip>/cmdasp.aspx
:
Last updated