SMB (445)

SMB (Server Message Block) es un protocolo diseñado para la compartición de archivos en red, facilitando la interconexión de archivos y periféricos como impresoras y puertos serie entre ordenadores dentro de una red local (LAN).

  • SMB utiliza el puerto 445 (TCP). Sin embargo, originalmente, SMB se ejecutaba sobre NetBIOS utilizando puerto 139.

  • SAMBA es la implementación Linux de código abierto de SMB, y permite a los sistemas Windows acceder a recursos compartidos y dispositivos Linux acceder a recursos compartidos y dispositivos Linux.

El protocolo SMB utiliza dos niveles de autenticación, a saber:

  • Autenticación de usuario: los usuarios deben proporcionar un nombre de usuario y una contraseña para autenticarse con el servidor SMB para acceder a un recurso compartido.

  • Autenticación de recurso compartido: los usuarios deben proporcionar una contraseña para acceder a un recurso compartido restringido.

Nmap

Scripts de nmap utiles para este servicio:

  • smb-ls

  • smb-protocols

  • smb-security-mode

  • smb-enum-sessions

  • smb-enum-shares

  • smb-enum-users

  • smb-enum-groups

  • smb-enum-domains

  • smb-enum-services

Sintaxis:

nmap -p445 --script <script> 192.168.1.10

smbclient

Es un cliente que nos permite acceder a recursos compartidos en servidores SMB.

# Realiza una conexión con el usuario elliot
smbclient //192.168.1.10/Public -U elliot

# Conexión utilizando una sesión nula
smbclient //192.168.1.10/Public -N

# Lista recursos compartidos
smbclient -L 192.168.1.10 -N

smbmap

SMBMap permite a los usuarios enumerar las unidades compartidas samba en todo un dominio. Enumera las unidades compartidas, los permisos de las unidades, el contenido compartido, la funcionalidad de carga/descarga, la coincidencia de patrones de descarga automática de nombres de archivo e incluso la ejecución de comandos remotos.

# Utiliza un usuario de invitado (guest) con una contraseña en blanco para 
# autenticarse en el objetivo especificado por 192.168.1.10.
# -d indica el dominio actual.
smbmap -u guest -p "" -d . -H 192.168.1.10

# Autentica con un usuario y contraseña específicos (<USER> y <PASSWORD>) 
# en el objetivo (192.168.1.10).
# -L lista los recursos compartidos disponibles en la máquina.
smbmap -u <USER> -p <PASSWORD> -H 192.168.1.10 -L

# Autentica en el objetivo y muestra la lista de archivos y 
# carpetas en la unidad C$ de forma recursiva.
smbmap -u <USER> -p <PASSWORD> -H 192.168.1.10 -r 'C$'

# Autentica y sube un archivo desde la ubicación local /root/file
# al recurso compartido C$ en el objetivo.
smbmap -H 192.168.1.10 -u <USER> -p <PASSWORD> --upload '/root/file' 'tmp/file'

# Autentica y descarga el archivo 'file' desde el recurso compartido tmp 
# en el objetivo.
smbmap -H 192.168.1.10 -u <USER> -p <PASSWORD> --download 'tmp/file'

# Autentica en el objetivo y ejecuta el comando ipconfig en el sistema remoto 
# usando SMB.
smbmap -u <USER> -p <PASSWORD> -H 192.168.1.10 -x 'ipconfig'

enum4linux

Enum4linux es una herramienta utilizada para extraer información de hosts de Windows y Samba. La herramienta está escrita en Perl y envuelta en herramientas de samba smbclient, rpcclient, net y nslookup.

# -o indica que se realizará una enumeración básica.
enum4linux -o 192.168.1.10

# -U indica que se realizará una enumeración de usuarios
enum4linux -U 192.168.1.10

# -G indica que se realizará una enumeración de grupos 
enum4linux -G 192.168.1.10

# -S indica que se realizará una enumeración de los recursos compartidos
enum4linux -S 192.168.1.10

# -i Comprueba si el servidor smb esta configurado para imprimir
enum4linux -i 192.168.1.10

# -r Intentará enumerar usuarios utilizando RID cycling en el sistema remoto.
# -u Especifica el nombre de usuario que se utilizará para la autenticación. 
# -p Especifica la contraseña asociada al usuario proporcionado con la opción -u.
enum4linux -r -u <user> -p <password> 192.168.1.10

NetExec

# Enumerar hosts
nxc smb 192.168.1.10/24

# comprobar null sessions
nxc smb 192.168.1.10 -u '' -p ''

# comprobar guest login
nxc smb 192.168.1.10 -u 'guest' -p ''

# enumerar hosts con firma SMB no requerida
nxc smb 192.168.1.10/24 --gen-relay-list relay_list.txt

# enumerar recursos compartidos usando una null session
nxc smb VICTIM_IPS -u '' -p '' --shares

# enumerar recursos compartidos de lectura/escritura en múltiples IPs con/sin credenciales
nxc smb VICTIM_IPS -u USERNAME -p 'PASSWORD' --shares --filter-shares READ WRITE

Rpcclient

Rpcclient es una utilidad que forma parte del conjunto de herramientas Samba. Se utiliza para interactuar con el protocolo Remote Procedure Call (RPC) de Microsoft, que se utiliza para la comunicación entre los sistemas basados en Windows y otros dispositivos. rpcclient se utiliza principalmente para fines de depuración y pruebas, y se puede utilizar para consultar y manipular sistemas remotos.

El protocolo SMB se utiliza principalmente para compartir archivos, impresoras y otros recursos en una red, pero también puede aprovechar RPC para ciertas funcionalidades y operaciones específicas.

Por ejemplo, cuando accedes a recursos compartidos en una red Windows, como carpetas compartidas o impresoras, estás utilizando el protocolo SMB. Sin embargo, para algunas operaciones administrativas y de gestión, como enumerar usuarios y grupos, modificar permisos de archivos o impresoras, o acceder a la configuración del sistema remoto, SMB puede utilizar RPC para realizar estas tareas.

Cuando utilizas herramientas como rpcclient para interactuar con un sistema remoto que ejecuta servicios SMB, estás esencialmente aprovechando el protocolo RPC subyacente que forma parte de la implementación de SMB en ese sistema. De esta manera, rpcclient puede actuar como una interfaz para realizar consultas y ejecutar comandos a través del protocolo RPC en el contexto de un servidor SMB.

# obtener información sobre el sistema remoto, como el nombre del servidor, 
# la versión del sistema operativo, el dominio de trabajo, la fecha y la hora del sistema, 
# entre otros detalles.
rpcclient -U "" -N 192.168.1.10 -c "srvinfo"

# enumera los usuarios del dominio
rpcclient -U "" -N 192.168.1.10 -c "enumdomusers"

# enumera los grupos del dominio
rpcclient -U "" -N 192.168.1.10 -c "enumdomgroups"

# obtiene el SID del usuario en base a su nombre
rpcclient -U "" -N 192.168.1.10 -c "lookupnames root"

# Se utiliza para enumerar los SID (Security Identifiers) asignados a los grupos 
# en un servidor remoto. Es útil para obtener información sobre los grupos de 
# seguridad disponibles en un sistema y sus respectivos SID.
rpcclient -U "" -N 192.168.1.10 -c "lsaenumsid"

El parámetro -c en rpcclient se utiliza para especificar un comando o una secuencia de comandos que se ejecutarán en el servidor remoto una vez que se haya establecido la conexión. Esto permite realizar operaciones específicas de forma automática sin necesidad de interactuar manualmente con rpcclient después de establecer la conexión.

La sintaxis básica del parámetro -c es la siguiente:

rpcclient -U username //192.168.1.10 -c "command1; command2; command3"

RID Cycling Attack

seq 1 5000 | xargs -P 50 -I{} rpcclient -U "" 30.30.30.4 -N -c "lookupsids S-1-22-1-{}" 2>&1

SMB desde Windows

# listar recursos compartidos
net share

# borrar el recurso compartido
net use * \delete

# montar el recurso compartido
net use z: \\192.168.1.10\c$ <password> /user:<username>

# /all nos permite ver los recursos compartidos administrativos (que terminan en '$').
# Puede usar IP o nombre de host para especificar el host.
net view \\192.168.1.10 /all

Recursos compartidos comunes en Windows:

  • C$ corresponde a C:/

  • ADMIN$ se asigna a C:/Windows

  • IPC$ se utiliza para RPC

  • Print$ aloja controladores para impresoras compartidas

  • SYSVOL sólo en DCs

  • NETLOGON sólo en los DC

Interactuar con el cliente SMB

smb: \> help # muestra la ayuda
smb: \> ls # listar archivos
smb: \> put file.txt # subir un archivo
smb: \> get file.txt # descargar un archivo

Montar una carpeta compartida

mount -t cifs -o "username=user,password=password" //192.168.1.10/shared_folder /mnt/shared_folder

Fuerza bruta de credenciales

nmap --script smb-brute -p 445 192.168.1.10
hydra -l admin -P /usr/share/wordlist/rockyou.txt 192.168.1.10 smb

Última actualización