
Questo repository contiene un toolkit pratico di ricerca e validazione per CVE-2025-4396, una SQL injection cieca basata sul tempo non autenticata che colpisce il plugin WordPress Relevanssi tramite il parametro `cats`.
Questa repository contiene un toolkit pratico di ricerca e validazione per CVE-2025-4396, una SQL Injection Blind basata sul tempo non autenticata che colpisce il plugin WordPress Relevanssi tramite il parametro cats.
Il progetto è stato realizzato per esercitazioni Purple Team autorizzate al fine di:
La repository include:
Disclaimer
Questo progetto è fornito esclusivamente a scopo didattico, di validazione difensiva e di test di sicurezza autorizzati.
Non utilizzarlo contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta a valutare.
CVE-2025-4396 è una vulnerabilità di SQL Injection che colpisce la funzionalità di ricerca Relevanssi in WordPress.
Nello scenario testato, il problema è raggiungibile tramite il flusso di ricerca e più specificamente attraverso il parametro cats. Il percorso di codice vulnerabile consente a input controllati dall'attaccante di influenzare la query SQL generata dal plugin.
Poiché l'endpoint vulnerabile è accessibile senza autenticazione preventiva, la falla può essere sfruttata da un attaccante remoto per eseguire una SQL injection non autenticata.
L'impatto pratico include:
La vulnerabilità esiste perché l'input controllato dall'utente proveniente da un parametro correlato alla ricerca non viene gestito in modo sicuro prima di essere incorporato in una query SQL.
In pratica, ciò significa che un attaccante può iniettare espressioni SQL nella logica delle query del backend e costringere il database a valutare condizioni aggiuntive.
La vulnerabilità viene sfruttata in modalità blind (cieca), il che significa che l'applicazione non mostra direttamente errori SQL o risultati grezzi del database.
Invece di leggere l'output della query dalla pagina, l'attaccante pone al database una serie di domande vero/falso e osserva un effetto collaterale:
Lo sfruttamento si basa su funzioni SQL come SLEEP() per creare una differenza misurabile nel tempo di risposta del server.
Ciò consente a un attaccante di dedurre i dati senza mai vederli direttamente.
Ad esempio, l'attaccante può porre domande come:
$?"Ripetendo questo processo, l'attaccante può ricostruire un intero hash carattere per carattere.
L'approccio standard scorre un set di caratteri noto e testa ogni candidato uno per uno.
Per ogni posizione nell'hash target:
Questo metodo è semplice e affidabile, ma relativamente lento perché può richiedere molte richieste per carattere.
L'approccio più veloce usa la ricerca binaria sul valore ASCII di ogni carattere.
Invece di chiedere:
a?"b?"c?"chiede:
Questo divide lo spazio di ricerca a metà a ogni richiesta e riduce drasticamente il numero di richieste HTTP.
L'attacco consente all'operatore di estrarre il valore user_pass da wp_users, tipicamente per un ID utente WordPress scelto come:
1 per l'amministratore predefinito,Nelle versioni recenti di WordPress, questo valore può utilizzare il nuovo pipeline di password WordPress 6.8+, che combina:
CVE_2025_4396.pyQuesto è lo script di estrazione standard.
Esegue una classica SQL Injection Blind basata sul tempo ed estrae l'hash target carattere per carattere usando una ricerca lineare su un charset fisso.
Per ogni posizione del carattere:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
Arguments :
-t, --target : vulnerable target URL including the injectable parameter
-u, --userid : WordPress user ID to target
-s, --sleep : sleep threshold in seconds
-v, --verbose : enable debug logging
CVE_2025_4396_Stealth.pyQuesta è l'edizione con ricerca binaria.
Esegue lo stesso obiettivo di estrazione dello script standard, ma sostituisce la ricerca lineare carattere per carattere con una ricerca binaria sui valori ASCII.
Per ogni posizione:
python3requestsurllib3pip3 install requests urllib3
python3 CVE_2025_4396_Stealth.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v
Una volta estratto l'hash della password da WordPress, il passo successivo è craccarlo offline.