
Scripts de prova de conceito e laboratório Docker para reproduzir o CVE-2023-41892, uma vulnerabilidade de execução remota de código pré-autenticada no Craft CMS. Inclui explorações de envenenamento de logs e escrita de arquivos MSL do Imagick.
Este repositório contém scripts de prova de conceito e um laboratório local Vulhub para reproduzir a CVE-2023-41892, uma vulnerabilidade de execução remota de código pré-autenticada no Craft CMS.
Use este projeto apenas em um laboratório local autorizado ou em outros sistemas onde você tenha permissão explícita para testar.
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
| Caminho | Propósito |
|---|---|
LFI_to_RCE.py | PoC para envenenamento de log seguido de inclusão local de arquivo através do gadget Psy\Configuration. |
Imagick_PoC.py | PoC para escrita arbitrária de arquivo através do gadget Imagick MSL. |
Vulnhub_env/docker-compose.yml | Laboratório Docker Compose que inicia o Craft CMS 4.4.14 vulnerável e MySQL 5.7. |
Vulnhub_env/README.md | Notas de reprodução originais no estilo Vulhub com exemplos de requisições e capturas de tela. |
Vulnhub_env/README.zh-cn.md | Versão em chinês das notas de reprodução do Vulhub. |
Vulnhub_env/*.png | Capturas de tela usadas pela documentação do ambiente Vulhub. |
CVE-2023-41892 afeta versões do Craft CMS de 4.0.0-RC1 até 4.4.14. O problema foi corrigido no Craft CMS 4.4.15.
O endpoint vulnerável usado por ambos os scripts é:
/index.php?action=conditions/render
Os PoCs têm como alvo a URL padrão do laboratório local:
http://localhost:8088
Se o seu laboratório estiver rodando em outro host ou porta, atualize o valor URL próximo ao topo de LFI_to_RCE.py e Imagick_PoC.py.
requestsInstale a dependência Python:
pip install requests
Inicie o ambiente vulnerável do Craft CMS:
cd Vulnhub_env
docker compose up -d
Abra o instalador do Craft CMS:
http://localhost:8088/admin/install
Use as seguintes configurações de banco de dados padrão durante a instalação:
| Configuração | Valor |
|---|---|
| Host do banco de dados | db |
| Nome do banco de dados | craftcms |
| Usuário do banco de dados |
Após a instalação, confirme que o site está acessível em:
http://localhost:8088
Execute os comandos a partir da raiz do repositório:
cd CVE-2323-41892_PoC
Execute:
python LFI_to_RCE.py
O que ele faz:
Envia JSON malformado contendo código PHP para o log do Craft CMS.
Constrói um caminho de arquivo de log usando a data local atual:
../storage/logs/web-YYYY-MM-DD.log
Usa craft\elements\conditions\users\UserCondition com \Psy\Configuration para incluir o arquivo de log envenenado.
Verifica se a saída de phpinfo() aparece na resposta.
Saída esperada de sucesso:
[*] Iniciando Envenenamento de Log...
[+] Payload enviado com sucesso!
[*] Iniciando LFI para RCE...
[+] phpinfo() executado com sucesso!
Execute:
python Imagick_PoC.py
O que ele faz:
Imagick.webshell.php na raiz web.http://localhost:8088/webshell.php e verifica se há phpinfo().Saída esperada de sucesso:
[*] Enviando payload multipart/form-data para disparar o gadget Imagick...
[+] Sucesso: saída de phpinfo() encontrada.
O caminho do Imagick pode derrubar o worker PHP após o disparo do payload. No laboratório Vulhub isso ainda pode ser normal se webshell.php for escrito antes da queda.
Ambos os scripts definem a URL alvo no topo do arquivo:
URL = "http://localhost:8088"
Altere este valor se o laboratório vulnerável estiver exposto em outro endereço.
Imagick_PoC.py verifica o arquivo gerado em:
OUTPUT_FILE = "/webshell.php"
Confirme que os contêineres estão rodando:
cd Vulnhub_env
docker compose ps
Confirme que o site está acessível em http://localhost:8088.
Verifique se outro serviço já está usando a porta 8088.
Atualize o valor URL nos scripts Python se você alterou a porta exposta.
LFI_to_RCE.py não mostra PHP Versionstorage/logs/.web-YYYY-MM-DD.log em LFI_to_RCE.py.Imagick_PoC.py retorna 404 para /webshell.php/tmp/php*.Para o laboratório:
cd Vulnhub_env
docker compose down
Remova os contêineres e o volume do banco de dados se quiser uma reinstalação limpa:
docker compose down -v
Atualize o Craft CMS para 4.4.15 ou posterior.
Se houver suspeita de exploração, rotacione a chave de segurança do Craft CMS, as credenciais do banco de dados, os segredos da aplicação e quaisquer credenciais armazenadas no ambiente.
root| Senha do banco de dados | root |