Ir al contenido

Herramientas, automatización y NSE para SMB

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

El workflow de SMB trata dialecto, identidad y permisos efectivos. Las herramientas siguientes no son equivalentes. Cada una observa una parte diferente.

smbclient -L enumera shares. -N evita pedir contraseña y -U fija la identidad:

Ventana de terminal
smbclient -N -L '//TARGET_IP/'
smbclient -L '//TARGET_IP/' -U 'DOMAIN/USERNAME'
smbclient '//TARGET_IP/SHARE' -U 'DOMAIN/USERNAME'

Dentro del share, ls, cd, get, put, del y allinfo validan capacidades. Una lista visible no demuestra lectura. Una subida correcta no demuestra sobrescritura o ejecución.

-m PROTOCOL limita el dialecto máximo y permite comparar una negociación moderna con una dependencia heredada. -I TARGET_IP fuerza la dirección contactada sin cambiar el nombre del servicio. -W DOMAIN fija workgroup o dominio. -c 'COMMANDS' ejecuta órdenes del cliente sin abrir una consola interactiva:

Listar un share con dialecto e identidad explícitos
smbclient '//FQDN/SHARE' \
-I TARGET_IP \
-W DOMAIN \
-U USERNAME \
-m SMB3 \
-c 'ls'

La contraseña se solicita fuera del comando. Si FQDN y TARGET_IP señalan sistemas distintos, el resultado deja de ser comparable. -d LEVEL aumenta el debug de Samba. Empieza por -d 3 sobre una sola operación y conserva stderr por separado:

Diagnosticar negociación con smbclient
smbclient -L '//FQDN/' \
-I TARGET_IP \
-U 'DOMAIN/USERNAME' \
-d 3 2>evidence/smbclient-debug.txt

rpcclient consulta interfaces MS-RPC expuestas por SMB:

Ventana de terminal
rpcclient -N -U '' TARGET_IP
rpcclient -U 'DOMAIN/USERNAME' TARGET_IP

Empieza con srvinfo, netshareenumall, querydominfo y una consulta acotada. enumdomusers puede devolver muchos objetos y depender de políticas de acceso.

rpcclient acepta -W, -I, -c y -d con el mismo propósito general que los clientes Samba. La consulta siguiente fija dominio, dirección y orden RPC:

Consultar información de dominio sin consola interactiva
rpcclient FQDN \
-I TARGET_IP \
-W DOMAIN \
-U USERNAME \
-c 'querydominfo' \
-d 2

Un nivel de debug puede incluir nombres, rutas y detalles de autenticación. No lo actives sobre una lista amplia hasta comprobar el contenido de una muestra.

enum4linux-ng combina smbclient, rpcclient, NetBIOS y LDAP cuando están disponibles. -A activa varias comprobaciones. Guarda JSON y YAML con -oA:

Ventana de terminal
enum4linux-ng -A TARGET_IP -oA evidence/smb

Lee qué backend falló. Un apartado vacío puede significar que faltaba una dependencia local o que una interfaz rechazó la consulta.

Para una identidad concreta, -u y -p fijan usuario y contraseña. Evita la contraseña en el historial cuando el entorno permita solicitarla o suministrarla desde un fichero temporal protegido. -t fija el timeout. -R habilita RID cycling y admite un tamaño de lote opcional. -r fija los rangos de RID. -v muestra los comandos Samba ejecutados:

Enumerar con timeout y RID range acotados
enum4linux-ng -A \
-u USERNAME \
-p PASSWORD \
-t 8 \
-R \
-r 500-550 \
-v \
-oA evidence/smb-authenticated \
TARGET_IP

El output distingue el backend que produjo cada dato. Un RID no devuelto puede estar fuera del rango, quedar oculto por la política o no existir. La ausencia no se extrapola al dominio completo.

NetExec resulta útil para comparar muchas direcciones con la misma identidad:

Ventana de terminal
nxc smb TARGETS -u USERNAME -p PASSWORD \
--shares --sessions --loggedon-users

No mezcles una lista amplia de credenciales con enumeración. Separa autenticación, control de bloqueo y consultas posteriores. Guarda --log o redirige el output con un nombre que identifique identidad y posición.

En NetExec 1.5.1, --threads limita procesos concurrentes y --timeout limita la espera de red. --jitter 2-4 introduce una pausa aleatoria por host entre autenticaciones. Es un control de frecuencia por host, no un límite global. --dns-server fija el resolver cuando se usan nombres:

Comparar shares con una identidad y ritmo definidos
nxc smb TARGETS \
-u USERNAME \
-p PASSWORD \
--threads 10 \
--timeout 5 \
--jitter 2-4 \
--dns-server DNS_SERVER \
--shares \
--log evidence/netexec-smb.log

--local-auth interpreta la cuenta en el contexto local de cada host. Sin esa opción, el dominio, el hostname y el formato del usuario pueden seleccionar otra autoridad. No alternes ambos modos en una sola conclusión. Si un resultado cambia permisos o aparece como acceso administrativo, confírmalo con smbclient y una operación de lectura controlada.

smbclient.py aporta un cliente SMB escrito en Python. lookupsid.py recorre SID cuando la política lo permite. samrdump.py consulta SAMR. Herramientas como secretsdump.py cambian de fase: requieren privilegios, acceden a secretos y no pertenecen a la enumeración inicial.

Ventana de terminal
impacket-smbclient 'DOMAIN/USERNAME@TARGET_IP'
impacket-lookupsid 'DOMAIN/USERNAME@TARGET_IP'

Confirma los nombres con rpcclient o una consulta de directorio. RID cycling puede quedar limitado, ralentizado o devolver solo objetos conocidos.

Las herramientas de Impacket comparten parte de su sintaxis, pero cada ejemplo tiene su propio -h. -hashes LMHASH:NTHASH autentica mediante hashes NTLM. -no-pass evita solicitar contraseña. -k usa Kerberos y puede tomar tickets de la caché. -aesKey suministra una clave Kerberos. -dc-ip fija el KDC o controlador y -target-ip separa la dirección contactada del nombre utilizado para identidad:

Consultar SID mediante un hash conocido
impacket-lookupsid \
-hashes LMHASH:NTHASH \
'DOMAIN/USERNAME@TARGET_IP'
Mantener nombre Kerberos y dirección separados
impacket-lookupsid \
-k \
-no-pass \
-dc-ip DC_IP \
-target-ip TARGET_IP \
'DOMAIN/USERNAME@FQDN'

El segundo perfil necesita DNS, hora, SPN y ticket coherentes. -debug muestra el camino interno cuando falla una negociación. Puede exponer material de autenticación y se limita a un caso. Comprueba antes que la utilidad concreta admite cada opción. Impacket no garantiza que todos los ejemplos utilicen el mismo analizador de argumentos.

Ventana de terminal
nmap --script-help 'smb-*'

smb-protocols, smb2-security-mode, smb2-time y smb2-capabilities responden preguntas de negociación. smb-enum-shares y smb-enum-users dependen de acceso. smb-vuln-* ejecuta checks distintos y no debe seleccionarse como un bloque.

Ventana de terminal
sudo nmap -sV -n -Pn -p 445 \
--script smb-protocols,smb2-security-mode,smb2-capabilities \
TARGET_IP

Valida dialecto y signing con un segundo cliente. La disponibilidad de SMBv1 no confirma que un exploit sea viable.

Registra siempre identidad exacta, dominio, método de autenticación, dialecto y puerto. guest, anonymous y null session no son sinónimos. Si una herramienta cambia silenciosamente a guest, el resultado debe atribuirse a guest.