
Uma ferramenta rápida de enumeração de plugins do WordPress
"Por que varrer às cegas quando o WordPress se expõe?"
Um scanner rápido de plugins e temas WordPress que detecta plugins instalados via enumeração da API REST e temas a partir da descoberta em HTML, mapeando-os para vulnerabilidades conhecidas. Mais de 5000 plugins detectáveis sem força bruta, milhares mais com ela.
Desde 9 de março de 2026, a Wordfence descontinuou sua API v2. Todas as versões do WPProbe anteriores à v0.10.16 têm a funcionalidade update-db quebrada. Você precisa atualizar o WPProbe.
Por padrão, wpprobe update-db busca um banco de dados pré-construído deste repositório (atualizado a cada 2h via CI), portanto nenhuma chave de API é necessária. Se você quiser buscar diretamente da Wordfence, pode opcionalmente configurar uma chave de API gratuita:
--api-keygo install github.com/Chocapikk/wpprobe@latest
wpprobe update-db
wpprobe scan -u https://example.com
| Modo | Método | Furtividade | Cobertura |
|---|---|---|---|
stealthy (padrão) | Correspondência de endpoints da API REST + descoberta de temas via HTML | Alta | 5000+ plugins + temas |
bruteforce | Verificações diretas de diretórios | Baixa | 10k+ plugins |
hybrid | Furtivo primeiro, depois força bruta | Média | Máxima |
wpprobe scan -u https://example.com --mode stealthy
wpprobe scan -u https://example.com --mode bruteforce
wpprobe scan -u https://example.com --mode hybrid
# Kali Linux (incluído no kali-rolling)
sudo apt install wpprobe
# Go (requer 1.22+)
go install github.com/Chocapikk/wpprobe@latest
# Nix
nix-shell -p wpprobe
# Docker
docker run -it --rm wpprobe scan -u https://example.com
# A partir do código-fonte
git clone https://github.com/Chocapikk/wpprobe && cd wpprobe && go build -o wpprobe
# Monte o diretório atual para arquivos de entrada/saída
docker run -it --rm -v $(pwd):/data wpprobe scan -f /data/targets.txt -o /data/results.csv
# Persista bancos de dados de vulnerabilidades
docker run -it --rm \
-v $(pwd):/data \
-v wpprobe-config:/config \
wpprobe scan -f /data/targets.txt -o /data/results.json
# Atualize bancos de dados
docker run -it --rm \
-v wpprobe-config:/config \
-e WORDFENCE_API_KEY=your_key \
-e WPSCAN_API_TOKEN=your_token \
wpprobe update-db
# Alvo único
wpprobe scan -u https://example.com
# Múltiplos alvos com threading
wpprobe scan -f targets.txt -t 20
# Opções personalizadas
wpprobe scan -u https://example.com \
--header "User-Agent: CustomAgent" \
--proxy http://proxy:8080 \
--rate-limit 10 \
--no-check-version
# Formatos de saída
wpprobe scan -u https://example.com -o results.csv
wpprobe scan -u https://example.com -o results.json
# Atualize bancos de dados (Wordfence requer chave de API gratuita, WPScan requer token de API Enterprise)
wpprobe update-db --api-key your_wordfence_key
# Ou use variável de ambiente
export WORDFENCE_API_KEY=your_key_here
wpprobe update-db
# Pesquise vulnerabilidades
wpprobe search --cve CVE-2024-1234
wpprobe search --plugin woocommerce
wpprobe search --severity critical
wpprobe search --auth Unauth
wpprobe search --title "SQL Injection" --details
# Estatísticas do banco de dados
wpprobe list
Defina WORDFENCE_API_KEY para atualizações do banco de dados Wordfence (gratuito). Defina WPSCAN_API_TOKEN para atualizações do banco de dados WPScan (somente plano Enterprise).
wpprobe update
Somente binários instalados a partir de um release se atualizam. Uma compilação a partir do código-fonte geralmente está à frente do último release, então substituí-la seria um downgrade: recompile-a a partir do repositório, ou use --force para instalar o binário do release mesmo assim.
Na inicialização, o WPProbe verifica o release publicado mais recente para rotular o banner. A resposta é armazenada em cache por 24 horas, e a verificação pode ser desativada completamente:
export WPPROBE_NO_UPDATE_CHECK=1
Modo furtivo consulta rotas expostas da API REST (?rest_route=/) e corresponde endpoints descobertos contra um banco de dados pré-compilado de assinaturas de plugins conhecidas. Também descobre temas ativos analisando referências a wp-content/themes/ no HTML da página e busca sua versão em style.css. Isso gera solicitações mínimas e evita detecção por WAFs.
Modo de força bruta verifica diretórios de plugins diretamente via solicitações GET. Uma resposta 403 confirma que o plugin existe (listagem de diretório proibida). Uma resposta 200 é validada verificando readme.txt na listagem do diretório para evitar falsos positivos de instâncias WordPress que retornam 200 para todos os caminhos.
Modo híbrido combina ambos: furtivo primeiro para detecção de baixo ruído, depois força bruta para plugins restantes. Temas são sempre descobertos via HTML, independentemente do modo.
Plugins e temas detectados são correlacionados com CVEs conhecidos dos bancos de dados Wordfence e WPScan, com correspondência de faixa de versão para identificar instalações vulneráveis.
CSV:
URL,Plugin,Version,Severity,AuthType,CVEs,CVE Links,CVSS Score,CVSS Vector,Title
http://example.com,give,2.20.1,critical,Unauth,CVE-2025-22777,https://www.cve.org/CVERecord?id=CVE-2025-22777,9.8,CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H,GiveWP <= 3.19.3 - Unauthenticated PHP Object Injection
A saída JSON é sempre um array, com um objeto por alvo varrido, portanto um único arquivo permanece válido quer você varra uma URL ou muitas com -f.