
📦 Pluck CMS 4.7.18 - Exploit de RCE autenticado (CVE-2023-50564). Bypass de restricciones de subida y ejecución remota. 🎯
exploit.py 🐍💥
⚠️ Aviso legal / ético: este script es solo para entornos autorizados ✅ (CTFs, laboratorios, pentesting con permiso). No lo uses contra sistemas sin autorización ❌.
🧾 ¿Qué hace este script?
exploit_greenhorn.py automatiza una cadena de explotación típica en un panel web:
✅ Hace login en el panel (necesitas contraseña válida) ✅ Crea un ZIP en memoria (sin escribir archivos locales) 📦 ✅ Mete dentro un rev.php con una reverse shell 🔁🐚 ✅ Sube el ZIP como “módulo” al panel 🧩⬆️ ✅ “Detona” el payload abriendo la URL del PHP subido 🚀
📌 El nombre del módulo se genera aleatorio para evitar conflictos (por ejemplo: abcdefg, xqpmzui, etc.) 🎲
🧰 Requisitos
Python 3.8+ 🐍
Dependencia: requests 📌
Instalación: instala la librería requests con pip (pip install requests) ✅
⚙️ Configuración (IMPORTANTE 🔧)
Dentro del script hay una sección “TUS DATOS” que debes ajustar:
RHOST_DOMAIN 🌐 → URL del objetivo (incluye http:// o https://)
LHOST_IP 🧭 → tu IP donde quieres recibir la shell (normalmente la de la VPN/tun0)
LHOST_PORT 🔌 → puerto donde vas a escuchar
PASSWORD 🔑 → contraseña del panel (el script no hace brute force)
✅ Consejo: lo más común que falle es LHOST_IP (pon la IP correcta de tu interfaz de VPN) 😅
🎧 Listener (antes de ejecutar)
Antes de lanzar el exploit, abre un listener para recibir la reverse shell 👂🐚
Ejemplo: netcat escuchando en el mismo puerto que pusiste en LHOST_PORT (por ejemplo 4444). Si no estás escuchando, no llega nada 📭.
▶️ Uso
Configura RHOST_DOMAIN, LHOST_IP, LHOST_PORT y PASSWORD ✅
Abre tu listener 🎧
Ejecuta el script con Python 🐍
Salida típica que puedes ver:
[] Objetivo: http://greenhorn.htb
[] Creando modulo limpio: xqpmzui [] Logueando... [+] Login OK. [] Subiendo payload... [*] Detonando en: http://greenhorn.htb/data/modules/xqpmzui/rev.php
[+] ¡Timeout! (Buena señal, revisa tu netcat)
😎 Ojo: el “Timeout! (Buena señal)” suele ser NORMAL ✅ Porque cuando el PHP abre la reverse shell, la petición web puede quedarse “colgada” mientras la sesión interactiva está viva 🔁
🧠 ¿Cómo funciona por dentro? (explicado fácil)
Genera un nombre aleatorio de módulo 🎲
Crea un ZIP en memoria 📦 (estructura plana, sin carpetas internas)
Dentro mete rev.php con una reverse shell que conecta a tu LHOST_IP:LHOST_PORT 📡
Hace login en /login.php 🔑 (incluye Referer para compatibilidad)
Sube el ZIP a /admin.php?action=installmodule ⬆️🧩
Ejecuta el payload accediendo a /data/modules/<module_name>/rev.php 🚀🐚
🧪 Troubleshooting (si algo falla)
❌ Login fallido
Revisa PASSWORD 🔑
Confirma que el endpoint es /login.php
En labs a veces toca reiniciar la máquina/servicio 🔄
❌ No llega la shell
Verifica LHOST_IP 🧭 (la IP correcta, normalmente tun0)
Confirma que estás escuchando en el puerto correcto 🔌🎧
Prueba otro puerto si hay filtrado (por ejemplo 443 o 9001) 🚧
❌ 404 al detonar
Puede que no se haya instalado el módulo 🧩
Algunas instalaciones cambian rutas; revisa la estructura de /data/modules/ 📁
🛡️ Notas
No deja ZIP en disco local (todo va en memoria) ✅
Importa sys pero no se usa (si quieres, puedes limpiarlo) 🧹
Úsalo con cabeza 🧠😄
✅ Disclaimer final
Sin garantía. Solo uso educativo y autorizado. Si lo usas fuera de permiso, es tu responsabilidad 🚫⚖️