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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-4396 — 이 저장소는 `cats` 매개변수를 통해 WordPress Relevanssi 플러그인에 영향을 미치는 인증되지 않은 시간 기반 블라인드 SQL 인젝션인 CVE-2025-4396에 대한 실용적인 연구 및 검증 툴킷을 포함합니다. | Kitploit
도구/GitHubGitHub/nefhara/cve-2025-4396
Password CrackingVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubnefhara/cve-2025-4396

CVE-2025-4396

이 저장소는 `cats` 매개변수를 통해 WordPress Relevanssi 플러그인에 영향을 미치는 인증되지 않은 시간 기반 블라인드 SQL 인젝션인 CVE-2025-4396에 대한 실용적인 연구 및 검증 툴킷을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-4396 – WordPress Relevanssi 시간 기반 블라인드 SQL 인젝션 툴킷

개요

이 저장소는 WordPress Relevanssi 플러그인의 cats 매개변수에 영향을 미치는 인증되지 않은 시간 기반 블라인드 SQL 인젝션인 CVE-2025-4396에 대한 실용적인 연구 및 검증 툴킷을 포함합니다.

이 프로젝트는 허가된 Purple Team 엔진을 위해 제작되었으며, 다음 목적을 수행합니다.

  • 통제된 환경에서 악용 가능성 검증,
  • 다양한 공격자 기량 수준 시연,
  • SOC 탐지 범위 측정,
  • 현실적인 방식으로 WordPress 비밀번호 해시 추출,
  • 해시가 복구된 후 오프라인 크래킹 워크플로우 자동화.

저장소에 포함된 항목:

  • 표준 추출 스크립트,
  • 더 빠른 이진 검색 추출 스크립트,
  • 추출된 WordPress 6.8+ 해시를 준비하고 크래킹하는 도우미 스크립트(Hashcat 사용).

면책 조항
이 프로젝트는 교육, 방어적 검증, 그리고 승인된 보안 테스트용으로만 제공됩니다.
소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 사용하지 마십시오.

테스트 환경

  • 서버: Debian 11
  • WordPress 6.9.1,
  • Relevanssi 플러그인 4.24.4 (https://wordpress.org/plugins/relevanssi/advanced/ 에서 다운로드),
  • PoC는 Kali Linux OS에서 사용.

CVE 설명

CVE-2025-4396은 WordPress의 Relevanssi 검색 기능에 영향을 미치는 SQL 인젝션 취약점입니다.

테스트 시나리오에서 이 문제는 검색 워크플로우, 특히 cats 매개변수를 통해 접근 가능합니다. 취약한 코드 경로는 공격자가 제어하는 입력이 플러그인에 의해 생성된 SQL 쿼리에 영향을 미칠 수 있도록 합니다.

취약한 엔드포인트는 사전 인증 없이 액세스할 수 있으므로, 원격 공격자가 인증되지 않은 SQL 인젝션을 수행할 수 있습니다.

실질적인 영향은 다음과 같습니다.

  • 데이터베이스 쿼리 조작,
  • 시간 기반 블라인드 SQL 인젝션,
  • 비밀번호 해시와 같은 민감한 데이터 추출,
  • 환경에 따라 유효한 자격 증명 복구를 통한 권한 상승 가능.

취약점 작동 방식

근본 원인

취약점은 사용자가 제어하는 검색 관련 매개변수 입력이 SQL 쿼리에 포함되기 전에 안전하게 처리되지 않기 때문에 발생합니다.

실제로 공격자는 백엔드 쿼리 로직에 SQL 표현식을 삽입하고 데이터베이스가 추가 조건을 평가하도록 강제할 수 있습니다.

블라인드인 이유

취약점은 블라인드 모드로 악용됩니다. 즉, 애플리케이션이 SQL 오류나 원시 데이터베이스 결과를 직접 표시하지 않습니다.

공격자는 페이지에서 쿼리 출력을 읽는 대신 데이터베이스에 일련의 참/거짓 질문을 하고 부작용을 관찰합니다.

  • 조건이 참이면 데이터베이스가 몇 초 동안 지연됩니다,
  • 조건이 거짓이면 응답이 즉시 반환됩니다.

시간 기반인 이유

악용은 SLEEP()와 같은 SQL 함수를 사용하여 서버 응답 시간에 측정 가능한 차이를 만듭니다.

이를 통해 공격자는 데이터를 직접 보지 않고도 유추할 수 있습니다.

예를 들어 공격자는 다음과 같은 질문을 할 수 있습니다.

  • “첫 번째 문자가 $과 같은가?”
  • “두 번째 문자의 ASCII 값이 77보다 큰가?”
  • “처음 N개의 문자가 이 패턴과 일치하는가?”

이 과정을 반복하여 해시를 문자별로 재구성할 수 있습니다.


악용 방식

표준 추출 로직

표준 접근 방식은 알려진 문자 집합을 반복하며 각 후보를 하나씩 테스트합니다.

대상 해시의 각 위치에 대해:

  1. 한 문자를 대상으로 하는 SQL 조건을 구성합니다.
  2. 추측이 정확한 경우에만 서버 지연을 트리거합니다.
  3. 응답 시간을 측정합니다.
  4. 네트워크 지터로 인한 오탐을 줄이기 위해 동일한 요청을 재전송합니다.
  5. 확인된 문자를 추출된 해시에 추가합니다.
  6. 다음 위치로 이동합니다.

이 방법은 간단하고 신뢰할 수 있지만 문자당 많은 요청이 필요할 수 있어 상대적으로 느립니다.

이진 검색 추출 로직

더 빠른 접근 방식은 각 문자의 ASCII 값에 이진 검색을 사용합니다.

다음과 같이 묻는 대신:

  • “문자가 a와 같은가?”
  • “문자가 b와 같은가?”
  • “문자가 c와 같은가?”

다음과 같이 묻습니다:

  • “ASCII 값이 79보다 큰가?”
  • “55보다 큰가?”
  • “43보다 큰가?”

이렇게 하면 요청마다 검색 공간이 절반으로 줄어들어 HTTP 요청 수가 크게 줄어듭니다.

실제 결과

이 공격을 통해 운영자는 wp_users에서 user_pass 값을 추출할 수 있습니다. 일반적으로 선택한 WordPress 사용자 ID(예:

  • 1 (기본 관리자)
  • 또는 명령줄에서 전달된 다른 ID)

최신 WordPress 버전에서는 이 값이 새로운 WordPress 6.8+ 비밀번호 파이프라인을 사용할 수 있으며, 이는 다음을 결합합니다.

  • HMAC-SHA384를 사용한 사전 해싱 단계,
  • Base64 인코딩,
  • 최종 bcrypt 해시.

포함된 스크립트

1. CVE_2025_4396.py

표준 추출 스크립트입니다.

목적:

고전적인 시간 기반 블라인드 SQL 인젝션을 수행하고 고정 문자 집합에 대한 선형 검색을 사용하여 대상 해시를 문자별로 추출합니다.

주요 특징:

  • 간단하고 이해하기 쉬움,
  • 안정적인 환경에서 신뢰할 수 있음,
  • 이중 확인 로직으로 오탐 감소,
  • 탐지 엔지니어링 및 PoC 시연을 위한 기준선으로 유용함.

작동 방식:

각 문자 위치에 대해:

  • 미리 정의된 문자 집합을 반복,
  • 단일 문자와 일치하는 SQL 조건 구성,
  • 서버 응답 대기,
  • 두 번째 요청으로 적중 확인.

요구 사항:

  • python3
  • requests
  • urllib3

설치:

root@kitploit:~
pip3 install requests urllib3
사용법:
root@kitploit:~
python3 CVE_2025_4396.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
root@kitploit:~
인수:
    -t, --target : 인젝션 가능한 매개변수를 포함한 취약한 대상 URL
    -u, --userid : 대상 WordPress 사용자 ID
    -s, --sleep : 초 단위 지연 임계값
    -v, --verbose : 디버그 로깅 활성화

2. CVE_2025_4396_Stealth.py

이것은 이진 검색 버전입니다.

목적:

표준 스크립트와 동일한 추출 목표를 수행하지만, 선형 문자별 검색을 ASCII 값에 대한 이진 검색으로 대체합니다.

주요 특징:

  • 훨씬 적은 HTTP 요청,
  • 더 작은 네트워크 풋프린트,
  • 오탐 방지를 위한 이중 확인 단계 포함.

작동 방식:

각 위치에 대해:

  • 인쇄 가능한 ASCII 범위를 정의합니다.
  • 중간점을 테스트합니다.
  • 대상 문자가 해당 중간점보다 큰지 질문합니다.
  • 그에 따라 범위를 줄입니다.
  • 정확한 문자가 식별될 때까지 계속합니다.

요구 사항:

  • python3
  • requests
  • urllib3

설치:

root@kitploit:~
pip3 install requests urllib3

사용법:

root@kitploit:~
python3 CVE_2025_4396_Stealth.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v

사용 시기:

  • 대상이 취약한 것으로 확인됨,
  • 지연 시간이 충분히 안정적임,
  • 요청량을 줄이는 것이 목표임.

오프라인 해시 크래킹 워크플로우

WordPress에서 비밀번호 해시를 추출한 후 다음 단계는 오프라인으로 크래킹하는 것입니다.

WordPress 6.8+ 해싱 참고 사항. 테스트 워크플로우에서 추출된 값은 다음과 같을 수 있습니다.

root@kitploit:~
$wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.

Hashcat의 경우 사용 가능한 bcrypt 부분은 다음과 같습니다.

root@kitploit:~
$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.

그러나 이 bcrypt는 원시 비밀번호에 직접 적용되지 않습니다. WordPress는 먼저 전처리 단계를 적용합니다.

  • 후보 비밀번호에 대한 PHP 스타일 trim,
  • 키 wp-sha384를 사용한 HMAC-SHA384,
  • 결과 다이제스트의 Base64 인코딩,
  • 그런 다음 bcrypt 확인.

사전 해싱 단계가 필요한 이유

즉, 정확한 WordPress 6.8+ 로직을 재현하려면 일반 단어 목록을 Hashcat에 직접 보낼 수 없습니다.

대신 각 후보 비밀번호를 먼저 WordPress 호환 사전 해시 표현으로 변환해야 합니다.

저장소에는 다음을 수행하는 "도우미" 스크립트도 포함되어 있습니다.

  • 추출된 해시를 인수로 받음,
  • 필요한 경우 $wp$ 접두사 제거,
  • 제공된 단어 목록을 전처리,
  • 변환된 사전 생성,
  • 선택적으로 매핑 파일 생성,
  • Hashcat을 자동으로 실행,
  • 복구된 사전 해시를 원래 평문 비밀번호로 다시 확인.

일반적인 워크플로우

해시 추출:

  • 예시 결과: $wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.

크래킹 환경 준비:

  • python3
  • hashcat 및 PATH에서 사용 가능

Auto_Crack.py 실행:

root@kitploit:~
python3 Auto_Crack.py -H '\$wp\$2y\$10\$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.' -w /usr/share/wordlists/rockyou.txt
root@kitploit:~
"$"를 "\"로 이스케이프해야 합니다 -> bash 호환성

SOC 탐지 지침

다음 탐지 콘텐츠는 SOC 팀이 악용 시도를 식별하고 방어 성숙도를 측정하는 데 사용할 수 있습니다.

Sigma 탐지

root@kitploit:~
title: 가능한 시간 기반 블라인드 SQLi (CVE-2025-4396 Relevanssi)
id: 5a8a1c93-5c74-4b5b-a620-8e1c3e41ab5d
status: experimental
description: WordPress Relevanssi 플러그인의 CVE-2025-4396을 악용하는 데 자주 사용되는 일반적인 시간 기반 블라인드 SQL 인젝션 페이로드가 포함된 HTTP GET 요청을 탐지합니다(쉼표 필터 우회).
author: n3fhara
date: 2026-03-18
tags:
    - attack.initial_access
    - attack.t1190
    - cve.2025-4396
logsource:
    category: webserver
detection:
    selection_endpoint:
        cs-uri-query|contains:
            - 's='
            - 'cats='
            - 'tags='
    selection_payload:
        cs-uri-query|contains:
            - 'SLEEP('
            - 'WAITFOR'
            - 'SUBSTRING('
            - 'ASCII('
            - 'LENGTH('
    selection_bypass_indicators:
        cs-uri-query|contains:
            - 'FROM'
            - 'FOR 1'
            - '*('
    condition: selection_endpoint and selection_payload and selection_bypass_indicators
falsepositives:
    - 가능성 매우 낮음. 합법적인 검색 쿼리에는 SQL 함수가 포함되지 않아야 합니다.
level: high

Suricata 탐지

root@kitploit:~
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"ET EXPLOIT WordPress Relevanssi SQLi Attempt (CVE-2025-4396)"; flow:established,to_server; content:"GET"; http_method; content:"cats="; http_uri; pcre:"/(cats|tags)=.*(SLEEP|WAITFOR)%28.*(%2A|\*).*SUBSTRING/i"; classtype:web-application-attack; sid:1000001; rev:1; metadata:created_at 2026_03_18, cve CVE_2025_4396;)

SPLUNK 탐지

root@kitploit:~
index=web_logs sourcetype=access_combined 
| regex uri_query="(?i)cats=|tags="
| stats count as request_count, avg(response_time) as avg_time, max(response_time) as max_time, dc(uri_query) as unique_payloads by clientip
| where request_count > 20 AND max_time > 2000
| sort - max_time

KQL 탐지

root@kitploit:~
url.query : (*cats=* OR *tags=* OR *s=*) AND url.query : (*SLEEP* OR *WAITFOR* OR *SUBSTRING* OR *ASCII*) AND url.query : (*FROM* OR *FOR* OR *%2A*)

EQL 탐지

root@kitploit:~
sequence by source.ip with maxspan=1m
  [network where url.path == "/" and url.query : "*cats=*" and event.duration > 2000000000]
  [network where url.path == "/" and url.query : "*cats=*" and event.duration > 2000000000]
  [network where url.path == "/" and url.query : "*cats=*" and event.duration > 2000000000]

탐지 격차 및 권장 사항

위의 기본 탐지는 난독화되지 않은 악용에는 좋지만, 운영자가 더 고급 기법을 도입하면 약해집니다.

공격자가 다음을 사용하기 시작하면 SOC 가시성이 저하됩니다.

  • 명백한 함수 대신 대체 SQL 함수,
  • URL 인코딩 및 주석 기반 난독화,
  • 이진 검색을 통한 요청량 감소,
  • 지터 및 저속 타이밍,
  • 프록시 순환,
  • 브라우저 가장.

SOC를 위한 추가 탐지 아이디어:

  • 비정상적으로 느린 검색 트래픽 탐지,
  • 다음 조건에서 WordPress 검색 엔드포인트에 대한 요청 모니터링:
    • 응답 시간이 반복적으로 증가,
    • 동일한 클라이언트가 많은 검색 요청 수행,
    • 동일한 엔드포인트가 시간이 지남에 따라 비정상적인 지연 패턴 표시.
  • 인코딩된 연산자가 포함된 검색 매개변수에 대한 경고,
  • 명백한 SQL 키워드가 보이지 않더라도 다음 조합을 포함하는 검색 매개변수:
    • 인코딩된 비교 연산자,
    • 의심스러운 괄호 밀도,
    • 반복되는 숫자 논리,
    • 또는 심하게 URL 인코딩된 쿼리 문자열.
  • 소스 IP뿐만 아니라 엔드포인트별로 상관 분석,
  • 공격자가 프록시를 순환하면 IP 상관 관계가 약해집니다. 탐지는 다음에도 초점을 맞춰야 합니다.
    • 동일한 엔드포인트에 대한 반복 액세스,
    • 반복되는 지연 응답,
    • 동일한 WordPress 페이지를 대상으로 하는 반복되는 변형 검색 쿼리.
  • 장기 창 행동 탐지 사용:
    • 30분,
    • 1시간,
    • 또는 여러 시간 창.
  • 데이터베이스 측면 느린 쿼리 모니터링

저장소 구조

root@kitploit:~
.
├── CVE_2025_4396.py
├── CVE_2025_4396_Stealth.py
├── Auto_Crack.py
├── README.md
└── relevanssi.4.24.4.zip

법적 고지

명시적으로 테스트가 허가된 환경에서만 사용하십시오. 저자와 기여자는 오용에 대해 책임을 지지 않습니다.

면책 조항
이 프로젝트는 교육, 방어적 검증, 그리고 승인된 보안 테스트용으로만 제공됩니다.
소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 사용하지 마십시오.

도구 다운로드