
Dieses Repository enthält ein praktisches Forschungs- und Validierungs-Toolkit für CVE-2025-4396, eine nicht authentifizierte zeitbasierte Blind-SQL-Injection, die das WordPress-Plugin Relevanssi über den Parameter `cats` betrifft.
Dieses Repository enthält einen praktischen Forschungs- und Validierungs-Werkzeugkasten für CVE-2025-4396, eine nicht authentifizierte zeitbasierte Blind-SQL-Injection, die das WordPress-Plugin Relevanssi über den cats-Parameter betrifft.
Das Projekt wurde für autorisierte Purple-Team-Einsätze entwickelt, um:
Das Repository enthält:
Haftungsausschluss
Dieses Projekt dient ausschließlich zu Bildungszwecken, zur defensiven Validierung und für autorisierte Sicherheitstests.
Verwenden Sie es nicht gegen Systeme, die Sie nicht besitzen oder für deren Bewertung Sie keine ausdrückliche schriftliche Genehmigung haben.
CVE-2025-4396 ist eine SQL-Injection-Schwachstelle, die die Relevanssi-Suchfunktion in WordPress betrifft.
Im getesteten Szenario ist das Problem über den Suchworkflow erreichbar, genauer gesagt über den cats-Parameter.
Der anfällige Codepfad ermöglicht es, dass vom Angreifer kontrollierte Eingaben die vom Plugin generierte SQL-Abfrage beeinflussen.
Da der anfällige Endpunkt ohne vorherige Authentifizierung zugänglich ist, kann der Fehler von einem entfernten Angreifer ausgenutzt werden, um eine nicht authentifizierte SQL-Injection durchzuführen.
Die praktischen Auswirkungen umfassen:
Die Schwachstelle besteht, weil eine vom Benutzer kontrollierte Eingabe aus einem suchbezogenen Parameter nicht sicher behandelt wird, bevor sie in eine SQL-Abfrage eingebunden wird.
In der Praxis bedeutet dies, dass ein Angreifer SQL-Ausdrücke in die Backend-Abfragelogik einschleusen und die Datenbank zwingen kann, zusätzliche Bedingungen auszuwerten.
Die Schwachstelle wird im blinden Modus ausgenutzt, was bedeutet, dass die Anwendung SQL-Fehler oder rohe Datenbankergebnisse nicht direkt anzeigt.
Statt das Abfrageergebnis von der Seite zu lesen, stellt der Angreifer der Datenbank eine Reihe von Wahr/Falsch-Fragen und beobachtet einen Nebeneffekt:
Die Ausnutzung stützt sich auf SQL-Funktionen wie SLEEP(), um einen messbaren Unterschied in der Serverantwortzeit zu erzeugen.
Dies ermöglicht es einem Angreifer, Daten abzuleiten, ohne sie jemals direkt zu sehen.
Zum Beispiel kann der Angreifer Fragen stellen wie:
$?“Durch Wiederholen dieses Prozesses kann der Angreifer einen vollständigen Hash Zeichen für Zeichen rekonstruieren.
Der Standardansatz iteriert durch einen bekannten Zeichensatz und testet jeden Kandidaten einzeln.
Für jede Position im Ziel-Hash:
Diese Methode ist einfach und zuverlässig, aber relativ langsam, da sie viele Anfragen pro Zeichen erfordern kann.
Der schnellere Ansatz verwendet die Binärsuche auf dem ASCII-Wert jedes Zeichens.
Statt zu fragen:
a?“b?“c?“fragt er:
Dies halbiert den Suchraum bei jeder Anfrage und reduziert die Anzahl der HTTP-Anfragen drastisch.
Der Angriff ermöglicht es dem Betreiber, den user_pass-Wert aus wp_users zu extrahieren, typischerweise für eine gewählte WordPress-Benutzer-ID wie:
1 für den Standard-Administrator,In neueren WordPress-Versionen kann dieser Wert die neue WordPress 6.8+-Passwort-Pipeline verwenden, die Folgendes kombiniert:
CVE_2025_4396.pyDies ist das Standard-Extraktionsskript.
Es führt eine klassische zeitbasierte Blind-SQL-Injection durch und extrahiert den Ziel-Hash Zeichen für Zeichen mittels einer linearen Suche über einen festen Zeichensatz.
Für jede Zeichenposition:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
Arguments :
-t, --target : anfällige Ziel-URL einschließlich des injizierbaren Parameters
-u, --userid : anzugreifende WordPress-Benutzer-ID
-s, --sleep : Schwellwert für die Verzögerung in Sekunden
-v, --verbose : Debug-Logging aktivieren
CVE_2025_4396_Stealth.pyDies ist die Binärsuch-Version.
Es verfolgt das gleiche Extraktionsziel wie das Standard-Skript, ersetzt jedoch die lineare Zeichen-für-Zeichen-Suche durch eine Binärsuche auf ASCII-Werte.
Für jede Position:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396_Stealth.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
Sobald der Passwort-Hash aus WordPress extrahiert wurde, besteht der nächste Schritt darin, ihn offline zu knacken.
Hinweise zum Hashing in WordPress 6.8+. Im getesteten Workflow kann der extrahierte Wert wie folgt aussehen:
$wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.
Für Hashcat ist der verwendbare bcrypt-Teil:
$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.
Dieser bcrypt wird jedoch nicht direkt auf das rohe Passwort angewendet. WordPress wendet zunächst eine Vorverarbeitungsstufe an:
Das bedeutet, dass eine normale Wortliste nicht direkt an Hashcat gesendet werden kann, wenn Sie die genaue WordPress 6.8+-Logik reproduzieren möchten.
Stattdessen muss jedes Kandidatenpasswort zunächst in seine WordPress-kompatible Vor-Hash-Darstellung transformiert werden.
Das Repository enthält auch ein "Hilfsskript", das:
$wp$-Präfix entfernt,Hash extrahieren:
$wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.Knack-Umgebung vorbereiten:
python3hashcat und im PATH verfügbarFühren Sie Auto_Crack.py aus:
python3 Auto_Crack.py -H '\$wp\$2y\$10\$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.' -w /usr/share/wordlists/rockyou.txt
Wir müssen "$" mit "\" escapen -> Bash-Kompatibilität
Der folgende Erkennungsinhalt kann von SOC-Teams verwendet werden, um Ausnutzungsversuche zu identifizieren und den defensiven Reifegrad zu messen.
title: Potential Time-Based Blind SQLi (CVE-2025-4396 Relevanssi)
id: 5a8a1c93-5c74-4b5b-a620-8e1c3e41ab5d
status: experimental
description: Detects HTTP GET requests containing typical Time-Based Blind SQL injection payloads often used to exploit CVE-2025-4396 in the WordPress Relevanssi plugin (bypassing comma filters).
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:
- Highly unlikely. Legitimate search queries should not contain SQL functions.
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]
Die obigen Basis-Erkennungen sind gut für nicht verschleierte Ausnutzung, werden jedoch schwächer, wenn ein Betreiber fortschrittlichere Taktiken einführt.
Die SOC-Sichtbarkeit verschlechtert sich, wenn der Angreifer beginnt, Folgendes zu verwenden:
.
├── CVE_2025_4396.py
├── CVE_2025_4396_Stealth.py
├── Auto_Crack.py
├── README.md
└── relevanssi.4.24.4.zip
Nur in Umgebungen verwenden, in denen Sie ausdrücklich zum Testen berechtigt sind. Die Autoren und Mitwirkenden übernehmen keine Haftung für Missbrauch.
Haftungsausschluss
Dieses Projekt wird ausschließlich zu Bildungszwecken, zur defensiven Validierung und für autorisierte Sicherheitstests bereitgestellt.
Verwenden Sie es nicht gegen Systeme, die Sie nicht besitzen oder für deren Bewertung Sie keine ausdrückliche schriftliche Genehmigung haben.