> 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/cmss/enumeracion-wordpress.md).

# Enumeración WordPress

En esta página aprenderás a enumerar el CMS WordPress

## Enumeración de la Versión

Para saber que version de WordPress esta corriendo, lo podemos ver mediante la herramienta WhatWeb o mediante la extensión Wappalyzer entre otras

{% hint style="info" %}
Para usar Wappalyzer debes de instalar la extensión:\
\
[Navegadores basados en Chromium](https://chrome.google.com/webstore/detail/wappalyzer-technology-pro/gppongmhjkpfnbhagpmjfkannfbllamg?hl=es)

[Navegadores basados en Mozilla Firefox](https://addons.mozilla.org/es/firefox/addon/wappalyzer/?utm_source=addons.mozilla.org\&utm_medium=referral\&utm_content=search)
{% endhint %}

### WhatWeb

Para identificar que CMS corre en la web, lo podemos hacer mediante este comando:

```
whatweb http://127.0.0.1
```

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FLD4vCzSyFsmpL64CxF6A%2Fimage.png?alt=media&amp;token=b4f763c4-ac85-4d20-bca6-ad4dc5e79274" alt=""><figcaption><p>Captura de pantalla de whatweb</p></figcaption></figure>

{% hint style="warning" %}
No siempre es posible ver la versión de los CMS
{% endhint %}

## Enumeración de Usuarios

### Mediante Autores

Es común ver paginas webs montadas con WordPress del estilo blog o donde se suben articulos o posts, en estos casos, tenemos una vía potencial de enumerar usuarios ya que en estos posts o articulos, aparece el autor, el cual muy posiblemente sea un usuario con acceso al CMS.&#x20;

Existe herramientas que enumeran usuarios haciendo fueza bruta en el parametro `author` cambiando los valores:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FFIlwEl1NerFl57gUMRUP%2Fimage.png?alt=media&amp;token=a3d29d4a-5900-4d00-a0c2-f56002661b63" alt=""><figcaption><p>Captura de pantalla de una URL</p></figcaption></figure>

### Mediante el Panel de Login

WordPress por defecto tiene unas rutas donde expone el panel de login y el de admin las cuales son:

1. `https://website.com/wp-login`
2. `https://website.com/wp-admin`

Si el panel está en alguna de esas rutas, podemos poner usuarios y contraseñas, si el usuario existe y la contraseña es erronea nos pondrá un mensaje de error diferente al que podrá si el usuario no existe, de esta manera podemos enumerar posibles usuarios

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FZ2cdE1yw2Y8UjoH6i4zy%2Fimage.png?alt=media&amp;token=841ae47f-ec80-47ac-8bee-7595b4443191" alt="" width="259"><figcaption><p>Captura de pantalla del panel de login de WordPress</p></figcaption></figure>

### Mediante WPScan

Podemos usar la herramienta WPScan para enumerar posibles usuarios:

```perl
wpscan --url http://dominio.com/ -e u
```

## Enumeración de Plugins

### WPScan

Existen herramientas como [wpscan](#wpscan) que permiten enumerar todos plugins de forma sencilla:

```
wpscan --url http://dominio.com/ -t 10 -e ap
```

{% hint style="info" %}
Existen otras opciones para el parametro -e (enumeración):

<img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2Fkxbtah0H09cZfkttqnQS%2Fimage.png?alt=media&amp;token=dcd098d2-e595-41d4-8edf-8df21ef8399e" alt="" data-size="original">
{% endhint %}

### Manual

Pero, también podemos hacerlo de forma manual revisando el código fuente de la web, en ese suele haber Nombres, URLs o anotaciones en las que se pueden ver el nombre de los plugins y en algunos casos hasta la version

```bash
curl -s -X GET "https://website.com/" | grep plugins
```

```bash
curl -s -X GET "https://website.com/" | grep -oP 'plugins/\K[^/]+' | sort -u
```

Otras de las opciones es hacerlo con nmap:

```javascript
nmap -p 80 --script http-wordpress-enum --script-args check-latest,search-limit=1500 IP
```

## Escaneo y recolección de información

### WPScan

Esta herramienta nos permite escanear el CMS y buscar en el: Plugins Vulnerables, Posibles Usuarios, Rutas predeterminadas, Versiones Obsoletas...&#x20;

```
wpscan --url http://website.com
```

{% hint style="warning" %}
Si usamos un Api Token para el escaneo con la herramienta, esta nos reportará mucha más información. Puedes ver más información en <https://github.com/wpscanteam/wpscan/wiki/WPScan-User-Documentation#optional-wordpress-vulnerability-database-api>&#x20;
{% endhint %}

{% hint style="info" %}
Existe una versión web (limitada) en: <https://hackertarget.com/wordpress-security-scan/>
{% endhint %}

### Otras herramientas de escaneo

{% hint style="info" %}
Existen herramientas similares a WPScan como:

1. <https://github.com/micro-joan/wp-config-scan>
   {% endhint %}

## Archivos y rutas vulnerables

Además de las [rutas ](#mediante-el-panel-de-login)que hemos mencionado antes, existen archivos y rutas que nos permiten hacer varias cosas

### XML-RPC

En el caso de que este archivo exista en el servidor, se puede abusar de el para obtener credenciales validas. Existen varios metodos y cada uno tiene su funcion. Todas las peticones que realizemos a este archivo deben de ser por POST y deben de tener una estructura en XML correctamente formateada.

#### Visualizar metodos disponibles

* [x] Crea un archivo que contienga la siguiente estructura:

```xml
<?xml version="1.0" encoding="utf-8"?> 
<methodCall> 
<methodName>system.listMethods</methodName> 
<params></params> 
</methodCall>
```

* [x] Envia la peticion por POST al archivo xmlrpc

```
curl -s -X POST "https://website.com/xmlrpc.php" -d@file.xml
```

Despues de esto, obtendras todos los metodos disponibles

#### Metodo Get-UsersBlog

Con este metodo podemos validar usuarios y contraseñas validas.

<pre class="language-xml"><code class="lang-xml"><strong>&#x3C;?xml version="1.0" encoding="UTF-8"?>
</strong>&#x3C;methodCall> 
&#x3C;methodName>wp.getUsersBlogs&#x3C;/methodName> 
&#x3C;params> 
&#x3C;param>&#x3C;value>\{\{your username\}\}&#x3C;/value>&#x3C;/param> 
&#x3C;param>&#x3C;value>\{\{your password\}\}&#x3C;/value>&#x3C;/param> 
&#x3C;/params> 
&#x3C;/methodCall>
</code></pre>

Debemos de sustituir los valores de ejemplo por unos reales:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<methodCall> 
<methodName>wp.getUsersBlogs</methodName> 
<params> 
<param><value>usuario</value></param> 
<param><value>contraseña</value></param> 
</params> 
</methodCall>
```

En el caso de enviar credenciales no validas, recibiriamos esto:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2F6iC3mPyqIdjs7vaoM0kK%2Fimage.png?alt=media&amp;token=3ff664a2-2113-4bcc-a705-6497f87359a7" alt=""><figcaption><p>Captura de pantalla de una peticion al archivo xmlrpc.php</p></figcaption></figure>

En el caso de que las credenciales fuesen validas:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2Faa4KFYbUHqfySgQ6uoK2%2Fimage.png?alt=media&amp;token=a075cfb3-270b-42cf-87df-9d4687494d95" alt=""><figcaption><p>Captura de pantalla de una peticion al archivo xmlrpc.php</p></figcaption></figure>

{% hint style="info" %}
Puedes encontrar más informacion sobre el XML-RPC en: <https://nitesculucian.github.io/2019/07/01/exploiting-the-xmlrpc-php-on-all-wordpress-versions/>
{% endhint %}
