> For the complete documentation index, see [llms.txt](https://hacking-3.gitbook.io/barre/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-3.gitbook.io/barre/apuntes/general/redes/protocolos/smb.md).

# SMB

## Que es?

Protocolo de red utilizado en SO Windows con el objetivo de compartir cosas como ficheros, carpetas compartidas, impresoras, a diferentes equipos o nodos de una red.&#x20;

Usa principalmente los puertos 445 y 139, este ultimo lo usa en combinación con NetBIOS.&#x20;

***

* La versión 1 de este protocolo es vulnerable a EternalBlue (MS17-010).
* La version 3 es vulnerable a RCE (CVE-2020-0796)

***

## Smbclient

### **Navegar y acceder a recursos compartidos**

El comando principal que usarás es `smbclient`. Es similar a un cliente FTP pero para servidores SMB. Con este comando, puedes conectarte a recursos compartidos en la red.

**Ejemplo básico de conexión:**

```bash
smbclient //servidor/compartido -U usuario
```

* `//servidor/compartido`: Especifica la ruta al recurso compartido (puede ser una dirección IP o nombre del servidor).
* `-U usuario`: Define el nombre de usuario que se va a usar para la autenticación.

Después de ejecutar el comando, se te pedirá la contraseña para acceder al recurso compartido.

Una vez dentro del recurso compartido, puedes usar comandos como:

* `ls`: Listar archivos en el recurso compartido.
* `cd <directorio>`: Cambiar de directorio dentro del recurso compartido.
* `get <archivo>`: Descargar un archivo del servidor a tu máquina local.
* `put <archivo>`: Subir un archivo desde tu máquina local al servidor.
* `exit`: Salir de la sesión.

### **Montar recursos SMB en el sistema de archivos**

Otra forma de interactuar con recursos SMB es montándolos en el sistema de archivos local. Esto se puede hacer con el comando `mount` y el tipo de sistema de archivos `cifs`.

**Ejemplo de montaje manual:**

```bash
sudo mount -t cifs -o username=usuario,password=contraseña //servidor/compartido /punto/de/montaje
```

* `//servidor/compartido`: Es el recurso compartido al que deseas conectarte.
* `/punto/de/montaje`: Es el directorio local donde se montará el recurso compartido.
* `username=usuario,password=contraseña`: Son las credenciales para la autenticación (por razones de seguridad, puedes omitir `password=contraseña` para que te lo pida interactivamente).

**Montaje persistente:**

Para hacer que el montaje sea persistente (sobrevive a los reinicios), puedes agregarlo al archivo `/etc/fstab`. Un ejemplo de entrada sería:

```bash
//servidor/compartido /punto/de/montaje cifs username=usuario,password=contraseña,uid=1000,gid=1000 0 0
```

### **Ejemplo de comandos comunes con `smbclient`:**

* **Listar recursos compartidos en un servidor:**

  ```bash
  smbclient -L //servidor -U usuario
  ```

  Esto mostrará una lista de todos los recursos compartidos disponibles en ese servidor.
* **Conectarse a un recurso compartido sin contraseña (si no es necesaria):**

  ```bash
  smbclient //servidor/compartido -N
  ```

### **Comandos dentro de `smbclient`:**

Cuando estés conectado a un recurso compartido con `smbclient`, puedes usar varios comandos internos. Algunos ejemplos:

* **`ls`**: Lista los archivos y directorios.
* **`cd <directorio>`**: Cambia al directorio especificado.
* **`get <archivo>`**: Descarga un archivo desde el servidor.
* **`put <archivo>`**: Sube un archivo al servidor.
* **`del <archivo>`**: Elimina un archivo en el servidor.
* **`mkdir <directorio>`**: Crea un directorio en el servidor.
* **`rmdir <directorio>`**: Elimina un directorio en el servidor (debe estar vacío).

### **Desmontar recursos compartidos:**

Cuando termines de usar un recurso compartido que montaste en tu sistema de archivos, es importante desmontarlo con el comando `umount`:

```bash
sudo umount /punto/de/montaje
```

#### Resumen

* **`smbclient`**: Para conectarte y gestionar archivos en recursos SMB desde la línea de comandos.
