In My Mind
← ciberseguridad

Smbclient

SMBClient — Guía completa

smbclient es una herramienta de línea de comandos perteneciente al conjunto de herramientas Samba, utilizada para interactuar con servidores que implementan el protocolo SMB (Server Message Block).

Permite conectarse a recursos compartidos de sistemas Windows, Linux, Unix y otros dispositivos compatibles con SMB. Desde una sesión interactiva es posible listar archivos, navegar por directorios, descargar y subir archivos, crear directorios, eliminar archivos y realizar diferentes operaciones sobre los recursos compartidos.

En administración de sistemas y ciberseguridad, smbclient resulta especialmente útil durante procesos de:

  • Enumeración de servicios SMB.
  • Identificación de recursos compartidos.
  • Comprobación de acceso anónimo.
  • Auditorías de permisos.
  • Transferencia de archivos.
  • Administración remota de recursos.
  • Pentesting y CTFs.
  • Análisis de servidores Windows/Samba.

Nota: Los ejemplos de esta guía deben utilizarse únicamente sobre sistemas propios o sobre infraestructura para la que tengas autorización.


1. ¿Qué es SMB?

SMB (Server Message Block) es un protocolo utilizado para compartir recursos a través de una red.

Entre los recursos que puede proporcionar un servidor SMB se encuentran:

  • Carpetas.
  • Archivos.
  • Impresoras.
  • Recursos administrativos.
  • Otros servicios relacionados con archivos y Windows.

Un recurso compartido SMB normalmente se representa mediante una ruta como:

\\192.168.1.10\documentos

En sistemas Linux utilizando smbclient, normalmente se utiliza:

//192.168.1.10/documentos

Por ejemplo:

smbclient //192.168.1.10/documentos

2. Instalación de smbclient

En distribuciones basadas en Debian/Ubuntu:

sudo apt update
sudo apt install smbclient

En Arch Linux:

sudo pacman -S smbclient

En Fedora:

sudo dnf install samba-client

Una vez instalado, podemos comprobar la versión:

smbclient --version

También podemos consultar la ayuda:

smbclient --help

3. Sintaxis básica

La estructura general de smbclient es:

smbclient [OPCIONES] //HOST/SHARE

Por ejemplo:

smbclient //192.168.1.10/public

Donde:

192.168.1.10 → Dirección IP del servidor
public       → Nombre del recurso compartido

4. Enumerar recursos compartidos

Antes de conectarnos a una carpeta concreta, normalmente queremos conocer qué recursos SMB están disponibles.

Para ello utilizamos:

smbclient -L <IP>

Ejemplo:

smbclient -L 192.168.1.10

El parámetro -L solicita al servidor una lista de recursos compartidos.


4.1. Enumeración anónima

Algunos servidores permiten consultar los recursos compartidos sin proporcionar credenciales.

Podemos probar:

smbclient -L 192.168.1.10 -N

-N indica que no se debe solicitar una contraseña.

Un servidor podría devolver algo parecido a:

Sharename       Type      Comment
---------       ----      -------
public          Disk      Public Share
documents       Disk      Company Documents
IPC$            IPC       IPC Service

En este caso hemos identificado:

public
documents
IPC$

como recursos accesibles desde el servidor.


5. Conectarse a un recurso compartido

Una vez conocemos el nombre del recurso, podemos conectarnos utilizando:

smbclient //192.168.1.10/public

Si el servidor solicita credenciales, smbclient las pedirá de forma interactiva.

Ejemplo:

Enter WORKGROUP\username's password:

Después de autenticarnos correctamente aparecerá un prompt similar a:

smb: \>

Esto significa que estamos dentro de una sesión SMB interactiva.


6. Conectarse especificando el usuario

Podemos especificar el usuario mediante -U:

smbclient //192.168.1.10/public -U usuario

El programa solicitará posteriormente la contraseña:

Enter WORKGROUP\usuario's password:

También podemos especificar el dominio:

smbclient //192.168.1.10/public -U DOMINIO/usuario

Por ejemplo:

smbclient //192.168.1.10/public -U CONTOSO/alice

7. Utilizar credenciales desde la línea de comandos

También existe la posibilidad de proporcionar usuario y contraseña directamente:

smbclient //192.168.1.10/public -U 'usuario%contraseña'

Ejemplo:

smbclient //192.168.1.10/public -U 'alice%Password123!'

Sin embargo, no es recomendable utilizar este método en entornos reales, ya que la contraseña puede quedar expuesta en el historial del shell o en determinados mecanismos de inspección de procesos.

Es preferible:

smbclient //192.168.1.10/public -U alice

y proporcionar la contraseña cuando sea solicitada.


8. Conexión anónima

Si el recurso permite acceso anónimo:

smbclient //192.168.1.10/public -N

También podemos intentar enumerar los recursos:

smbclient -L 192.168.1.10 -N

El acceso anónimo depende de la configuración del servidor. Que SMB esté abierto no significa necesariamente que permita sesiones anónimas.


9. La consola interactiva

Después de conectarnos veremos:

smb: \>

A partir de ese momento podemos utilizar los comandos internos de smbclient.

Podemos obtener ayuda utilizando:

smb: \> help

También podemos consultar un comando específico:

smb: \> help get

10. Listar archivos y directorios

El comando más utilizado es:

smb: \> ls

También podemos utilizar:

smb: \> dir

Ejemplo:

smb: \> ls

  .                                   D        0  Mon Oct  4 20:10:10 2026
  ..                                  D        0  Mon Oct  4 20:10:10 2026
  documents                           D        0  Mon Oct  4 20:11:02 2026
  backup.zip                          A     2048  Mon Oct  4 20:12:15 2026

        12345678 blocks of size 1024
        9876543 blocks available

11. Navegar por directorios

Para entrar en un directorio:

smb: \> cd documents

Podemos comprobar nuestra ubicación:

smb: \documents\> pwd
Current directory is \\192.168.1.10\public\documents

Para regresar al directorio anterior:

smb: \documents\> cd ..

12. Descargar archivos

El comando get permite descargar un archivo remoto:

smb: \> get archivo.txt

Por ejemplo:

smb: \> get report.pdf
getting file \report.pdf of size 24576 as report.pdf

El archivo será almacenado en el directorio local desde el que iniciamos smbclient.


13. Descargar múltiples archivos

Podemos utilizar mget para descargar varios archivos.

Por ejemplo:

smb: \> mget *.txt

Esto intentará descargar todos los archivos .txt.

También:

smb: \> mget *.pdf

o:

smb: \> mget *

Dependiendo de la configuración, smbclient puede solicitar confirmación para cada archivo.

Podemos desactivar las confirmaciones interactivas utilizando:

smb: \> prompt

14. Subir archivos

El comando put permite subir un archivo local al recurso SMB:

smb: \> put archivo.txt

Por ejemplo:

smb: \> put backup.zip

Si la cuenta tiene permisos de escritura, el archivo será almacenado en el directorio remoto actual.


15. Subir múltiples archivos

Podemos utilizar mput:

smb: \> mput *.txt

Por ejemplo:

smb: \> mput *.pdf

Esto intentará transferir todos los archivos que coincidan con el patrón.


16. Crear directorios

Si tenemos permisos suficientes podemos crear directorios:

smb: \> mkdir backup

Después:

smb: \> ls

Podremos comprobar que el directorio fue creado.


17. Eliminar archivos

El comando del permite eliminar archivos:

smb: \> del archivo.txt

También puede utilizarse:

smb: \> rm archivo.txt

La posibilidad de eliminar archivos depende de los permisos asignados a nuestra cuenta.


18. Renombrar archivos

Podemos utilizar:

smb: \> rename viejo.txt nuevo.txt

Por ejemplo:

smb: \> rename report.txt report-old.txt

19. Obtener información de archivos

Para consultar información sobre un archivo podemos utilizar:

smb: \> allinfo archivo.txt

Dependiendo del servidor y de la implementación SMB, podemos obtener información como:

  • Tamaño.
  • Fechas.
  • Atributos.
  • Metadatos.
  • Información del archivo.

20. Consultar atributos

Podemos utilizar:

smb: \> getfacl archivo.txt

En servidores compatibles, esto puede proporcionar información relacionada con las ACL del archivo.


21. Descargar archivos desde una ruta específica

También podemos indicar una ruta remota:

smb: \> get documents/report.pdf

Por ejemplo:

smb: \> get documents/financial-report.pdf

22. Ejecutar comandos directamente sin entrar en la consola

Una característica muy útil de smbclient es que podemos ejecutar comandos directamente desde Bash utilizando -c.

Por ejemplo:

smbclient //192.168.1.10/public -N -c 'ls'

Esto permite obtener el contenido del recurso sin entrar en la consola interactiva.

Otro ejemplo:

smbclient //192.168.1.10/public -U alice -c 'ls'

Podemos ejecutar varias operaciones:

smbclient //192.168.1.10/public -U alice -c 'cd documents; ls'

23. Descargar un archivo directamente

Podemos combinar -c con get:

smbclient //192.168.1.10/public -U alice -c 'get report.pdf'

También:

smbclient //192.168.1.10/public -N -c 'get public.txt'

Esto resulta especialmente útil para automatización mediante scripts Bash.


24. Subir archivos desde Bash

De la misma manera:

smbclient //192.168.1.10/public -U alice -c 'put backup.zip'

25. Utilizar archivos de credenciales

Para evitar escribir credenciales directamente en el comando podemos utilizar un archivo de credenciales.

Crear:

nano ~/.smbcredentials

Contenido:

username=alice
password=Password123!
domain=CONTOSO

Proteger el archivo:

chmod 600 ~/.smbcredentials

Posteriormente podemos utilizarlo:

smbclient //192.168.1.10/public -A ~/.smbcredentials

Esta opción es preferible a colocar contraseñas directamente en comandos que pueden quedar registrados en el historial.


26. Especificar el dominio

En entornos Windows/Active Directory podemos especificar un dominio:

smbclient //192.168.1.10/share -U 'CONTOSO/alice'

También:

smbclient //192.168.1.10/share -U 'alice' -W CONTOSO

Donde:

CONTOSO → Dominio o grupo de trabajo
alice   → Usuario

27. Seleccionar la versión del protocolo SMB

SMB tiene diferentes versiones y dialectos.

Podemos especificar una versión utilizando:

smbclient //192.168.1.10/share --option='client min protocol=SMB2'

También podemos establecer un protocolo máximo:

smbclient //192.168.1.10/share --option='client max protocol=SMB3'

En sistemas modernos se recomienda evitar protocolos antiguos como SMB1/CIFS cuando no sean estrictamente necesarios, debido a sus problemas de seguridad y compatibilidad.


28. Enumeración básica durante un pentest

Cuando encontramos un servicio SMB, una metodología básica puede ser:

1. Identificar el puerto SMB
2. Enumerar recursos compartidos
3. Comprobar acceso anónimo
4. Identificar recursos interesantes
5. Revisar permisos
6. Descargar archivos autorizados para análisis
7. Analizar la información obtenida

Por ejemplo:

smbclient -L 10.10.10.20 -N

Si encontramos:

Sharename
---------
public
backup
documents

podemos probar individualmente:

smbclient //10.10.10.20/public -N
smbclient //10.10.10.20/backup -N
smbclient //10.10.10.20/documents -N

29. Diferencia entre SMB y SMBClient

Es importante no confundir ambos conceptos.

SMB es el protocolo.

SMB
│
├── Compartición de archivos
├── Acceso remoto
├── Impresoras
└── Recursos de red

Mientras que:

smbclient

es una herramienta que permite interactuar con servidores SMB desde la terminal.

Por ejemplo:

smbclient //192.168.1.10/public

utiliza SMB para comunicarse con el servidor.


30. Puertos relacionados con SMB

SMB puede encontrarse principalmente en:

TCP/445

También pueden aparecer servicios SMB antiguos relacionados con:

TCP/139

Una comprobación básica con Nmap sería:

nmap -p 139,445 192.168.1.10

Para obtener información adicional sobre SMB:

nmap -p 139,445 --script smb-protocols 192.168.1.10

Y para consultar información básica del servidor:

nmap -p 139,445 --script smb-os-discovery 192.168.1.10

31. Herramientas complementarias

smbclient es solamente una de las herramientas disponibles para trabajar con SMB.

smbmap

smbmap permite enumerar rápidamente recursos SMB y sus permisos.

Ejemplo:

smbmap -H 192.168.1.10

Con usuario:

smbmap -H 192.168.1.10 -u alice -p 'Password123!'

rpcclient

rpcclient permite interactuar con servicios RPC de Windows.

Con una sesión anónima:

rpcclient -U "" -N 192.168.1.10

Una vez dentro:

rpcclient $> enumdomusers

También:

rpcclient $> enumdomgroups

Su utilidad depende de la configuración del servidor y de los permisos disponibles.


enum4linux-ng

enum4linux-ng automatiza diferentes técnicas de enumeración de SMB, NetBIOS, RPC y otros servicios relacionados.

Ejemplo:

enum4linux-ng 192.168.1.10

Con credenciales:

enum4linux-ng -u alice -p 'Password123!' 192.168.1.10

Nmap

Nmap puede utilizarse para identificar servicios SMB:

nmap -p 139,445 192.168.1.10

También podemos ejecutar scripts NSE relacionados con SMB:

nmap -p 445 --script smb-* 192.168.1.10

Algunos scripts pueden realizar comprobaciones más intrusivas. Utilízalos únicamente sobre sistemas autorizados.


32. Ejemplo completo de flujo de trabajo

Supongamos que durante una auditoría autorizada encontramos:

192.168.1.10

Primero comprobamos los puertos SMB:

nmap -p 139,445 192.168.1.10

Después enumeramos los recursos:

smbclient -L 192.168.1.10 -N

Supongamos que obtenemos:

Sharename       Type
---------       ----
public          Disk
documents       Disk
backup          Disk
IPC$            IPC

Probamos el recurso público:

smbclient //192.168.1.10/public -N

Listamos su contenido:

smb: \> ls

Entramos en un directorio:

smb: \> cd documents

Volvemos a listar:

smb: \documents\> ls

Descargamos un archivo autorizado para análisis:

smb: \documents\> get report.pdf

Salimos:

smb: \documents\> exit

33. Comandos interactivos de referencia

ComandoFunción
helpMostrar ayuda
lsListar archivos
dirListar archivos
cdCambiar directorio
pwdMostrar directorio actual
getDescargar archivo
mgetDescargar múltiples archivos
putSubir archivo
mputSubir múltiples archivos
mkdirCrear directorio
rmdirEliminar directorio
delEliminar archivo
renameRenombrar archivo
allinfoMostrar información del archivo
getfaclConsultar ACL cuando sea compatible
lcdCambiar directorio local
lpwdMostrar directorio local
promptActivar/desactivar confirmaciones
recurseActivar/desactivar recursividad
exitSalir
quitSalir

34. Opciones importantes de smbclient

Algunas de las opciones más utilizadas son:

OpciónFunción
-LEnumerar recursos compartidos
-NNo solicitar contraseña
-UEspecificar usuario
-AUtilizar archivo de credenciales
-WEspecificar grupo de trabajo/dominio
-cEjecutar comandos sin entrar en modo interactivo
-IEspecificar dirección IP
-pEspecificar puerto
--helpMostrar ayuda
--versionMostrar versión

35. Automatización con Bash

Una de las ventajas de smbclient es que puede integrarse fácilmente con scripts.

Por ejemplo:

#!/bin/bash

TARGET="192.168.1.10"
SHARE="public"

smbclient "//$TARGET/$SHARE" -N -c "ls"

También podemos descargar un archivo automáticamente:

#!/bin/bash

TARGET="192.168.1.10"
SHARE="public"

smbclient "//$TARGET/$SHARE" -N -c "get report.pdf"

O ejecutar varias instrucciones:

smbclient //192.168.1.10/public -N -c "cd documents; ls; get report.pdf"

Esto permite incorporar SMB dentro de procesos automatizados de administración, inventario o auditoría.


36. Consideraciones de seguridad

Durante una auditoría SMB debemos prestar especial atención a:

Acceso anónimo

Un servidor que permita:

smbclient -L 192.168.1.10 -N

puede estar exponiendo información que debería requerir autenticación.

Recursos con permisos de escritura

Un recurso accesible mediante:

smbclient //192.168.1.10/public -N

que además permita:

smb: \> put archivo.txt

tiene permisos de escritura para esa sesión.

Credenciales

Evita almacenar contraseñas directamente en comandos:

smbclient //192.168.1.10/public -U 'alice%Password123!'

si el entorno requiere una gestión segura de secretos.

Es preferible:

smbclient //192.168.1.10/public -U alice

o utilizar un archivo de credenciales adecuadamente protegido.

Protocolos antiguos

Siempre que sea posible, evita SMB1 y utiliza versiones modernas del protocolo.


37. Cheat Sheet

Enumerar shares

smbclient -L 192.168.1.10

Enumerar shares sin contraseña

smbclient -L 192.168.1.10 -N

Conectarse a un share

smbclient //192.168.1.10/public

Conectarse con usuario

smbclient //192.168.1.10/public -U alice

Conectarse como anónimo

smbclient //192.168.1.10/public -N

Listar archivos

smb: \> ls

Cambiar de directorio

smb: \> cd documents

Descargar

smb: \> get file.txt

Descargar varios

smb: \> mget *.txt

Subir

smb: \> put file.txt

Subir varios

smb: \> mput *.txt

Crear directorio

smb: \> mkdir backup

Eliminar archivo

smb: \> del file.txt

Renombrar

smb: \> rename old.txt new.txt

Ejecutar comando directamente

smbclient //192.168.1.10/public -N -c 'ls'

Descargar sin entrar a la consola

smbclient //192.168.1.10/public -N -c 'get file.txt'

Usar credenciales desde archivo

smbclient //192.168.1.10/public -A ~/.smbcredentials

Escanear puertos SMB

nmap -p 139,445 192.168.1.10

Identificar protocolo SMB

nmap -p 445 --script smb-protocols 192.168.1.10

38. Resumen

smbclient es una de las herramientas fundamentales para trabajar con servicios SMB desde Linux.

Su uso puede resumirse en cuatro etapas principales:

             ┌─────────────────────┐
             │ Identificar SMB      │
             │ 139 / 445            │
             └──────────┬──────────┘
                        │
                        ▼
             ┌─────────────────────┐
             │ Enumerar recursos   │
             │ smbclient -L        │
             └──────────┬──────────┘
                        │
                        ▼
             ┌─────────────────────┐
             │ Autenticarse        │
             │ -U / -N / -A        │
             └──────────┬──────────┘
                        │
                        ▼
             ┌─────────────────────┐
             │ Interactuar          │
             │ ls / cd / get / put │
             └─────────────────────┘

Los comandos más importantes que debemos recordar son:

smbclient -L <IP> -N
smbclient //<IP>/<SHARE> -U <USUARIO>
smbclient //<IP>/<SHARE> -N

y dentro de la sesión:

ls
cd
pwd
get
mget
put
mput
mkdir
del
rename
help
exit