Seguridad WordPress con WPScan

Última revisión: 2 de octubre de 2021

WordPress es un sistema seguro, pero siempre podemos esperar ataques de otros hackers o personas que tienen alguna intención maliciosa contra nuestro sitio. Y para evitar esto, analizaremos nuestro sitio con WPScan.

WPScan es una herramienta de código abierto que permite analizar la seguridad de cualquier sitio web con WordPress, propio o de otros. Es por esto que es importante proteger tu sitio frente a todos los posibles avisos que de esta herramienta, ya que es la que usan muchos intrusos para analizar.

Aunque existe un plugin, sólo recoge las vulnerabilidades de tu sitio y que son fácilmente detectables, pero no otros factores que sí que pueden conseguir los posibles intrusos.

Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓN

Requisitos

  • Linux (Kali o Ubuntu)

Instalación

Accederemos por SSH a la máquina. En caso de ser un servidor VPS haremos una actualización completa y lo pondremos en hora como sistema inicial.

Primero pondremos en hora el sistema.

timedatectl set-timezone 'UTC'
timedatectl set-ntp on

Haremos una revisión del sistema y actualizaremos lo existente.

lsb_release -a
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove

Antes de instalar WPScan, añadiremos algún software que nos puede ser necesario para su correcto funcionamiento.

apt -y install software-properties-common build-essential curl vim zip unzip apt-transport-https libcurl4-gnutls-dev libxml2 libxml2-dev libxslt1-dev ruby-dev git gem ruby zlib1g zlib1g-dev

Procederemos a la instalación

gem install wpscan

Si ejecutamos el siguiente comando, deberíamos obtener un resultado para saber que todo es correcto.

wpscan --version

Obteniendo lo siguiente

_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.10
       Sponsored by Automattic - https://automattic.com/
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

Current Version: 3.8.10
Last DB Update: 2020-12-11

Puesta al día

Si hace tiempo que no hemos hecho una actualización del software o ejecutado, deberíamos hacer una puesta al día, tanto para actualizar el propio WPScan, como para actualizar la base de datos de análisis y vulnerabilidades.

gem update wpscan
wpscan --update

Con esto tendremos todo lo necesario para hacer los análisis.

Análisis

En todos los ejemplos se va a utilizar el dominio example.com como dominio de ejemplo, que deberás sustituir por el dominio que quieras analizar. te recomendamos que utilices la URL final, sin redirecciones, para obtener los resultados óptimos.

Análisis simple

Con esto obtendremos un primer análisis con la configuración por defecto de WPScan. Nos dará cierta información, aunque no completa.

wpscan --url https://example.com/ --random-user-agent

El resultado será similar a esto

[+] URL: https://example.com/ [93.189.95.12]
[+] Started: Fri Dec 11 17:04:05 2020
Interesting Finding(s):
[+] Headers
 | Interesting Entries:
 |  - server: Apache
 |  - content-security-policy: upgrade-insecure-requests;
 |  - referrer-policy: origin-when-cross-origin
 | Found By: Headers (Passive Detection)
 | Confidence: 100%
[+] robots.txt found: https://example.com/robots.txt
 | Found By: Robots Txt (Aggressive Detection)
 | Confidence: 100%
[+] This site seems to be a multisite
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | Reference: http://codex.wordpress.org/Glossary#Multisite
Fingerprinting the version - Time: 00:00:00 <==================================================================================================================================> (694 / 694) 100.00% Time: 00:00:00
[+] WordPress version 5.6 identified (Latest, released on 2020-12-08).
 | Found By: Unique Fingerprinting (Aggressive Detection)
 |  - https://example.com/wp-admin/js/customize-controls.js md5sum is 60fd86fb779d8562016277fa549883c5
[i] The main theme could not be detected.
[+] Enumerating All Plugins (via Passive Methods)
[+] Checking Plugin Versions (via Passive and Aggressive Methods)
[i] Plugin(s) Identified:
[+] wp-super-cache
 | Location: https://example.com/wp-content/plugins/wp-super-cache/
 | Latest Version: 1.7.1
 | Last Updated: 2020-12-09T09:55:00.000Z
 |
 | Found By: Comment (Passive Detection)
 |
 | The version could not be determined.
[+] Enumerating Config Backups (via Passive and Aggressive Methods)
 Checking Config Backups - Time: 00:00:02 <======================================================================================================================================> (22 / 22) 100.00% Time: 00:00:02
[i] No Config Backups Found.
[!] No WPVulnDB API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 50 daily requests by registering at https://wpscan.com/register
[+] Finished: Fri Dec 11 17:04:24 2020
[+] Requests Done: 75
[+] Cached Requests: 5
[+] Data Sent: 21.574 KB
[+] Data Received: 2.803 MB
[+] Memory used: 232.898 MB
[+] Elapsed time: 00:00:19

Análisis pasivo

Este análisis nos devolverá toda la información que el sistema detecte sin realizar una búsqueda activa, simplemente analizando aquello que se encuentra por delante. No es la mejor opción, aunque sí una de las más rápidas.

wpscan --url https://example.com/ --random-user-agent --verbose --disable-tls-checks --clear-cache --wp-version-all --plugins-version-all --themes-version-all --detection-mode passive --interesting-findings-detection passive --wp-version-detection passive --main-theme-detection passive --plugins-detection passive --plugins-version-detection passive --themes-detection passive --themes-version-detection passive --timthumbs-detection passive --config-backups-detection passive --db-exports-detection passive --medias-detection passive --users-detection passive

Análisis activo

Este análisis nos devolverá toda la información que el sistema detecte realizando una búsqueda activa, analizando lo que se puede encontrar, pero también buscando contenidos que a simple vista pueden no verse.

En este caso se buscarán los plugins y themes de los que se tiene constancia de alguna vulnerabilidad.

wpscan --url https://example.com/ --random-user-agent --verbose --disable-tls-checks --clear-cache --wp-version-all --plugins-version-all --themes-version-all --detection-mode mixed --interesting-findings-detection mixed --wp-version-detection mixed --main-theme-detection mixed --plugins-detection mixed --plugins-version-detection mixed --themes-detection mixed --themes-version-detection mixed --timthumbs-detection mixed --config-backups-detection mixed --db-exports-detection mixed --medias-detection mixed --users-detection mixed --enumerate vp,vt,tt,cb,dbe,u1-25,m1-100

Análisis agresivo

Este es el análisis más agresivo que puede ejecutar WPScan. En él se buscan todas las opciones posibles a nivel de plugins (se buscarán todos los que hay en el repositorio oficial), al igual que los themes (se buscarán todos los del repositorio oficial).

wpscan --url https://example.com/ --random-user-agent --verbose --disable-tls-checks --clear-cache --wp-version-all --plugins-version-all --themes-version-all --detection-mode mixed --interesting-findings-detection mixed --wp-version-detection mixed --main-theme-detection mixed --plugins-detection mixed --plugins-version-detection mixed --themes-detection mixed --themes-version-detection mixed --timthumbs-detection mixed --config-backups-detection mixed --db-exports-detection mixed --medias-detection mixed --users-detection mixed --enumerate ap,at,tt,cb,dbe,u1-100,m1-1000

Más opciones

WPScan tiene algunas opciones extra que pueden ser muy útiles si no podemos dejar el sistema abierto por pantalla, o queremos obtener los resultados en un fichero descargable.

Descarga de la información en formato texto

wpscan --url https://example.com/ --output '/tmp/example.txt'

Descarga de la información en formato JSON

wpscan --url https://example.com/ --format json --output '/tmp/example.json'

Resultados

Dependiendo de los resultados que obtengamos tendremos que actuar o no en consecuencia. Hay algunos elementos que, porque se detecten, no significa que sean inseguros, por ejemplo conocer la versión de WordPress, que es algo bastante sencillo de saber.

Lo que deberemos es intentar minimizar la detección de algunos elementos, como pueden ser la lista de plugins, themes, y otros ficheros que no tengan que ser accesibles.

En cualquier caso, te recomiendo una visita a la sección de Seguridad para que apliques todas las medidas posibles.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.