
C'è una vulnerabilità di SQL injection nel backend di Ruoyi v4.8.3
filterKeywordAutorizzazione richiesta / Solo test autorizzati
Questo repository è destinato esclusivamente alla ricerca sulla sicurezza e a test autorizzati. Non utilizzarlo contro sistemi senza esplicita autorizzazione.
Questo repository è destinato esclusivamente alla ricerca sulla sicurezza e a test espressamente autorizzati. Non utilizzarlo su sistemi non autorizzati.
L'endpoint /tool/gen/createTable del modulo di generazione codice di RuoYi v4.8.3 accetta SQL di creazione tabelle da parte di utenti backend autenticati. L'endpoint chiama SqlUtil.filterKeyword() per bloccare parole chiave SQL pericolose. Tuttavia, l'implementazione rimuove tutti gli spazi bianchi dall'input prima di confrontare le voci della blacklist che contengono spazi finali, come select , insert e drop . Di conseguenza, tali voci non possono corrispondere all'input normalizzato.
Un'istruzione CREATE TABLE ... AS SELECT ... (CTAS) può superare il controllo di tipo MySqlCreateTableStatement di Druid pur eseguendo una SELECT. Un attaccante con una sessione backend valida può sfruttare questo comportamento per un'iniezione SQL booleana cieca, estrarre dati sensibili e creare tabelle.
JSESSIONID valido e autenticato per il backend.Lo script recupera l'hash della password e il salt dell'utente admin dalla tabella sys_user utilizzando il seguente oracolo:
login_name, password e salt.SUBSTRING()./tool/gen/list.requests, urllib3Installa le dipendenze:
python -m pip install requests urllib3
Apri exp.py e sostituisci le due righe seguenti nella sezione di configurazione nella parte superiore del file:
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"
Dove:
TARGET è l'URL base di RuoYi da testare, ad esempio http://127.0.0.1:8080.COOKIE è una sessione JSESSIONID valida e autenticata del backend.Dopo aver sostituito l'URL e la sessione, esegui:
python exp.py
Lo script crea una tabella intermedia e molte tabelle di test booleano nel database target. Utilizzalo solo in un ambiente isolato o espressamente autorizzato e chiedi all'amministratore del database di rimuovere le tabelle generate dopo il test.
exp.png mostra una verifica riuscita in un ambiente locale autorizzato:

filterKeyword(), ma non considerarla come l'unico controllo di sicurezza.L'endpoint /tool/gen/createTable del modulo di generazione codice di RuoYi v4.8.3 accetta SQL di creazione tabelle da parte di utenti backend autenticati. L'endpoint chiama SqlUtil.filterKeyword() per bloccare parole chiave SQL pericolose. Tuttavia, l'implementazione rimuove tutti gli spazi bianchi dall'input prima di confrontare le voci della blacklist che contengono spazi finali, come select , insert e drop . Di conseguenza, tali voci non possono corrispondere all'input normalizzato.
Un'istruzione CREATE TABLE ... AS SELECT ... (CTAS) può superare il controllo di tipo MySqlCreateTableStatement di Druid pur eseguendo una SELECT. Un attaccante con una sessione backend valida può sfruttare questo comportamento per un'iniezione SQL booleana cieca, estrarre dati sensibili e creare tabelle.
JSESSIONID valido e autenticato per il backend.Lo script recupera l'hash della password e il salt dell'utente admin dalla tabella sys_user utilizzando il seguente oracolo:
login_name, password e salt.SUBSTRING()./tool/gen/list.requests, urllib3Installa le dipendenze:
python -m pip install requests urllib3
Apri exp.py e sostituisci le due righe seguenti nella sezione di configurazione nella parte superiore del file:
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"
Dove:
TARGET è l'URL base di RuoYi da testare, ad esempio http://127.0.0.1:8080.COOKIE è una sessione JSESSIONID valida e autenticata del backend.Dopo aver sostituito l'URL e la sessione, esegui:
python exp.py
Lo script crea una tabella intermedia e molte tabelle di test booleano nel database target. Utilizzalo solo in un ambiente isolato o espressamente autorizzato e chiedi all'amministratore del database di rimuovere le tabelle generate dopo il test.
exp.png mostra una verifica riuscita in un ambiente locale autorizzato:

filterKeyword(), ma non considerarla come l'unico controllo di sicurezza.exp.py - script di verifica / script di verificaexp.png - screenshot di verifica riuscita / screenshot di verifica riuscitaREADME.md - documentazione bilingue della vulnerabilità / documentazione bilingue della vulnerabilità