> For the complete documentation index, see [llms.txt](https://docs.pabloarrabal.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pabloarrabal.com/reconocimiento/enumeracion-web.md).

# Enumeración Web

{% hint style="warning" %}
En el caso de encontrar un panel de login, recomendamos hacer peticiones desde la terminal con curl y usando time para determinar si hay una posible enumeración de usuarios en función de si hay diferencias de respuesta con credenciales validas o no
{% endhint %}

{% hint style="info" %}
Se recomienda revisar el archivo robots.txt
{% endhint %}

## Enumeración de las Tecnologías

### Revisión del código fuente

La primera opción y la más tediosa es mirar el código fuente de la web (`CTRL + U`) puesto que el desarrollador se podría haber dejado comentarios o trozos de código donde aparezcan versiones de software

{% hint style="info" %}
Puede que también haya versiones detalladas en el pie de la página
{% endhint %}

### Extensiones

Para enumerar las tecnologías que tiene una web, podemos emplear la herramienta "whatweb". P. ej:

```bash
whatweb https://dominio.com/
```

Otra opción es hacer uso de extensiones del navegador como "Wappalyzer", "BuiltWith" o "What Runs"

{% embed url="<https://chromewebstore.google.com/detail/whatruns/cmkdbmfndkfgebldhnkbfhlneefdaaip>" %}
Instalación de la herramienta WhatRuns
{% endembed %}

{% embed url="<https://chromewebstore.google.com/detail/builtwith-technology-prof/dapjbgnjinbpoindlpdmhochffioedbn>" %}
Instalación de la herramienta BuiltWith
{% endembed %}

{% embed url="<https://chromewebstore.google.com/detail/wappalyzer-technology-pro/gppongmhjkpfnbhagpmjfkannfbllamg>" %}
Instalación de la herramienta Wappalyzer
{% endembed %}

{% hint style="info" %}

## jQuery / jQuery UI

Las versiones antiguas o desactualizadas, suelen tener vulnerabilidades como [Cross-Site Scripting (XSS)](/explotacion/vulnerabilidades/cross-site-scripting-xss.md) y [Prototype Pollution](/explotacion/vulnerabilidades/prototype-pollution.md)
{% endhint %}

### Http

Podemos usar la herramienta http para identificar las cabeceras de las peticiones y la versión en algunos casos:

```bash
http 192.168.1.1
```

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FPMSiw4BaEcy1766JDrVv%2Fimage.png?alt=media&amp;token=9e6fd0b8-43e0-48d8-8af0-ecd3a35e1d78" alt=""><figcaption></figcaption></figure>

### Nmap

Podemos identificar la versión de las tecnologías con metasploit:

```bash
msfconsole

use auxiliary/scanner/http/http_version

set RHOSTS 192.168.1.1

exploit
```

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FILmsf0H5nfI4M30HRc2s%2Fimage.png?alt=media&amp;token=b542f1ed-8bee-4f0a-89bb-97df57afe528" alt=""><figcaption></figcaption></figure>

## Virtual Hosting

Puede que haya webs que utilicen virtual hosting y para identificarlo, nos podemos encontrar varios casos.

Por ejemplo, podemos encontrarnos una web que no se renderice correctamente o que no tenga acceso a ciertos recursos, si miramos el código fuente, nos daremos cuenta de que puede ocurrir porque solicita el recurso a un dominio y no a la IP desde la que estamos visitando el servicio. Otro caso es que nos encontremos un dominio en el escaneo de NMAP al servicio ([Enumeración de Red](/reconocimiento/enumeracion-de-red.md#enumeracion-de-servicios))&#x20;

Para poder ver correctamente la web, deberemos añadir este dominio e IP al archivo `/etc/hosts` por ejemplo:

{% code title="/etc/hosts" %}

```ruby
192.168.1.10    dominio.local
```

{% endcode %}

## Fuzzing/Discovery

Para poder buscar directorios en un servicio web en busca de portales de administración, usamos herramientas que nos ayudan a "sustituir" una parte de la ruta que le indiquemos por palabras de un diccionario.

{% hint style="success" %}
Es recomendable, realizar una búsqueda recursiva en los directorios más relevantes
{% endhint %}

Además, podremos emplear google hacking / dorks el cual nos ayudará con la búsqueda de directorios relevantes para la intrusión [Google Hacking](/osint/google-hacking.md)

Existen las siguientes herramientas:

{% hint style="success" %}

## Diccionarios recomendados

### eJPT

1. `/usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt`

### Directorios Generales

1. `/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt`
2. `/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt`
3. `/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt`
4. `/usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt`
5. `/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt`
6. `/usr/share/seclists/Discovery/Web-Content/raft-small-directories.txt`

#### `Lowercase`

1. `/usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt`
2. `/usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt`
3. `/usr/share/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt`
4. `/usr/share/seclists/Discovery/Web-Content/raft-large-directories-lowercase.txt`
5. `/usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-small.txt`
6. `/usr/share/seclists/Discovery/Web-Content/raft-small-directories-lowercase.txt`

### Login

1. `/usr/share/seclists/Discovery/Web-Content/Logins.fuzz.txt`
2. `/usr/share/seclists/Discovery/Web-Content/raft-medium-files.txt`
3. `/usr/share/seclists/Discovery/Web-Content/raft-large-files.txt`
4. `/usr/share/seclists/Discovery/Web-Content/trickest-robots-disallowed-wordlists/top-10000.txt`
5. `/usr/share/seclists/Discovery/Web-Content/SVNDigger/all.txt`
6. `/usr/share/seclists/Discovery/Web-Content/raft-small-files.txt`
7. `/usr/share/seclists/Discovery/Web-Content/SVNDigger/context/log.txt`

En este directorio encontrarás diferentes archivos txt en los que dependiendo del lenguaje se hace fuzzing de uno u otro

1. `/usr/share/seclists/Discovery/Web-Content/SVNDigger/cat/Language/`

#### Lowercase

1. `/usr/share/seclists/Discovery/Web-Content/raft-medium-files-lowercase.txt`
2. `/usr/share/seclists/Discovery/Web-Content/raft-large-files-lowercase.txt`
3. `/usr/share/seclists/Discovery/Web-Content/raft-small-files-lowercase.txt`

### Subdominos

1. `/usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt`
2. `/usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt`
3. `/usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt`
4. `/usr/share/seclists/Discovery/DNS/n0kovo_subdomains.txt`
5. `/usr/share/seclists/Discovery/DNS/namelist.txt`
6. `/usr/share/seclists/Discovery/DNS/dns-Jhaddix.txt`
7. `/usr/share/seclists/Discovery/DNS/bug-bounty-program-subdomains-trickest-inventory.txt`
8. `/usr/share/seclists/Discovery/DNS/combined_subdomains.txt`

{% endhint %}

### Nmap

```bash
nmap -sCV --script=http-enum IP
```

### Metasploit

Podemos emplear el módulo "`auxiliary/scanner/http/brute_dirs`" para hacer fuerza bruta:

```bash
msfconsole

use auxiliary/scanner/http/brute_dirs

set RHOSTS 192.168.1.1

exploit
```

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FcLXx3HB6FezeXre8ISeN%2Fimage.png?alt=media&amp;token=198792ad-f6f1-40d4-8fbd-973b6fba55c2" alt=""><figcaption></figcaption></figure>

### Wfuzz

Para hacer busqueda de directorios:

```perl
wfuzz -c -t 200 -hc=404 -w /ruta/diccionario https://web.com/FUZZ
```

{% hint style="info" %}
Con la palabra "FUZZ" le indicamos a la herramientas donde queremos sustituir las palabras del diccionario
{% endhint %}

Para hacer búsqueda de subdominios:

```bash
wfuzz -c -t 200 -hc=404 -w /ruta/diccionario -H "Host: FUZZ.dominio.com" -u 192.168.1.12
```

### Gobuster

Para realizar una búsqueda de directorios:

```perl
gobuster dir -t 150 -w /ruta/diccionario -u http://dominio.com/
```

Subdominios:

```bash
gobuster vhost -t 100 -u dominio.com --append-domain -w /ruta/diccionario
```

Para buscar archivos:

```bash
gobuster dir -t 150 -w /ruta/diccionario -u http://dominio.com/ -x txt,php,py,sh,html
```

### Dirb

```bash
dirb http://dominio.com/
```

### Dirsearch

```bash
dirsearch -u http://dominio.com/
```

### Ffuf

```bash
ffuf -u http://dominio.com/FUZZ -c -t 150 -w /ruta/diccionario
```

Subdominios:

```bash
ffuf -H  "Host : FUZZ.domino.com" -u https://domino.com -w /Users/tanish/Documents/SecLists-master/Discovery/DNS/bitquark-subdomains-top100000.txt -fs 0,4605
```

## Subdominios

### Sublist3r

Además de poder enumerar subdominios usando la fuerza bruta, podemos usar una herramienta muy conocida que funciona muy bien para esto, puesto que recopila diferentes fuentes como DNSDumpster, NetCraft...

{% hint style="success" %}
Esta herramienta también puede realizar ataques de fuerza bruta
{% endhint %}

<https://github.com/aboul3la/Sublist3r>

Este es un ejemplo de escaneo:

```bash
python3 sublist3r.py -d domino.com -v -o subdominos-dominio.txt
```

### Google Dorks

Podemos buscar subdominios con google usando la búsqueda avanzada. Para ello insertamos una wildcard (\*) en lugar del subdominio para que nos muestre los resultados:

```
site:*.dominio.com
```

{% hint style="success" %}
Existen diferentes webs quye generan los dorks en base a un dominio y que nos puede servir apara agilizar la busqueda:

* <https://pentest-tools.com/information-gathering/google-hacking>
* <https://taksec.github.io/google-dorks-bug-bounty/>
  {% endhint %}

## WAF (Web Application Firewall)

Podemos detectar el uso de un WAF en una web, tras hacer diferentes escaneos y ver ciertos resultados de error, pero también podemos usar herramientas de detección.

Una de ellas es `wafw00f`:

<https://github.com/EnableSecurity/wafw00f>

Este es un ejemplo en el cual la web se encuentra con el WAF de CloudFlare:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FCtoIsgZIyEqVKPpBTLpf%2Fimage.png?alt=media&amp;token=d29d2fb6-456e-45d1-9e23-66a31431b2b1" alt=""><figcaption></figcaption></figure>

```bash
wafw00f https://dominio.com -a -v
```
