A enumeração de usuários em WordPress não é apenas sobre "descobrir nomes"; é o primeiro passo crítico para ataques de força bruta direcionados e credential stuffing. Como Pentesters, exploramos comportamentos nativos que muitas vezes passam despercebidos por SysAdmins.

Abaixo, resumo algumas das técnicas que utilizo em minhas campanhas:

1. Redirecionamento por Author ID (O clássico 301) O WordPress, por padrão, tenta resolver IDs de autores para seus respectivos slugs.

Ação: Acessar https[:]//target[.]com/?author=n

Resultado: O servidor frequentemente retorna um redirecionamento (301) para https[:]//target[.]com/author/username/, revelando o login.

2. Abuso da REST API Muitos WAFs bloqueiam o endpoint padrão, mas esquecem de normalizar parâmetros de query.

Bypass de restrição simples: Em Bash

# Se /wp-json/ estiver bloqueado: curl -s https[:]//target[.]com/?rest_route=/wp/v2/users | jq '.[] | {id, name, slug}'

None
route /wp-json without permission
None
Bypass wp-json

3. Enumeração Indireta via Posts e Mídia Se o endpoint de usuários estiver sanitizado, podemos extrair IDs através do conteúdo publicado:

Posts: https[:]//target[.]com/wp-json/wp/v2/posts(Procure pelo campo "author": ID)

None
Indirect enumeration per posts

Mídia: https[:]//target[.]com/wp-json/wp/v2/media (Frequentemente negligenciado e expõe autores de uploads)

None
Indirect enumeration per media

Uma vez identificado o ID (ex: 1), basta consultar o objeto específico: https[:]//target[.]com/?rest_route=/wp/v2/users/1

None
Result of indirect enumeration

Tabela de Referência Rápida: Endpoint Objetivo /wp-json/wp/v2/users => Enumeração direta /wp-json/wp/v2/posts => Identificar IDs via autoria de posts /wp-json/wp/v2/media => Metadados e IDs via arquivos /wp-json/wp/v2/pages => Estrutura e autoria de páginas

Dica de mitigação: Não basta desativar o /wp-json/. É necessário restringir o acesso a esses endpoints para usuários não autenticados e desabilitar a resolução de author archives no functions.php.