
Craft CMS의 사전 인증 원격 코드 실행 취약점인 CVE-2023-41892를 재현하기 위한 PoC 스크립트 및 Docker 랩입니다. 로그 포이즈닝 및 Imagick MSL 파일 쓰기 익스플로잇을 포함합니다.
이 저장소는 Craft CMS의 사전 인증 원격 코드 실행 취약점인 CVE-2023-41892를 재현하기 위한 개념 증명(PoC) 스크립트와 로컬 Vulhub 랩을 포함합니다.
이 프로젝트는 승인된 로컬 랩 또는 테스트에 대한 명시적 권한이 있는 다른 시스템에서만 사용하십시오.
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
| 경로 | 용도 |
|---|
LFI_to_RCE.py | Psy\Configuration 가젯을 통한 로그 오염 후 로컬 파일 포함(LFI)을 수행하는 PoC. |
Imagick_PoC.py | Imagick MSL 가젯을 통한 임의 파일 쓰기를 수행하는 PoC. |
Vulnhub_env/docker-compose.yml | 취약한 Craft CMS 4.4.14와 MySQL 5.7을 시작하는 Docker Compose 랩. |
Vulnhub_env/README.md | 요청 예제와 스크린샷이 포함된 원본 Vulhub 스타일 재현 노트. |
Vulnhub_env/README.zh-cn.md | Vulhub 재현 노트의 중국어 버전. |
Vulnhub_env/*.png | Vulhub 환경 문서에서 사용하는 스크린샷. |
CVE-2023-41892는 Craft CMS 4.0.0-RC1부터 4.4.14까지의 버전에 영향을 미칩니다. 이 문제는 Craft CMS 4.4.15에서 수정되었습니다.
두 스크립트에서 사용하는 취약한 엔드포인트는 다음과 같습니다:
/index.php?action=conditions/render
PoC는 기본 로컬 랩 URL을 대상으로 합니다:
http://localhost:8088
랩이 다른 호스트나 포트에서 실행되는 경우 LFI_to_RCE.py와 Imagick_PoC.py 상단 근처의 URL 값을 업데이트하세요.
requestsPython 종속성을 설치합니다:
pip install requests
취약한 Craft CMS 환경을 시작합니다:
cd Vulnhub_env
docker compose up -d
Craft CMS 설치 프로그램을 엽니다:
http://localhost:8088/admin/install
설치 중 다음 기본 데이터베이스 설정을 사용합니다:
| 설정 | 값 |
|---|---|
| 데이터베이스 호스트 | db |
| 데이터베이스 이름 | craftcms |
| 데이터베이스 사용자 | root |
| 데이터베이스 비밀번호 | root |
설치 후 사이트가 다음 주소에서 접근 가능한지 확인합니다:
http://localhost:8088
저장소 루트에서 명령을 실행합니다:
cd CVE-2323-41892_PoC
실행:
python LFI_to_RCE.py
동작 방식:
PHP 코드가 포함된 잘못된 형식의 JSON을 Craft CMS 로그로 전송합니다.
현재 로컬 날짜를 사용하여 로그 파일 경로를 구성합니다:
../storage/logs/web-YYYY-MM-DD.log
craft\elements\conditions\users\UserCondition과 함께
\Psy\Configuration을 사용하여 오염된 로그 파일을 포함시킵니다.
응답에 phpinfo() 출력이 나타나는지 확인합니다.
예상 성공 출력:
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
실행:
python Imagick_PoC.py
동작 방식:
Imagick 가젯으로 객체 생성을 트리거합니다.webshell.php 쓰기를 시도합니다.http://localhost:8088/webshell.php를 요청하고 phpinfo()를 확인합니다.예상 성공 출력:
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
Imagick 경로는 페이로드가 트리거된 후 PHP worker를 중단시킬 수 있습니다. Vulhub 랩에서는 webshell.php가 크래시 전에 쓰여졌다면 이는 정상적인 동작일 수 있습니다.
두 스크립트 모두 파일 상단에 대상 URL을 정의합니다:
URL = "http://localhost:8088"
취약한 랩이 다른 주소에 노출된 경우 이 값을 변경하세요.
Imagick_PoC.py는 생성된 파일을 다음 경로에서 확인합니다:
OUTPUT_FILE = "/webshell.php"
컨테이너가 실행 중인지 확인합니다:
cd Vulnhub_env
docker compose ps
http://localhost:8088에서 사이트에 접근할 수 있는지 확인합니다.
포트 8088을 이미 다른 서비스가 사용 중인지 확인합니다.
노출된 포트를 변경한 경우 Python 스크립트의 URL 값을 업데이트하세요.
LFI_to_RCE.py에 PHP Version이 표시되지 않음storage/logs/에 로그를 쓰고 있는지 확인합니다.LFI_to_RCE.py에서 생성된 web-YYYY-MM-DD.log 경로를 업데이트하세요.Imagick_PoC.py가 /webshell.php에 대해 404를 반환함/tmp/php*에 생성되는지 확인합니다.랩을 중지합니다:
cd Vulnhub_env
docker compose down
깨끗한 재설치를 위해 컨테이너와 데이터베이스 볼륨을 제거하려면:
docker compose down -v
Craft CMS를 4.4.15 이상으로 업그레이드하세요.
악용이 의심되는 경우 Craft CMS 보안 키, 데이터베이스 자격 증명, 애플리케이션 시크릿, 환경에 저장된 모든 자격 증명을 교체하세요.