
WRecon es una herramienta para el reconocimiento de vulnerabilidades e información de caja negra para wordpress.
Una potente herramienta de reconocimiento y escaneo de vulnerabilidades para WordPress, basada en plantillas
Características • Instalación • Uso • Arquitectura • Plantillas
WPRecon es una herramienta moderna de reconocimiento de seguridad para WordPress, construida con Go, que ayuda a los ingenieros de seguridad a identificar vulnerabilidades, configuraciones incorrectas y problemas de divulgación de información en instalaciones de WordPress.
A diferencia de los escáneres de vulnerabilidades tradicionales con comprobaciones fijas en el código, WPRecon utiliza una arquitectura de plantillas basada en YAML, lo que permite:
Identifica aciertos positivos en las respuestas:
Extrae datos procesables de respuestas coincidentes:
Más de 150 plantillas listas para producción que cubren:
# Clonar el repositorio
git clone https://github.com/ffx64/wprecon.git
cd wprecon
# Compilar el binario
go build -o wprecon ./cmd/wprecon/main.go
# Mover al PATH (opcional)
sudo mv wprecon /usr/local/bin/
go install github.com/ffx64/wprecon/cmd/wprecon@latest
docker build -t wprecon .
docker run wprecon scan https://example.com
Escanea un sitio web WordPress con todas las plantillas disponibles:
wprecon scan https://example.com
Ejecuta solo las plantillas seleccionadas:
wprecon scan https://example.com -t wordpress-detection,plugin-detection,user-enumeration
# Salida JSON para automatización
wprecon scan https://example.com --output json
# Tabla con formato bonito (por defecto)
wprecon scan https://example.com --output table
# Usar 20 trabajadores concurrentes y 100 solicitudes/segundo
wprecon scan https://example.com --workers 20 --rate-limit 100
wprecon list-templates
wprecon --help
Al ejecutar un escaneo, WPRecon produce hallazgos detallados:
Formato tabla:
ID | Plantilla | Nombre | Gravedad | Objetivo | Evidencia
---------------------|------------------------|----------------------------|----------|--------------------|----------
finding_001 | wordpress-version | Versión de WordPress encontrada | info | example.com | 6.2.1
finding_002 | plugin-detection | Plugin detectado | bajo | example.com | Yoast SEO 16.0
finding_003 | security-headers | Cabeceras de seguridad faltantes | medio | example.com | X-Frame-Options
Formato JSON:
{
"scan_id": "scan_uuid_001",
"timestamp": "2026-04-10T14:37:00Z",
"target": "https://example.com",
"total_findings": 15,
"findings": [
{
"id": "finding_uuid_001",
"template_id": "wordpress-detection",
"name": "Instalación de WordPress detectada",
"description": "Instalación de CMS WordPress identificada en el objetivo",
"severity": "info",
"cvss_score": 0.0,
"matched_url": "https://example.com/wp-admin/",
"http_method": "GET",
"status_code": 200,
"response_time_ms": 245,
"evidence": {
"version": "6.2.1",
"wp_version_header": "6.2.1"
},
"timestamp": "2026-04-10T14:37:00Z",
"remediation": "Mantener WordPress actualizado a la última versión"
}
]
}
wprecon/
├── cmd/wprecon/
│ └── main.go # Punto de entrada CLI
├── internal/
│ ├── app/
│ │ ├── cli.go # Manejadores de comandos CLI
│ │ └── api.go # Manejadores de API REST
│ ├── engine/
│ │ ├── scanner.go # Orquestación de escaneo
│ │ ├── worker_pool.go # Motor de paralelización
│ │ ├── context.go # Gestión del contexto de escaneo
│ │ ├── logger.go # Utilidades de registro
│ │ └── rate_limit.go # Límite de velocidad
│ ├── executor/
│ │ ├── http_executor.go # Cliente HTTP
│ │ ├── request_builder.go # Construcción de solicitudes
│ │ └── variables.go # Resolución de variables
│ ├── matchers/
│ │ └── matchers.go # Lógica de coincidencia de respuestas
│ ├── extractors/
│ │ └── extractors.go # Extracción de datos
│ ├── templates/
│ │ ├── loader.go # Descubrimiento de plantillas
│ │ └── parser.go # Análisis YAML
│ ├── pipeline/
│ │ └── pipeline.go # Flujo de trabajo de escaneo
│ └── domain/
│ ├── template.go # Modelos de datos
│ ├── finding.go
│ ├── http.go
│ ├── matcher.go
│ └── extractor.go
├── templates/ # Biblioteca de plantillas YAML
│ ├── wordpress/ # Específico de WordPress
│ ├── cves/ # Detección de CVE
│ ├── exposures/ # Divulgación de información
│ ├── common/ # Comprobaciones genéricas
│ └── waf/ # Detección de WAF
└── go.mod # Dependencias
┌─────────────────────────────────────────────────┐
│ Interfaz de usuario (CLI/API) │
└─────────────────────────────────────────────────┘
│
├─→ Cargador de plantillas
├─→ Limitador de velocidad
└─→ Gestor de grupos de trabajadores
│
▼
┌─────────────────────────────────────────────────┐
│ Motor de tubería de escaneo │
│ ┌────────→ Constructor de solicitudes │
│ │ ┌────────→ Ejecutor HTTP │
│ │ │ ┌────────→ Comparador (5 tipos) │
│ │ │ │ ┌────────→ Extractor (2 tipos) │
│ │ │ │ │ ┌────────→ Informe de hallazgo │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ │
│ Plantilla → Solicitud → Respuesta → Hallazgo │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ Formateadores de salida y almacenamiento│
│ (JSON, Tabla, Generación de informes) │
└─────────────────────────────────────────────────┘
Las plantillas son archivos YAML que definen cómo WPRecon debe escanear vulnerabilidades o información específica.
id: wordpress-version-detection
name: Detección de versión de WordPress
description: Detecta y extrae la versión de WordPress desde readme.html
severity: info
author: Equipo WPRecon
requests:
- url: "{{BaseURL}}/readme.html"
method: GET
matchers:
- type: status
status:
- 200
- type: word
words:
- "WordPress"
extractors:
- type: regex
regex:
- 'Version (\d+\.\d+\.\d+)'
templates/custom/Ejemplo:
# Crear plantilla personalizada
cat > templates/custom/my-check.yaml << 'EOF'
id: my-custom-check
name: Mi comprobación personalizada
description: Detecta vulnerabilidad personalizada
severity: medium
author: Tu Nombre
requests:
- url: "{{BaseURL}}/vulnerable-endpoint"
method: GET
matchers:
- type: status
status:
- 200
- type: word
words:
- "vulnerable"
EOF
# Escanear con plantilla personalizada
wprecon scan https://example.com -t my-custom-check
# Tiempo de espera HTTP (por defecto: 10s)
export WPRECON_TIMEOUT=15
# Número de trabajadores (por defecto: 10)
export WPRECON_WORKERS=20
# Solicitudes por segundo (por defecto: 50)
export WPRECON_RATE_LIMIT=100
# Nivel de registro (por defecto: info)
export WPRECON_LOG_LEVEL=debug
# Directorios de plantillas (por defecto: ./templates)
export WPRECON_TEMPLATE_DIRS=/ruta/a/plantillas:/ruta/a/mas/plantillas
wprecon scan <objetivo> \
--templates-dir ./plantillas-personalizadas \
--workers 20 \
--rate-limit 100 \
--timeout 15 \
--output json \
--log-level debug
Evaluación integral de seguridad de instalaciones de WordPress:
wprecon scan https://example.com --output json > informe_evaluacion.json
Escaneo automatizado de vulnerabilidades en tuberías de despliegue:
# Ejemplo de GitHub Actions
- name: Escaneo de seguridad WordPress
run: |
wprecon scan ${{ secrets.STAGING_URL }} \
--output json \
--templates wordpress-detection,plugin-detection,cve-checks
Escanea múltiples objetivos de manera eficiente:
cat objetivos.txt | while read objetivo; do
wprecon scan "$objetivo" --output json >> resultados.json
done
# Compilar binario
go build -o wprecon ./cmd/wprecon/main.go
# Compilar para múltiples plataformas
GOOS=linux GOARCH=amd64 go build -o wprecon-linux ./cmd/wprecon/main.go
GOOS=darwin GOARCH=amd64 go build -o wprecon-darwin ./cmd/wprecon/main.go
GOOS=windows GOARCH=amd64 go build -o wprecon-windows.exe ./cmd/wprecon/main.go
google/uuid v1.6.0 - Generación de UUID para hallazgos
gopkg.in/yaml.v3 - Análisis de plantillas YAML
git checkout -b feature/mi-plantilla)templates/wprecon scan https://test.site -t tu-plantillaEste proyecto está bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.
Hecho con ❤️ para Matheus (ffx64)
| Característica | Descripción |
|---|
| Escaneo paralelo | Grupo de trabajadores configurable (por defecto: 10 trabajadores) para solicitudes concurrentes |
| Límite de velocidad | Regulación de solicitudes incorporada (por defecto: 50 req/s) para ser amigable con la red |
| Reintento automático | Lógica de reintento automático para solicitudes HTTP fallidas |
| Plantillas de recarga en caliente | Sin necesidad de recompilación: agrega plantillas y escanea |
| Resolución de variables | Variables dinámicas: {{BaseURL}}, {{Timestamp}}, {{RandomInt}} |
| Salida en múltiples formatos | Tablas legibles y JSON estructurado |
| Modos CLI y API | Interfaces tanto de línea de comandos como API REST |
| Niveles de gravedad | Hallazgos clasificados como info, bajo, medio, alto, crítico |
| Plantilla | Propósito |
|---|
wordpress-detection | Detecta instalación de WordPress |
wordpress-version | Huella digital de la versión de WordPress |
plugins.yaml | Detecta plugins instalados |
themes.yaml | Detecta temas instalados |
users.yaml | Enumera usuarios de WordPress |