
📦 Pluck CMS 4.7.18 - Exploit de RCE Autenticado (CVE-2023-50564). Bypass de restrições de upload e execução remota. 🎯
exploit.py 🐍💥
⚠️ Aviso legal / ético: este script é apenas para ambientes autorizados ✅ (CTFs, laboratórios, pentest com permissão). Não o use contra sistemas sem autorização ❌.
🧾 O que este script faz?
exploit_greenhorn.py automatiza uma cadeia de exploração típica em um painel web:
✅ Faz login no painel (você precisa de senha válida) ✅ Cria um ZIP em memória (sem escrever arquivos locais) 📦 ✅ Insere um rev.php com uma reverse shell 🔁🐚 ✅ Envia o ZIP como “módulo” para o painel 🧩⬆️ ✅ “Detona” o payload abrindo a URL do PHP enviado 🚀
📌 O nome do módulo é gerado aleatoriamente para evitar conflitos (por exemplo: abcdefg, xqpmzui, etc.) 🎲
🧰 Requisitos
Python 3.8+ 🐍
Dependência: requests 📌
Instalação: instale a biblioteca requests com pip (pip install requests) ✅
⚙️ Configuração (IMPORTANTE 🔧)
Dentro do script há uma seção “SEUS DADOS” que você deve ajustar:
RHOST_DOMAIN 🌐 → URL do alvo (inclua http:// ou https://)
LHOST_IP 🧭 → seu IP onde você quer receber a shell (normalmente o da VPN/tun0)
LHOST_PORT 🔌 → porta onde você vai escutar
PASSWORD 🔑 → senha do painel (o script não faz brute force)
✅ Dica: o mais comum a falhar é o LHOST_IP (coloque o IP correto da sua interface VPN) 😅
🎧 Listener (antes de executar)
Antes de executar o exploit, abra um listener para receber a reverse shell 👂🐚
Exemplo: netcat escutando na mesma porta que você colocou em LHOST_PORT (por exemplo 4444). Se você não estiver escutando, não chega nada 📭.
▶️ Uso
Configure RHOST_DOMAIN, LHOST_IP, LHOST_PORT e PASSWORD ✅
Abra seu listener 🎧
Execute o script com Python 🐍
Saída típica que você pode 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)
😎 Atenção: o “Timeout! (Bom sinal)” costuma ser NORMAL ✅ Porque quando o PHP abre a reverse shell, a requisição web pode ficar “pendurada” enquanto a sessão interativa está viva 🔁
🧠 Como funciona por dentro? (explicado de forma fácil)
Gera um nome aleatório de módulo 🎲
Cria um ZIP em memória 📦 (estrutura plana, sem pastas internas)
Insere o rev.php com uma reverse shell que conecta ao seu LHOST_IP:LHOST_PORT 📡
Faz login em /login.php 🔑 (inclui Referer para compatibilidade)
Envia o ZIP para /admin.php?action=installmodule ⬆️🧩
Executa o payload acessando /data/modules/<module_name>/rev.php 🚀🐚
🧪 Troubleshooting (se algo falhar)
❌ Falha no login
Revise PASSWORD 🔑
Confirme que o endpoint é /login.php
Em labs às vezes é preciso reiniciar a máquina/serviço 🔄
❌ A shell não chega
Verifique LHOST_IP 🧭 (o IP correto, normalmente tun0)
Confirme que você está escutando na porta correta 🔌🎧
Teste outra porta se houver filtragem (por exemplo 443 ou 9001) 🚧
❌ 404 ao detonar
Pode ser que o módulo não tenha sido instalado 🧩
Algumas instalações mudam rotas; revise a estrutura de /data/modules/ 📁
🛡️ Notas
Não deixa ZIP em disco local (tudo vai em memória) ✅
Importa sys mas não usa (se quiser, pode limpá-lo) 🧹
Use com bom senso 🧠😄
✅ Aviso final
Sem garantia. Somente uso educacional e autorizado. Se você usar sem permissão, é sua responsabilidade 🚫⚖️