SMB enumeration with a guest/null session
Antes de tener credenciales, un servidor SMB de Windows puede seguir contestando a una sesión nula (usuario y contraseña vacíos) o a la cuenta guest (invitado), que en muchas instalaciones queda habilitada sin contraseña. Esa sesión de bajo privilegio basta a menudo para listar recursos compartidos, leer los que tengan permisos laxos, enumerar usuarios y la política de contraseñas y, a partir de ahí, encadenar el resto del ataque.
Mecanismo
El primer paso es comprobar qué deja ver cada tipo de sesión. Con netexec/crackmapexec sobre SMB se prueban las dos:
netexec smb <ip> -u '' -p '' --shares # sesion nula
netexec smb <ip> -u guest -p '' --shares # cuenta guest
netexec smb <ip> -u guest -p '' --users --pass-pol # usuarios y politica de contrasenasEs habitual que la sesión nula sea aceptada pero no permita enumerar nada, mientras que guest sí lista los shares. smbmap da la misma foto con las permisos por recurso (READ/WRITE), y smbclient -L lista sin montar:
smbmap -u guest -p '' -H <ip> # shares + permisos
smbmap -u guest -p '' -H <ip> -R 'HR' --depth 5 # recorrido recursivo de un share
smbclient -N -L //<ip> # -N = sin contrasena
smbclient -N //<ip>/HR # navegar un recurso legibleenum4linux-ng reúne en una sola pasada shares, usuarios, grupos, política y RID cycling; rpcclient con sesión nula permite lo mismo a mano:
enum4linux-ng -A <ip> # enumeracion completa (shares, users, pol, RID)
rpcclient -U "" -N <ip> -c "srvinfo;enumdomusers;querydominfo"Cuando aparece un recurso con permiso READ, se navega con smbclient o se descarga en bloque:
smbclient -N //<ip>/'Department Shares' -c 'recurse ON; prompt OFF; mget *'Lo valioso no suele ser el binario del sistema, sino lo que la gente deja en esos shares: notas de RR.HH. con contraseñas por defecto, scripts con credenciales incrustadas, copias de seguridad, web.config o unattend.xml. Cualquiera de ellos es la palanca para el siguiente paso (password-spraying, credential-reuse). La misma sesión guest suele habilitar además el rid-cycling para reconstruir la lista de usuarios y el barrido de shares cuando ya hay credenciales.
Requisitos
Un servicio SMB alcanzable (445/tcp) que no haya deshabilitado el acceso anónimo ni la cuenta guest. No hace falta ninguna credencial; el valor depende de cuánto exponga esa sesión de bajo privilegio, que varía mucho entre versiones y hardening.
Cómo detectarlo. La sesión guest/nula deja un Event ID 4624 de tipo 3 (red) con nombre de cuenta ANONYMOUS LOGON o Guest y Authentication Package NTLM: cualquier logon anónimo o de invitado contra SMB ya es señal, porque la operación normal usa cuentas nominales. El listado de recursos genera 5140 (se accedió a un recurso compartido de red) y el acceso a ficheros concretos 5145, ambos con el sujeto anónimo/guest. La huella de un atacante es que ese mismo origen recorra muchos shares o ficheros en segundos. Correlacionar un 4624 anónimo con una ráfaga de 5140/5145 desde la misma IP delata la enumeración previa a credenciales.
Defensa. Deshabilitar la cuenta guest, prohibir el acceso anónimo a los shares (RestrictNullSessAccess), aplicar permisos mínimos en cada recurso y no almacenar secretos en texto plano dentro de carpetas compartidas. Firmar SMB y desactivar SMBv1 recorta además otros abusos sobre el mismo puerto. Es la puerta a RID cycling, password spraying y share hunting.
Máquinas donde se aplica
- ActiveHackTheBox
- CicadaHackTheBox
- Dance-SambaDockerLabs
- DomainDockerLabs
- ShenziProving Grounds Practice
- SnookumsProving Grounds Practice
- Symfonos 1 & 2VulnHub