# 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 %}


---

# 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://w0lf-f4ng.gitbook.io/cheat-sheet/enumeracion.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.
