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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-11391 — WordPress PPOM for WooCommerce 플러그인 <= 33.0.15는 SQL Injection에 취약합니다. | Kitploit
도구/GitHubGitHub/moritakaaz/cve-2025-11391
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLearning & EducationDatabase Security
GitHubmoritakaaz/cve-2025-11391

CVE-2025-11391

WordPress PPOM for WooCommerce 플러그인 <= 33.0.15는 SQL Injection에 취약합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PPOM for WooCommerce <= 33.0.15에서의 인증되지 않은 블라인드 SQL 인젝션

이 저장소에는 "PPOM for WooCommerce" WordPress 플러그인의 33.0.15 이하 버전에 영향을 미치는 인증되지 않은 시간 기반 블라인드 SQL 인젝션 취약점에 대한 개념 증명(PoC)이 포함되어 있습니다.

취약점 정보

  • 플러그인: PPOM for WooCommerce
  • 영향을 받는 버전: <= 33.0.15
  • 패치 버전: 33.0.16
  • 취약점 유형: 인증되지 않은 시간 기반 블라인드 SQL 인젝션
  • CVE ID: CVE-2025-11391 (추적 목적으로 할당됨)

설명

이 취약점은 플러그인이 SQL 쿼리에서 사용자 입력을 사용하기 전에 제대로 삭제하지 않기 때문에 발생합니다. 특히, classes/plugin.class.php 파일의 get_product_meta() 함수는 준비된 문(prepared statements)을 사용하지 않고 $meta_id 매개변수를 SQL 쿼리에 직접 연결합니다.

취약한 코드 (classes/plugin.class.php):

root@kitploit:~
function get_product_meta( $meta_id ) {
    // ...
    global $wpdb;
    $qry = 'SELECT * FROM ' . $wpdb->prefix . PPOM_TABLE_META . " WHERE productmeta_id = $meta_id";
    $res = $wpdb->get_row( $qry );
    return $res;
}

인증되지 않은 공격자는 악의적인 페이로드를 제작하여 장바구니에 제품을 추가할 때 ppom[fields][id] 매개변수에 주입함으로써 이 취약점을 악용할 수 있습니다. 이를 통해 공격자는 지연 함수(SLEEP())와 같은 임의의 SQL 명령을 실행할 수 있으며, 취약점을 확인하고 데이터베이스에서 민감한 정보를 문자 단위로 유출할 수 있습니다.

이 취약점은 플러그인 설정에서 "Enable Legacy Price Calculations" 옵션이 활성화되어 있을 때 트리거됩니다. 이 옵션은 장바구니 작업 중에 애플리케이션이 취약한 코드 경로를 사용하도록 강제하기 때문입니다.

저장소 구조

root@kitploit:~
└── cve-2025-11391/
    ├── exploit.py                  # The Python Proof of Concept script.
    └── woocommerce-product-addon/  # Vulnerable version of the plugin (v33.0.15).

설정 및 재현 단계

1. 요구 사항

  • 로컬 웹 서버 환경 (예: XAMPP, WAMP, MAMP).
  • 새 WordPress 설치.
  • WooCommerce 플러그인이 설치 및 활성화되어 있어야 함.
  • requests 라이브러리가 설치된 Python 3.x (pip install requests).

2. 실습 환경 구성

  1. 로컬 웹 서버(Apache, MySQL)를 시작합니다.
  2. WordPress를 디렉토리(예: /htdocs/wp4hacking/)에 설치합니다.
  3. WordPress 대시보드에서 WooCommerce 플러그인을 설치하고 활성화합니다.
  4. 이 저장소에 포함된 취약한 버전의 woocommerce-product-addon (v33.0.15)을 woocommerce-product-addon/ 디렉토리에서 .zip 파일을 업로드하여 설치합니다.
  5. "PPOM for WooCommerce" 플러그인을 활성화합니다.

3. 취약한 구성

  1. WordPress 대시보드에서 PPOM Fields > Settings로 이동합니다.
  2. "Enable Legacy Price Calculations" 옵션을 찾아 활성화하려면 체크박스를 선택합니다.
  3. 변경 사항을 저장합니다.
  4. PPOM Fields로 이동하여 새 필드 그룹을 만듭니다 (예: "PoC Group").
  5. 이 그룹 안에 Text Input 필드를 추가합니다. 제목(예: "SQL Injection")과 데이터 이름(예: sql_injection)을 지정합니다.
  6. Products > Add New로 이동하여 새 WooCommerce 제품을 만듭니다.
  7. 제품에 이름(예: "Product Testing")과 가격을 지정합니다.
  8. 제품 편집 페이지에서 "PPOM Fields" 탭을 찾아 생성한 "PoC Group"을 선택합니다.
  9. 제품을 게시합니다. 제품 ID(예: 72)를 기록해 둡니다.

익스플로잇

제공된 exploit.py 스크립트는 SLEEP() 명령을 주입하고 서버의 응답 시간을 측정하여 취약점을 확인합니다.

익스플로잇 실행 방법

  1. exploit.py 파일을 열고 다음 변수를 구성합니다.

    • PRODUCT_URL: 생성한 취약한 제품 페이지의 전체 URL.
    • add_to_cart_data['add-to-cart']: 취약한 제품의 ID.
  2. 터미널에서 스크립트를 실행합니다:

    root@kitploit:~
    python exploit.py
    

예상 출력

대상이 취약한 경우 서버가 SLEEP() 시간보다 오래 응답하여 스크립트가 시간 초과됩니다. 스크립트는 이 시간 초과를 성공적인 익스플로잇으로 올바르게 해석합니다.

root@kitploit:~
Attempting SQL Injection PoC (One-Step Method)...
Make sure 'Enable Legacy Price Calculations' is active.
[*] Sending SQL Injection payload...
   Request timed out after 10.00 seconds.

[+] SUCCESS! 'Read timed out' occurred because the SLEEP(7) payload was executed.
   The site is vulnerable to Time-Based Blind SQL Injection.

완화 조치

  • 즉시 업데이트: "PPOM for WooCommerce" 플러그인을 버전 33.0.16 이상으로 업그레이드하세요.
  • 준비된 문 사용: 패치된 버전은 $wpdb->prepare()를 사용하여 입력을 적절히 삭제하므로 SQL 인젝션을 방지합니다.

패치된 코드 (classes/plugin.class.php):

root@kitploit:~
$table = $wpdb->prefix . PPOM_TABLE_META;
$res   = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table WHERE productmeta_id = %d", $meta_id ) );

면책 조항

이 PoC는 교육 및 연구 목적으로만 제공됩니다. 소유하지 않았거나 테스트에 대한 명시적 허가를 받지 않은 시스템에서는 사용하지 마십시오. 작성자는 이 스크립트로 인한 오용 또는 손해에 대해 책임을 지지 않습니다.

도구 다운로드