Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2024-57521-RuoYi-SQLi — Audit statico del codice di CVE-2024-57521, un'iniezione SQL autenticata nel modulo generator di RuoYi-Vue, con analisi source-to-sink e un PoC di bypass del filtro %0b. | Kitploit
Strumenti/GitHubGitHub/xs2024770/cve-2024-57521-ruoyi-sqli
Analisi Statica del Codice (SAST)Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPaper e RicercaApprendimento e Formazione
GitHubxs2024770/cve-2024-57521-ruoyi-sqli

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2024-57521-RuoYi-SQLi

Audit statico del codice di CVE-2024-57521, un'iniezione SQL autenticata nel modulo generator di RuoYi-Vue, con analisi source-to-sink e un PoC di bypass del filtro %0b.

Vedi Repository
9h 27m faNon ancora revisionato

🛡️ CVE-2024-57521 Note di audit della vulnerabilità SQL injection post-autenticazione in RuoYi-Vue

0. Dichiarazione del progetto

Questo repository è destinato esclusivamente a scopi di ricerca sulla sicurezza e didattici. Non utilizzare le tecniche contenute in questo documento per condurre attacchi non autorizzati. Tutti i test sono stati completati in un ambiente locale di audit statico del codice.


1. Panoramica della vulnerabilità

  • ID CVE: CVE-2024-57521
  • Componente interessato: Sistema di gestione dei permessi RuoYi-Vue (modulo ruoyi-generator)
  • Versioni interessate: <= v4.7.9
  • Tipo di vulnerabilità: SQL injection post-autenticazione (blind injection booleana / CWE-89)
  • Punteggio CVSS: 10.0 (Critical)
  • Metodo di audit: Audit statico puro del codice (analisi del codice sorgente)

2. Analisi dell'audit del flusso di dati (Source → Filter → Sink)

2.1 Source (punto di ingresso dell'input utente)

  • Posizione del file: ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java

Codice chiave:

root@kitploit:~
@PostMapping("/createTable")
public AjaxResult createTableSave(@RequestParam("sql") String sql, @RequestParam("tplWebType") String tplWebType)
{
    try
    {
        SqlUtil.filterKeyword(sql); // 在进入业务前调用过滤器

Analisi: l'amministratore del backend può passare istruzioni arbitrarie di creazione tabelle del database tramite il parametro sql di una richiesta HTTP POST. Il punto di ingresso non applica restrizioni sufficienti all'input dell'utente e lo passa direttamente al filtro successivo.

Prova tramite screenshot: 03-SqlUtil-filterKeyword

2.2 Filter (difetto fatale del filtro)

· Posizione del file: ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java

Codice del difetto principale:

root@kitploit:~
// 第16行:黑名单定义,注意关键词带有【尾随空格】
public static String SQL_REGEX = "\u0008|%0A|and |extractvalue|updatexml|sleep|information_schema|exec...";

// 第61-66行:过滤逻辑
String normalizedValue = value.replaceAll("\\p{Z}|\\s", ""); // 先清空了输入里的所有空格
String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|");
for (String sqlKeyword : sqlKeywords)
{
    if (StringUtils.indexOfIgnoreCase(normalizedValue, sqlKeyword) > -1)
    {
        throw new UtilException("请求参数包含敏感关键词" + sqlKeyword + ",可能存在安全风险");
    }
}

Analisi del difetto: il filtro esegue prima replaceAll("\p{Z}|\s", "") rimuovendo tutti i caratteri di spaziatura dall'input. Tuttavia, le parole chiave nella blacklist SQL_REGEX (come "and ", "select ") contengono uno spazio finale. Questo fa sì che la corrispondenza fallisca inevitabilmente: è sufficiente che l'attaccante utilizzi %0b (carattere di tabulazione verticale) al posto dello spazio dopo la parola chiave per aggirare perfettamente il controllo della blacklist.

Prova tramite screenshot:

02-SqlUtil-SQL_REGEX 01-GenController-createTableSave

2.3 Sink (punto pericoloso)

· Posizione del file: ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

Codice chiave:

root@kitploit:~
<update id="createTable">
    ${sql}
</update>

Analisi: in MyBatis, ${} concatena direttamente le stringhe, invece di utilizzare la precompilazione sicura #{} . Ciò fa sì che l'SQL malevolo che ha aggirato il filtro venga inviato al database per l'esecuzione. Questa è una tipica vulnerabilità combinata di "filtro blacklist + concatenazione non sicura".

Prova tramite screenshot:

04-GenTableMapper-createTable

3. Logica del PoC e strategia di sfruttamento

3.1 Tecnica di bypass

· Metodo: l'attaccante utilizza %0b (il carattere di tabulazione verticale di MySQL, che rientra nell'ambito di corrispondenza di \s) al posto degli spazi nelle istruzioni SQL.

3.2 Analisi della catena di esecuzione completa

  1. Invio HTTP di un Payload contenente %0b: CREATE table xxx as SELECT%0b111 FROM sys_job WHERE 1=0 AND%0bIF(, 1, 1/0);
  2. Il Payload entra nel metodo filterKeyword, %0b viene corrisposto da \s e rimosso, la stringa diventa select111 e andIF.
  3. Poiché la blacklist contiene "select " (con spazio), "select111".indexOf("select ") restituisce -1, aggirando con successo l'intercettazione della blacklist.
  4. Il parametro pericoloso entra in MyBatis, ${sql} lo concatena nel database.
  5. Durante l'analisi di MySQL, %0b viene considerato un carattere di spaziatura valido, e l'SQL viene iniettato ed eseguito con successo.

3.3 Strategia di automazione della blind injection

· Principio di rilevamento: utilizzare IF(, 1, 1/0) come rilevatore per la blind injection booleana. · Condizione falsa: attiva un errore di divisione per zero, il server restituisce HTTP 500. · Condizione vera: normale, nessun errore. · Metodo di estrazione: utilizzando la bisezione è possibile indovinare i dati del database bit per bit.


4. Conclusioni e raccomandazioni di correzione

4.1 Sintesi delle cause della vulnerabilità

Questa vulnerabilità è un tipico bypass causato da una "correzione incompleta". Durante la correzione di una precedente SQL injection dello stesso tipo, gli sviluppatori hanno introdotto un meccanismo di blacklist, ma hanno trascurato che la blacklist dipende dagli spazi, e la logica preliminare di rimozione degli spazi compromette le condizioni di corrispondenza della blacklist, causando infine un nuovo bypass (CVE-2024-57521).

4.2 Raccomandazioni di correzione

· Abolire il meccanismo di blacklist: non fare affidamento sulla blacklist, il meccanismo di whitelist è la base della sicurezza. · Utilizzare la precompilazione: modificare ${sql} in MyBatis in modalità di precompilazione #{} . Se è necessario passare SQL in modo dinamico (come creazione di tabelle, Order By), si dovrebbe utilizzare un'analisi rigorosa dell'albero sintattico astratto (AST) o una rigorosa validazione dei parametri. · Migliorare il filtro: se è indispensabile utilizzare una blacklist, è necessario rimuovere gli spazi finali dalle parole chiave della blacklist e uniformare la normalizzazione prima del confronto (ad esempio convertire tutto in minuscolo, sostituire %0b e simili con spazi).


5. Link di riferimento

· NVD - CVE-2024-57521 · Repository Gitee di RuoYi-Vue

Scarica lo strumento