Explotación y escalada de privilegios
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
En este punto, hemos pasado de las etapas Information Gathering
y Vulnerability Assessment
a la etapa Exploitation
del proceso de pruebas de penetración. Tras establecernos, enumeramos los hosts disponibles, buscamos puertos abiertos y sondeamos los servicios accesibles.
Vayamos a DNN y probemos con el par de credenciales Administrator:D0tn31Nuk3R0ck$$@123
. Esto es un éxito; hemos iniciado sesión como administrador superusuario. Aquí queremos registrar otros dos hallazgos de alto riesgo: Insecure File Shares
y Sensitive Data on File Shares
. Podríamos combinarlos en uno, pero conviene destacarlos como problemas separados, ya que si el cliente restringe el acceso anónimo, pero todos los usuarios del dominio pueden acceder al recurso compartido y ver datos innecesarios para su trabajo diario, sigue existiendo un riesgo.
Enumerando el objetivo se puede acceder a una consola SQL en la página Settings
donde podemos habilitar xp_cmdshell
y ejecutar comandos del sistema operativo. Para habilitarla, primero debemos pegar estas líneas en la consola una por una y hacer clic en Run Script
. No obtendremos ningún resultado de cada comando, pero si no hay errores, normalmente significa que funciona.
Si esto funciona, podemos ejecutar comandos del sistema operativo en formato xp_cmdshell '<command here>'
. Podríamos usarlo para obtener un shell inverso o trabajar en la escalada de privilegios.
Una vez cargado, podemos hacer clic derecho en el archivo subido y seleccionar Get URL
. La URL resultante nos permitirá ejecutar comandos a través del shell web, donde podremos trabajar para obtener un reverse shell o realizar pasos de escalada de privilegios, como veremos a continuación.
Intentaremos escalar privilegios con la herramienta PrintSpoofer
y luego veremos si podemos extraer credenciales útiles de la memoria o el registro del host. Necesitaremos nc.exe
en el host DEV01 para enviarnos un shell y el binario PrintSpoofer64.exe
para aprovechar los privilegios SeImpersonate
. Hay varias maneras de transferirlos. Podríamos usar el host dmz01
como "host de salto" y transferir nuestras herramientas a través de él mediante SCP, y luego iniciar un servidor web Python3 y descargarlas en el host DEV01 usando certutil
.
Una forma más sencilla sería modificar el DNN Allowable File Extensions
de nuevo para permitir el formato de archivo .exe
. Luego, podemos cargar ambos archivos y confirmar mediante nuestro shell que se encuentran en formato c:\DotNetNuke\Portals\0
.
Una vez cargado, podemos iniciar un listener Netcat
en el host dmz01
y ejecutar el siguiente comando para obtener un reverse shell como NT AUTHORITY\SYSTEM
:
Ejecutamos el comando y obtenemos un reverse shell casi instantáneamente.
Desde aquí, podemos realizar una post-explotación y recuperar manualmente el contenido de la base de datos SAM y con él, el hash de la contraseña del administrador local.
Ahora podemos modificar de nuevo las extensiones de archivo permitidas para poder descargar los archivos .SAVE
. A continuación, podemos volver a la página File Management
y descargar cada uno de los tres archivos a nuestro host de ataque.
Finalmente, podemos usar secretsdump
para volcar la base de datos SAM y recuperar un conjunto de credenciales de los secretos de LSA.
Confirmamos que estas credenciales funcionan con CrackMapExec
y que ahora tenemos una forma de regresar a este sistema en caso de que perdamos nuestro reverse shell.
En el resultado anterior, observamos una contraseña en texto plano, pero no se ve inmediatamente para qué usuario es. Podríamos volver a volcar LSA usando CrackMapExec
y confirmar que la contraseña corresponde al usuario hporter
.
Ya tenemos nuestro primer conjunto de credenciales de dominio para el dominio INLANEFREIGHT.LOCAL. hporter:Gr8hambino!
Podemos confirmarlo desde nuestro shell inverso en dmz01
.
También podríamos escalar privilegios en el host DEV01 aprovechando la vulnerabilidad PrintNightmare
. Existen otras maneras de recuperar las credenciales, como usar Mimikatz. Experimente con esta máquina y aplique las diversas habilidades aprendidas para Penetration Tester Path
realizar estos pasos de todas las maneras posibles y encontrar la que mejor se adapte a sus necesidades.
En este momento, no tenemos hallazgos adicionales que anotar, ya que solo abusamos de la funcionalidad integrada, lo cual no pudimos hacer debido a los problemas de intercambio de archivos mencionados anteriormente. Podríamos registrarlo PrintNightmare
como un hallazgo de alto riesgo si logramos explotarlo.
Es posible que queramos obtener un shell de Meterpreter en el objetivo o un shell inverso directamente por varias razones. También podríamos haber realizado todas estas acciones sin obtener un shell, ya que podríamos haber usado PrintSpoofer
para agregar un administrador local o volcar credenciales desde DEV01
y luego conectarnos al host de cualquier número de maneras desde nuestro host de ataque usando Proxychains (pass-the-hash, RDP, WinRM, etc.). Vea cuántas maneras puede lograr la misma tarea de interactuar con el host DEV01
directamente desde su host de ataque. Es esencial ser versátil, y esta red de laboratorio es un gran lugar para practicar tantas técnicas como sea posible y perfeccionar nuestras habilidades.
Analicemos rápidamente el método de reenvío de puertos inverso. Primero, necesitamos generar una carga útil usando msfvenom
. Tenga en cuenta que aquí especificaremos la dirección IP del host dmz01
pivote en el campo lhost
y NO la IP de nuestro host de ataque, ya que el objetivo no podría conectarse directamente con nosotros.
A continuación, debemos configurar un listener multi/handler
e iniciarlo en un puerto diferente al que utilizará la carga útil que generamos:
A continuación, necesitamos subir el peyload de reverse shell teams.exe
al host de destino DEV01
. Podemos usar SCP hasta dmz01
, iniciar un servidor web Python en ese host y descargar el archivo. Como alternativa, podemos usar el administrador de archivos DNN para subir el archivo como hicimos anteriormente.
Con el payload en el destino, debemos configurar SSH remote port forwarding
el reenvío del puerto del cuadro pivote dmz01 443
al puerto del receptor de Metasploit [nombre del host] 7000
. El R
indicador indica al host pivote que escuche en el puerto 443
y reenvíe todo el tráfico entrante a este puerto a nuestro receptor de Metasploit [nombre del host] 0.0.0.0:7000
configurado en nuestro host de ataque.
A continuación, ejecute la carga útil teams.exe
desde el host DEV01
y, si todo va según lo planeado, recuperaremos la conexión.
Una advertencia sobre el método anterior es que, por defecto, OpenSSH solo permite la conexión a puertos remotos reenviados desde el propio servidor (localhost). Para ello, debemos editar el archivo /etc/ssh/sshd_config
en sistemas Ubuntu y cambiar la línea GatewayPorts no
a GatewayPorts yes
; de lo contrario, no podremos obtener una respuesta en el puerto que reenviamos en el comando SSH (el puerto 443 en nuestro caso).
Ahora que hemos enumerado la red interna atacada en nuestro primer host, escalado privilegios, realizado la postexplotación y configurado nuestros pivotes/múltiples métodos para evaluar la red interna, centrémonos en el entorno de AD. Dado que contamos con un conjunto de credenciales, podemos realizar diversas enumeraciones para comprender mejor el entorno y buscar vías para acceder a la administración del dominio.
Recupere el contenido de la base de datos SAM en el host DEV01. Envíe el hash NT del usuario administrador como respuesta.
Necesitamos configurar el proxy para navegar a sitios de la red interna:
Al navegar a la siguiente dirección llegamos al panel de login de admin de DNN:
Introducimos las credenciales que encontramos al montar NFS:
Al acceder nos encontramos un directorio File Management
y dentro la siguiente estructura de archivos:
En Users
hay un directorio 002
, que al pulsarlo nos muestra un panel de configuración:
La lista de extensiones de archivo permitidas se puede modificar para incluir .asp
, .exe
y .aspx
; para ello, basta con buscar Settings -> Security -> More -> More Security Settings
y añadirlas en Allowable File Extensions
, y hacer clic en el botón Save
.
Una vez cargado, hacemos clic derecho en el archivo subido y seleccionamos Get URL
. La URL que nos genera nos permitirá ejecutar comandos a través del webshell, donde podremos trabajar para obtener un reverse shell.
Vamos a escalar privilegios con la herramienta PrintSpoofer
y luego veremos si podemos extraer credenciales útiles de la memoria o el registro del host. Necesitaremos nc.exe
en el host DEV01
para enviarnos un shell y el binario PrintSpoofer64.exe
para aprovechar los privilegios SeImpersonate
. Hay varias maneras de transferirlos.
La forma más sencilla sería modificar el DNN Allowable File Extensions
de nuevo para permitir el formato de archivo .exe
. Luego, podemos cargar ambos archivos en http://172.16.8.20/admin/file-management
y confirmar mediante nuestro shell que se encuentran en formato c:\DotNetNuke\Portals\0
.
Una vez cargado, podemos iniciar un listener Netcat
en el host dmz01
y ejecutar el siguiente comando para obtener un reverse shell como NT AUTHORITY\SYSTEM
:
En DMZ01 abrimos un listener de Netcat por el puerto 443:
Ejecutamos el comando y obtenemos un reverse shell casi instantáneamente.
Desde aquí, podemos realizar una post-explotación y recuperar manualmente el contenido de la base de datos SAM y con él, el hash de la contraseña del administrador local.
Ahora podemos modificar de nuevo las extensiones de archivo permitidas para poder descargar los archivos .SAVE
. A continuación, podemos volver a la página File Management
y descargar cada uno de los tres archivos a nuestro host de ataque.
Al extraer los hashes obtenemos una contraseña en plano Gr8hambino!
, pero que no corresponde a ningún usuario, llamándonos mucho la atención:
Observamos que tenemos acceso con el hash del administrador:
Al volcar lsass como administrador observamos que la contraseña Gr8hambino!
que encontramos pertenece al usuario hporter
:
Escale privilegios en el host DEV01. Envíe el contenido del archivo flag.txt al Escritorio del Administrador.
Otro aspecto interesante de DNN es que podemos y subir archiivos .asp
o .aspx
. Esto resulta útil si no podemos obtener RCE a través de la consola SQL. Si se realiza correctamente, podemos subir un webshell ASP y obtener ejecución remota de código en el servidor DEV01
. La lista de extensiones de archivo permitidas se puede modificar para incluir .asp y .aspx; para ello, basta con buscarlas Settings -> Security -> More -> More Security Settings
y añadirlas en Allowable File Extensions
, y hacer clic en el botón Save
.
Una vez hecho esto, podemos subir un tras buscar http://172.16.8.20/admin/file-management
. Haga clic en el botón "Subir archivos" y seleccione el webshell ASP que descargamos en nuestro host de ataque.
A continuación, necesitamos escalar privilegios. En el resultado del comando anterior, vimos que tenemos privilegios SeImpersonate
. Siguiendo los pasos de las secciones del módulo Escalada de privilegios en Windows
, podemos escalar nuestros privilegios a SYSTEM, lo que nos permitirá establecer un punto de apoyo inicial en el dominio de Active Directory (AD) y comenzar a enumerar AD.
Hay muchas maneras de atacar esta red y lograr los mismos resultados, así que no las cubriremos todas aquí, pero una que vale la pena mencionar es . Digamos que queremos devolver un shell inverso desde la DEV01
caja a nuestro host de ataque. No podemos hacerlo directamente porque no estamos en la misma red, pero podemos aprovechar dmz01
para realizar el reenvío de puertos inverso y lograr nuestro objetivo.
Para ello, necesitaremos acceso root SSH al host desde el que estamos pivotando. A veces, veremos esta configuración configurada así, por lo que funciona de inmediato, pero si no tenemos acceso root al host ni la posibilidad de modificar temporalmente el archivo de configuración SSH (y recargarlo para que surta efecto con service sshd reload
), no podremos realizar el reenvío de puertos de esta manera. Tenga en cuenta que este tipo de cambio crea una vulnerabilidad de seguridad en el sistema del cliente, por lo que conviene aclararlo con él, anotar el cambio y hacer todo lo posible por revertirlo al final de las pruebas. Vale la pena leer esta para comprender mejor el reenvío remoto SSH.
Una vez hecho esto, podemos subir un en http://172.16.8.20/admin/file-management
. En el directorio Root hacemos clic en el botón "Subir archivos
" y seleccionamos el webshell ASP que descargamos en nuestro host de ataque.