Escalada de privilegios en Windows
Introducción
Una vez que nos hemos afianzado, elevar nuestros privilegios nos proporcionará más opciones de persistencia y puede revelar información almacenada localmente que puede mejorar nuestro acceso dentro del entorno. El objetivo general de la escalada de privilegios de Windows es ampliar nuestro acceso a un sistema determinado a un miembro del grupo Local Administrators
o la cuenta NT AUTHORITY\SYSTEM
.
Sin embargo, puede haber escenarios en los que la escalada a otro usuario del sistema sea suficiente para alcanzar nuestro objetivo. La escalada de privilegios suele ser un paso vital durante cualquier compromiso. Necesitamos utilizar el acceso obtenido o algunos datos (como las credenciales) encontrados solo una vez que tengamos una sesión en un contexto elevado. En algunos casos, la escalada de privilegios puede ser el objetivo final de la evaluación si nuestro cliente nos contrata para una evaluación de tipo "imagen dorada" o "ruptura de la estación de trabajo". La escalada de privilegios suele ser vital para continuar a través de una red hacia nuestro objetivo final, así como para el movimiento lateral.
Dicho esto, es posible que necesitemos aumentar los privilegios por una de las siguientes razones:
1.
2.
Para escalar privilegios localmente para obtener acceso a algún recurso local como una base de datos
3.
4.
Para obtener credenciales para moverse lateralmente o escalar privilegios dentro de la red del cliente
Hay muchas herramientas disponibles para nosotros como pentesters que nos ayudan con la escalada de privilegios. Sin embargo, también es esencial entender cómo realizar comprobaciones de escalada de privilegios y aprovechar las fallas manuaalmente
en la medida de lo posible en un escenario determinado. Podemos encontrarnos con situaciones en las que un cliente nos coloca en una estación de trabajo administrada sin acceso a Internet, con un firewall muy fuerte y los puertos USB deshabilitados, por lo que no podemos cargar ninguna herramienta o script de ayuda. En este caso, sería crucial tener un conocimiento sólido de las comprobaciones de escalada de privilegios de Windows utilizando tanto PowerShell como la línea de comandos de Windows.
Los sistemas Windows presentan una amplia superficie de ataque. Algunas de las formas en que podemos aumentar los privilegios son:
Abuso de privilegios de grupo de Windows
Abuso de privilegios de usuario de Windows
Cómo eludir el control de cuentas de usuario
Abuso de permisos de archivos o servicios débiles
Aprovechamiento de vulnerabilidades del kernel sin parches
Robo de credenciales
Captura de tráfico
y muchas más.
Escenario 1: Bypass de las restricciones de la red
Una vez me dieron la tarea de escalar privilegios en un sistema proporcionado por el cliente sin acceso a Internet y con puertos USB bloqueados. Debido al control de acceso a la red implementado, no pude conectar mi máquina de ataque directamente a la red del usuario para que me ayudara. Durante la evaluación, ya había encontrado una falla de red en la que la VLAN de la impresora estaba configurada para permitir la comunicación saliente a través de los puertos 80, 443 y 445. Utilicé métodos de enumeración manual para encontrar una falla relacionada con los permisos que me permitiera escalar privilegios y realizar un volcado de memoria manual del proceso LSASS
. Desde aquí, pude montar un recurso compartido SMB alojado en mi máquina de ataque en la VLAN de la impresora y extraer el archivo DMP LSASS
. Con este archivo en la mano, utilicé Mimikatz
sin conexión para recuperar el hash de contraseña NTLM para un administrador de dominio, que pude descifrar sin conexión y usar para acceder a un controlador de dominio desde el sistema proporcionado por el cliente.
Escenario 2: Saqueo de acciones abiertas
Durante otra evaluación, me encontré en un entorno bastante cerrado, bien monitoreado y sin fallas de configuración obvias ni servicios/aplicaciones vulnerables en uso. Encontré un recurso compartido de archivos completamente abierto, que permitía a todos los usuarios enumerar su contenido y descargar archivos almacenados en él. Este recurso compartido alojaba copias de seguridad de máquinas virtuales en el entorno. Estaba explícitamente interesado en los archivos del disco duro virtual ( .VMDK
y archivos .VHDX
). Podía acceder a este recurso compartido desde una máquina virtual de Windows, montar el disco duro virtual .VHDX
como una unidad local y explorar el sistema de archivos. Desde aquí, recuperé los subárboles de registro SYSTEM
, SAM
y SECURITY
, los moví a mi máquina de atacante Kali Linux y extraje el hash de la contraseña del administrador local utilizando la herramienta secretsdump.py . La organización estaba utilizando una imagen dorada, y el hash del administrador local se podía utilizar para obtener acceso de administrador a casi todos los sistemas Windows a través de un ataque de paso del hash.
Escenario 3: Credential Hunting y abuso de privilegios de cuenta
En este último escenario, me colocaron en una red bastante bloqueada con el objetivo de acceder a servidores de bases de datos críticos. El cliente me proporcionó una computadora portátil con una cuenta de usuario de dominio estándar y pude cargar herramientas en ella. Finalmente, ejecuté la herramienta Snaffler para buscar información confidencial en los recursos compartidos de archivos. Encontré algunos archivos .sql
que contenían credenciales de base de datos con pocos privilegios para una base de datos en uno de sus servidores de bases de datos. Utilicé un cliente MSSQL localmente para conectarme a la base de datos utilizando las credenciales de la base de datos, habilitar el procedimiento almacenado xp_cmdshell y obtener la ejecución local del comando. Al usar este acceso como una cuenta de servicio, confirmé que tenía el SeImpersonatePrivilege , que se puede aprovechar para la escalada de privilegios locales. Descargué una versión compilada personalizada de Juicy Potato al host para ayudar con la escalada de privilegios y pude agregar un usuario administrador local. Agregar un usuario no fue ideal, pero mis intentos de obtener una shell inversa no funcionaron. Con este acceso, pude ingresar de forma remota al host de la base de datos y obtener control total de las bases de datos de uno de los clientes de la empresa.
¿Por qué ocurre la escalada de privilegios?
No existe una única razón por la que los hosts de una empresa puedan ser víctimas de una escalada de privilegios, pero existen varias posibles causas subyacentes. Algunas de las razones típicas por las que se introducen fallas y pasan desapercibidas son el personal y el presupuesto. Muchas organizaciones simplemente no tienen el personal para mantenerse al día con la aplicación de parches, la gestión de vulnerabilidades, las evaluaciones internas periódicas (autoevaluaciones), la supervisión continua y las iniciativas más grandes que consumen más recursos. Estas iniciativas pueden incluir actualizaciones de estaciones de trabajo y servidores, así como auditorías de recursos compartidos de archivos (para bloquear directorios y proteger/eliminar archivos confidenciales, como scripts o archivos de configuración que contienen credenciales).
Hacia delante
Los escenarios anteriores muestran cómo la comprensión de la escalada de privilegios de Windows es crucial para un evaluador de penetración. En el mundo real, rara vez atacaremos un solo host y debemos ser capaces de pensar con rapidez. Deberíamos ser capaces de encontrar formas creativas de escalar privilegios y formas de usar este acceso para avanzar hacia el objetivo de la evaluación.
Ejemplos prácticos
A lo largo del módulo, cubriremos ejemplos con la salida de comandos correspondiente, la mayoría de los cuales se pueden reproducir en las máquinas virtuales de destino que se pueden generar dentro de las secciones relevantes. Se le proporcionarán credenciales RDP para interactuar con las máquinas virtuales de destino y completar los ejercicios y evaluaciones de habilidades de la sección. Puede conectarse desde Pwnbox o su propia máquina virtual (después de descargar una clave VPN una vez que se genera una máquina) a través de RDP usando FreeRDP , Remmina o el cliente RDP de su elección.
Conexión a través de FreeRDP
Podemos conectarnos a través de la línea de comandos usando el comando xfreerdp /v:<target ip> /u:htb-student
y escribiendo la contraseña proporcionada cuando se nos solicite. La mayoría de las secciones proporcionarán credenciales para el usuario htb-student
, pero algunas, según el material, le pedirán que se conecte a RDP con un usuario diferente y se proporcionarán credenciales alternativas.
Muchas de las secciones que veremos en este módulo requieren herramientas como scripts de código abierto, archivos binarios precompilados y PoC de explotación. En los ejemplos prácticos, estos se pueden encontrar en el directorio C:\Tools
del host de destino. Aunque se proporcionan la mayoría de las herramientas, desafíese a cargar archivos en el destino (utilizando las técnicas que se muestran en el módulo Transferencias de archivos
) e incluso puedes probar a compilar algunas de las herramientas por tu cuenta utilizando Visual Studio .
¡Diviértete y no olvides pensar fuera de la caja!
Última actualización
¿Te fue útil?