
이 저장소는 `cats` 매개변수를 통해 WordPress Relevanssi 플러그인에 영향을 미치는 인증되지 않은 시간 기반 블라인드 SQL 인젝션인 CVE-2025-4396에 대한 실용적인 연구 및 검증 툴킷을 포함합니다.
이 저장소는 WordPress Relevanssi 플러그인의 cats 매개변수에 영향을 미치는 인증되지 않은 시간 기반 블라인드 SQL 인젝션인 CVE-2025-4396에 대한 실용적인 연구 및 검증 툴킷을 포함합니다.
이 프로젝트는 허가된 Purple Team 엔진을 위해 제작되었으며, 다음 목적을 수행합니다.
저장소에 포함된 항목:
면책 조항
이 프로젝트는 교육, 방어적 검증, 그리고 승인된 보안 테스트용으로만 제공됩니다.
소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 사용하지 마십시오.
CVE-2025-4396은 WordPress의 Relevanssi 검색 기능에 영향을 미치는 SQL 인젝션 취약점입니다.
테스트 시나리오에서 이 문제는 검색 워크플로우, 특히 cats 매개변수를 통해 접근 가능합니다. 취약한 코드 경로는 공격자가 제어하는 입력이 플러그인에 의해 생성된 SQL 쿼리에 영향을 미칠 수 있도록 합니다.
취약한 엔드포인트는 사전 인증 없이 액세스할 수 있으므로, 원격 공격자가 인증되지 않은 SQL 인젝션을 수행할 수 있습니다.
실질적인 영향은 다음과 같습니다.
취약점은 사용자가 제어하는 검색 관련 매개변수 입력이 SQL 쿼리에 포함되기 전에 안전하게 처리되지 않기 때문에 발생합니다.
실제로 공격자는 백엔드 쿼리 로직에 SQL 표현식을 삽입하고 데이터베이스가 추가 조건을 평가하도록 강제할 수 있습니다.
취약점은 블라인드 모드로 악용됩니다. 즉, 애플리케이션이 SQL 오류나 원시 데이터베이스 결과를 직접 표시하지 않습니다.
공격자는 페이지에서 쿼리 출력을 읽는 대신 데이터베이스에 일련의 참/거짓 질문을 하고 부작용을 관찰합니다.
악용은 SLEEP()와 같은 SQL 함수를 사용하여 서버 응답 시간에 측정 가능한 차이를 만듭니다.
이를 통해 공격자는 데이터를 직접 보지 않고도 유추할 수 있습니다.
예를 들어 공격자는 다음과 같은 질문을 할 수 있습니다.
$과 같은가?”이 과정을 반복하여 해시를 문자별로 재구성할 수 있습니다.
표준 접근 방식은 알려진 문자 집합을 반복하며 각 후보를 하나씩 테스트합니다.
대상 해시의 각 위치에 대해:
이 방법은 간단하고 신뢰할 수 있지만 문자당 많은 요청이 필요할 수 있어 상대적으로 느립니다.
더 빠른 접근 방식은 각 문자의 ASCII 값에 이진 검색을 사용합니다.
다음과 같이 묻는 대신:
a와 같은가?”b와 같은가?”c와 같은가?”다음과 같이 묻습니다:
이렇게 하면 요청마다 검색 공간이 절반으로 줄어들어 HTTP 요청 수가 크게 줄어듭니다.
이 공격을 통해 운영자는 wp_users에서 user_pass 값을 추출할 수 있습니다. 일반적으로 선택한 WordPress 사용자 ID(예:
1 (기본 관리자)최신 WordPress 버전에서는 이 값이 새로운 WordPress 6.8+ 비밀번호 파이프라인을 사용할 수 있으며, 이는 다음을 결합합니다.
CVE_2025_4396.py표준 추출 스크립트입니다.
고전적인 시간 기반 블라인드 SQL 인젝션을 수행하고 고정 문자 집합에 대한 선형 검색을 사용하여 대상 해시를 문자별로 추출합니다.
각 문자 위치에 대해:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
인수:
-t, --target : 인젝션 가능한 매개변수를 포함한 취약한 대상 URL
-u, --userid : 대상 WordPress 사용자 ID
-s, --sleep : 초 단위 지연 임계값
-v, --verbose : 디버그 로깅 활성화
CVE_2025_4396_Stealth.py이것은 이진 검색 버전입니다.
표준 스크립트와 동일한 추출 목표를 수행하지만, 선형 문자별 검색을 ASCII 값에 대한 이진 검색으로 대체합니다.
각 위치에 대해:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396_Stealth.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
WordPress에서 비밀번호 해시를 추출한 후 다음 단계는 오프라인으로 크래킹하는 것입니다.
WordPress 6.8+ 해싱 참고 사항. 테스트 워크플로우에서 추출된 값은 다음과 같을 수 있습니다.
$wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.
Hashcat의 경우 사용 가능한 bcrypt 부분은 다음과 같습니다.
$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.
그러나 이 bcrypt는 원시 비밀번호에 직접 적용되지 않습니다. WordPress는 먼저 전처리 단계를 적용합니다.
wp-sha384를 사용한 HMAC-SHA384,즉, 정확한 WordPress 6.8+ 로직을 재현하려면 일반 단어 목록을 Hashcat에 직접 보낼 수 없습니다.
대신 각 후보 비밀번호를 먼저 WordPress 호환 사전 해시 표현으로 변환해야 합니다.
저장소에는 다음을 수행하는 "도우미" 스크립트도 포함되어 있습니다.
$wp$ 접두사 제거,해시 추출:
$wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.크래킹 환경 준비:
python3hashcat 및 PATH에서 사용 가능Auto_Crack.py 실행:
python3 Auto_Crack.py -H '\$wp\$2y\$10\$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.' -w /usr/share/wordlists/rockyou.txt
"$"를 "\"로 이스케이프해야 합니다 -> bash 호환성
다음 탐지 콘텐츠는 SOC 팀이 악용 시도를 식별하고 방어 성숙도를 측정하는 데 사용할 수 있습니다.
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
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;)
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
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*)
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 가시성이 저하됩니다.
.
├── CVE_2025_4396.py
├── CVE_2025_4396_Stealth.py
├── Auto_Crack.py
├── README.md
└── relevanssi.4.24.4.zip
명시적으로 테스트가 허가된 환경에서만 사용하십시오. 저자와 기여자는 오용에 대해 책임을 지지 않습니다.
면책 조항
이 프로젝트는 교육, 방어적 검증, 그리고 승인된 보안 테스트용으로만 제공됩니다.
소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 사용하지 마십시오.