Skip to content

ByteCodeSecure/wordpress-security-toolkit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WordPress Security Toolkit — Login Checker & Plugin Deployer


⚠️ LEGAL DISCLAIMER / AVISO LEGAL

This toolkit is intended exclusively for authorized penetration testing, security research on systems you own or have explicit written permission to test, and educational/CTF purposes. Unauthorized use against systems you do not own or have permission to test is illegal and may result in criminal prosecution. The author assumes no liability for misuse.


🌐 Language / Idioma


English

Table of Contents

  1. Overview
  2. Project Structure
  3. Component 1: WordPress Login Checker (wp.py)
  4. Component 2: Protect Uploads WordPress Plugin
  5. Requirements
  6. Installation
  7. Input Format
  8. Usage
  9. Output Files
  10. How It Works
  11. Troubleshooting

Overview

This toolkit contains two primary components for WordPress security assessment:

  1. wp.py — A multi-process Python script that tests WordPress admin credentials across multiple sites simultaneously. It also detects whether authenticated accounts have access to plugin installation and file manager capabilities.

  2. Files/plugin/ — A WordPress plugin ("Protect Uploads") that secures the wp-content/uploads directory by creating index files and .htaccess rules to prevent directory browsing and unauthorized file listing.


Project Structure

uploadwebshell/
├── wp.py                        # WordPress credential checker script
├── README.md                    # This file
├── LICENSE                      # License file
└── Files/
    ├── plugin.zip               # Packaged WordPress plugin (ready to upload)
    ├── plugin/
    │   └── plugin/
    │       ├── protect-uploads.php          # Main plugin entry point
    │       ├── uninstall.php                # Cleanup on uninstall
    │       ├── admin/
    │       │   ├── class-protect-uploads-admin.php   # Admin panel logic
    │       │   └── assets/css/protect-uploads-admin.css
    │       ├── includes/
    │       │   ├── class-protect-uploads.php          # Core plugin class
    │       │   ├── class-protect-uploads-loader.php   # Hook loader
    │       │   ├── class-protect-uploads-i18n.php     # Internationalization
    │       │   ├── class-protect-uploads-activator.php
    │       │   └── class-protect-uploads-deactivator.php
    │       └── languages/                   # Translation files (es_ES, fr_FR, it_IT)
    └── theme/
        └── theme/                           # FitnessBase WordPress theme

Component 1: WordPress Login Checker

Overview

wp.py is a Python script that tests WordPress login credentials against multiple sites in parallel using multiprocessing. It detects successful logins and checks for elevated capabilities like plugin installation access and WP File Manager plugin.

Features

  • Multi-process: 50 parallel workers by default for fast bulk testing
  • Multi-path detection: Tries /wp-login.php, /admin, /user login paths
  • UserPro support: Handles custom login forms from the UserPro plugin
  • Capability detection: Checks if authenticated user can install plugins or access WP File Manager
  • Auto encoding handling: Converts credential files to UTF-8 automatically
  • Flexible input: Accepts file path as argument or via interactive prompt

Component 2: Protect Uploads WordPress Plugin

Overview

A WordPress plugin that secures the wp-content/uploads directory against directory listing attacks. When activated, it creates protective index.php files and .htaccess rules in the uploads folder and all its subdirectories (up to 2 levels deep).

Plugin Features

  • Directory protection: Adds index.php (blank redirect) in uploads directories
  • Apache hardening: Creates .htaccess with Options -Indexes to block directory browsing
  • Status dashboard: Admin panel under WordPress Media menu showing protection status per directory
  • HTTP check: Verifies protection is actually working by testing each protected URL
  • Auto-scan: Scans all subdirectories on activation
  • Multi-language: Supports Spanish (es_ES), French (fr_FR), and Italian (it_IT)
  • Clean uninstall: Removes all created files when plugin is deactivated

Requirements

For wp.py

Requirement Version
Python 2.7 or 3.x
requests >= 2.20.0
urllib3 >= 1.24.0

For the WordPress Plugin

Requirement Version
WordPress 4.0 or higher
PHP 5.6 or higher
Apache (for .htaccess support)

Installation

Setting up wp.py

1. Install Python dependencies

pip install requests urllib3

2. Prepare your credentials file (see Input Format below)

3. Run the script

python wp.py

Installing the Protect Uploads Plugin

Method 1: Upload via WordPress Admin (recommended)

  1. Log in to your WordPress admin panel (yourdomain.com/wp-admin)
  2. Go to Plugins → Add New
  3. Click Upload Plugin
  4. Select Files/plugin.zip
  5. Click Install Now
  6. After installation, click Activate Plugin

Method 2: Manual FTP/SFTP Upload

  1. Extract Files/plugin.zip
  2. Upload the plugin/ folder to your server at:
    /wp-content/plugins/protect-uploads/
    
  3. Go to WordPress Admin → Plugins
  4. Find "Protect Uploads" and click Activate

Method 3: WP-CLI

wp plugin install /path/to/plugin.zip --activate

Input Format

For wp.py (WordPress Checker)

Prepare a plain text file where each line follows this format:

domain.com/wp-login.php#username@password

Examples:

example.com/wp-login.php#admin@password123
myblog.com/wp-login.php#webmaster@MySecurePass!
shop.domain.com/wp-login.php#store_admin@letmein2024
192.168.1.20/wp-login.php#admin@admin

Rules:

  • One credential set per line
  • Format is strict: domain/wp-login.php#username@password
  • Domain should not include http:// or https:// (added automatically)
  • Lines that do not match the format are skipped
  • Blank lines are ignored

Usage

Running the WordPress Checker (wp.py)

Interactive Mode

python wp.py

You will be prompted:

Enter path to credentials file: credentials.txt

Command-line Mode

python wp.py credentials.txt

Example Output

$ python wp.py combo.txt

[*] Loading credentials from combo.txt...
[*] Starting 50 workers...

[+] SUCCESS  → example.com | admin | password123
[+] PLUGIN   → shop.com | admin | pass456  [can install plugins]
[+] FILEMGR  → blog.org | editor | mypass  [has WP File Manager]
[-] FAILED   → test.com | admin | wrongpassword
[-] FAILED   → down.com | user | pass (connection error)

[*] Done. Results saved.

Output Files

File Description
Successfully_logged_WordPress.txt All valid WordPress logins
plugin-install.txt Accounts with plugin installation capability
filemanager.txt Accounts with WP File Manager plugin access

Format inside output files:

domain.com | username | password

How It Works

wp.py — Login Flow

  1. Load file: Reads credentials, converts encoding to UTF-8
  2. Parse line: Extracts domain, username, password from format
  3. Normalize URL: Builds full URL with https:// prefix
  4. Send POST: Submits login form to /wp-login.php
  5. Detect success: Checks response HTML for WordPress admin indicators (#wpadminbar, /wp-admin/, log out)
  6. Check capabilities:
    • Requests /wp-admin/plugin-install.php — checks for plugin install access
    • Checks for WP File Manager plugin presence
  7. Save results: Writes to appropriate output file

Protect Uploads Plugin — Protection Flow

  1. On activation: Scans wp-content/uploads/ and all subdirectories (2 levels)
  2. For each directory: Creates:
    • index.php → PHP file that redirects to home page
    • .htaccess → Contains Options -Indexes directive
  3. Admin panel: Shows table with each protected directory, file status, and HTTP status code
  4. On deactivation: Removes all index.php and .htaccess files created by the plugin

Troubleshooting

wp.py Issues

Problem Solution
ModuleNotFoundError Run pip install requests urllib3
All results are failed Check internet connection; verify credential file format
Script is slow Increase worker count in source (default: 50)
UnicodeDecodeError The script auto-converts encoding; ensure file is readable
Empty output files All credentials may have failed; check the console output

Plugin Issues

Problem Solution
Plugin won't activate Check PHP version (requires 5.6+) and WordPress version (4.0+)
Protection not working Ensure Apache mod_rewrite is enabled and .htaccess is allowed
Admin menu missing Deactivate and reactivate the plugin
HTTP check shows error Server may not allow loopback HTTP requests; disable firewall rules

Español

Tabla de Contenidos

  1. Descripción General
  2. Estructura del Proyecto
  3. Componente 1: Verificador de Login de WordPress (wp.py)
  4. Componente 2: Plugin de WordPress Protect Uploads
  5. Requisitos
  6. Instalación
  7. Formato de Entrada
  8. Uso
  9. Archivos de Salida
  10. Cómo Funciona
  11. Solución de Problemas

Descripción General

Este toolkit contiene dos componentes principales para la evaluación de seguridad de WordPress:

  1. wp.py — Un script Python multiproceso que prueba credenciales de administrador de WordPress en múltiples sitios de forma simultánea. También detecta si las cuentas autenticadas tienen acceso a la instalación de plugins y a capacidades de administrador de archivos.

  2. Files/plugin/ — Un plugin de WordPress ("Protect Uploads") que asegura el directorio wp-content/uploads creando archivos de índice y reglas .htaccess para prevenir el listado de directorios y el acceso no autorizado a archivos.


Estructura del Proyecto

uploadwebshell/
├── wp.py                        # Script verificador de credenciales WordPress
├── README.md                    # Este archivo
├── LICENSE                      # Archivo de licencia
└── Files/
    ├── plugin.zip               # Plugin WordPress empaquetado (listo para subir)
    ├── plugin/
    │   └── plugin/
    │       ├── protect-uploads.php          # Punto de entrada principal del plugin
    │       ├── uninstall.php                # Limpieza al desinstalar
    │       ├── admin/
    │       │   ├── class-protect-uploads-admin.php   # Lógica del panel admin
    │       │   └── assets/css/protect-uploads-admin.css
    │       ├── includes/
    │       │   ├── class-protect-uploads.php          # Clase principal del plugin
    │       │   ├── class-protect-uploads-loader.php   # Cargador de hooks
    │       │   ├── class-protect-uploads-i18n.php     # Internacionalización
    │       │   ├── class-protect-uploads-activator.php
    │       │   └── class-protect-uploads-deactivator.php
    │       └── languages/                   # Archivos de traducción (es_ES, fr_FR, it_IT)
    └── theme/
        └── theme/                           # Tema de WordPress FitnessBase

Componente 1: Verificador de Login de WordPress

Descripción

wp.py es un script Python que prueba credenciales de inicio de sesión de WordPress contra múltiples sitios en paralelo usando multiprocesamiento. Detecta inicios de sesión exitosos y verifica capacidades elevadas como acceso a instalación de plugins y WP File Manager.

Características

  • Multiproceso: 50 workers paralelos por defecto para pruebas masivas rápidas
  • Detección multi-ruta: Prueba las rutas de login /wp-login.php, /admin, /user
  • Soporte UserPro: Maneja formularios de inicio de sesión personalizados del plugin UserPro
  • Detección de capacidades: Verifica si el usuario autenticado puede instalar plugins o acceder al WP File Manager
  • Manejo automático de codificación: Convierte archivos de credenciales a UTF-8 automáticamente
  • Entrada flexible: Acepta ruta de archivo como argumento o mediante solicitud interactiva

Componente 2: Plugin de WordPress Protect Uploads

Descripción

Un plugin de WordPress que asegura el directorio wp-content/uploads contra ataques de listado de directorios. Al activarse, crea archivos index.php protectores y reglas .htaccess en la carpeta de uploads y todos sus subdirectorios (hasta 2 niveles de profundidad).

Características del Plugin

  • Protección de directorios: Añade index.php (redirección en blanco) en los directorios de uploads
  • Fortalecimiento Apache: Crea .htaccess con Options -Indexes para bloquear el listado de directorios
  • Panel de estado: Panel de administración bajo el menú de Medios de WordPress que muestra el estado de protección por directorio
  • Verificación HTTP: Comprueba que la protección realmente funciona probando cada URL protegida
  • Escaneo automático: Escanea todos los subdirectorios en la activación
  • Multi-idioma: Soporta Español (es_ES), Francés (fr_FR) e Italiano (it_IT)
  • Desinstalación limpia: Elimina todos los archivos creados cuando el plugin se desactiva

Requisitos

Para wp.py

Requisito Versión
Python 2.7 o 3.x
requests >= 2.20.0
urllib3 >= 1.24.0

Para el Plugin de WordPress

Requisito Versión
WordPress 4.0 o superior
PHP 5.6 o superior
Apache (para soporte de .htaccess)

Instalación

Configuración de wp.py

1. Instalar dependencias de Python

pip install requests urllib3

2. Preparar tu archivo de credenciales (ver Formato de Entrada)

3. Ejecutar el script

python wp.py

Instalación del Plugin Protect Uploads

Método 1: Subir desde el Admin de WordPress (recomendado)

  1. Inicia sesión en tu panel de administración de WordPress (tudominio.com/wp-admin)
  2. Ve a Plugins → Añadir Nuevo
  3. Haz clic en Subir Plugin
  4. Selecciona Files/plugin.zip
  5. Haz clic en Instalar Ahora
  6. Después de la instalación, haz clic en Activar Plugin

Método 2: Subida Manual por FTP/SFTP

  1. Extrae Files/plugin.zip
  2. Sube la carpeta plugin/ a tu servidor en:
    /wp-content/plugins/protect-uploads/
    
  3. Ve a Admin WordPress → Plugins
  4. Encuentra "Protect Uploads" y haz clic en Activar

Método 3: WP-CLI

wp plugin install /ruta/al/plugin.zip --activate

Formato de Entrada

Para wp.py (Verificador de WordPress)

Prepara un archivo de texto plano donde cada línea siga este formato:

dominio.com/wp-login.php#usuario@contraseña

Ejemplos:

ejemplo.com/wp-login.php#admin@contraseña123
miblog.com/wp-login.php#webmaster@MiContraseñaSegura!
tienda.dominio.com/wp-login.php#admin_tienda@entrar2024
192.168.1.20/wp-login.php#admin@admin

Reglas:

  • Un conjunto de credenciales por línea
  • El formato es estricto: dominio/wp-login.php#usuario@contraseña
  • El dominio no debe incluir http:// o https:// (se agrega automáticamente)
  • Las líneas que no coinciden con el formato se omiten
  • Las líneas en blanco se ignoran

Uso

Ejecutar el Verificador de WordPress (wp.py)

Modo Interactivo

python wp.py

Se te pedirá:

Ingresa la ruta al archivo de credenciales: credenciales.txt

Modo de Línea de Comandos

python wp.py credenciales.txt

Ejemplo de Salida

$ python wp.py combo.txt

[*] Cargando credenciales desde combo.txt...
[*] Iniciando 50 workers...

[+] ÉXITO    → ejemplo.com | admin | contraseña123
[+] PLUGIN   → tienda.com | admin | pass456  [puede instalar plugins]
[+] FILEMGR  → blog.org | editor | mipass  [tiene WP File Manager]
[-] FALLIDO  → test.com | admin | contraseñamala
[-] FALLIDO  → caido.com | usuario | pass (error de conexión)

[*] Completado. Resultados guardados.

Archivos de Salida

Archivo Descripción
Successfully_logged_WordPress.txt Todos los inicios de sesión válidos de WordPress
plugin-install.txt Cuentas con capacidad de instalación de plugins
filemanager.txt Cuentas con acceso al plugin WP File Manager

Formato dentro de los archivos de salida:

dominio.com | usuario | contraseña

Cómo Funciona

wp.py — Flujo de Login

  1. Cargar archivo: Lee las credenciales, convierte la codificación a UTF-8
  2. Analizar línea: Extrae dominio, usuario y contraseña del formato
  3. Normalizar URL: Construye la URL completa con prefijo https://
  4. Enviar POST: Envía el formulario de login a /wp-login.php
  5. Detectar éxito: Verifica en el HTML de respuesta los indicadores del admin de WordPress (#wpadminbar, /wp-admin/, cerrar sesión)
  6. Verificar capacidades:
    • Solicita /wp-admin/plugin-install.php — verifica acceso a instalación de plugins
    • Comprueba la presencia del plugin WP File Manager
  7. Guardar resultados: Escribe en el archivo de salida correspondiente

Plugin Protect Uploads — Flujo de Protección

  1. Al activar: Escanea wp-content/uploads/ y todos los subdirectorios (2 niveles)
  2. Para cada directorio: Crea:
    • index.php → Archivo PHP que redirige a la página de inicio
    • .htaccess → Contiene la directiva Options -Indexes
  3. Panel de administración: Muestra tabla con cada directorio protegido, estado de archivos y código de estado HTTP
  4. Al desactivar: Elimina todos los archivos index.php y .htaccess creados por el plugin

Solución de Problemas

Problemas con wp.py

Problema Solución
ModuleNotFoundError Ejecuta pip install requests urllib3
Todos los resultados fallan Verifica la conexión a internet; comprueba el formato del archivo de credenciales
El script es lento Aumenta el número de workers en el código fuente (por defecto: 50)
UnicodeDecodeError El script convierte la codificación automáticamente; asegúrate de que el archivo sea legible
Archivos de salida vacíos Todas las credenciales pueden haber fallado; revisa la salida de la consola

Problemas con el Plugin

Problema Solución
El plugin no se activa Verifica la versión de PHP (requiere 5.6+) y WordPress (4.0+)
La protección no funciona Asegúrate de que Apache mod_rewrite esté habilitado y .htaccess esté permitido
Menú de administración faltante Desactiva y reactiva el plugin
La verificación HTTP muestra error El servidor puede no permitir solicitudes HTTP de loopback; deshabilita las reglas del firewall

License / Licencia

This project is licensed under the MIT License. See LICENSE for details.

Este proyecto está bajo la Licencia MIT. Ver LICENSE para más detalles.

About

WordPress login checker and uploads protection plugin for authorized security testing

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors