Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-57521-RuoYi-SQLi — Auditoría estática de código de CVE-2024-57521, una inyección SQL autenticada en el módulo generador de RuoYi-Vue, con análisis de origen a destino y una PoC de omisión del filtro %0b. | Kitploit
Herramientas/GitHubGitHub/xs2024770/cve-2024-57521-ruoyi-sqli
Análisis Estático de Código (SAST)Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPapers e InvestigaciónAprendizaje y Educación
GitHubxs2024770/cve-2024-57521-ruoyi-sqli

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2024-57521-RuoYi-SQLi

Auditoría estática de código de CVE-2024-57521, una inyección SQL autenticada en el módulo generador de RuoYi-Vue, con análisis de origen a destino y una PoC de omisión del filtro %0b.

Ver Repositorio
hace 10h 5mAún no revisado

🛡️ CVE-2024-57521 Notas de auditoría de la vulnerabilidad de inyección SQL autenticada en RuoYi-Vue

0. Declaración del proyecto

Este repositorio está destinado únicamente a fines de investigación de seguridad y educación. No utilice las técnicas descritas en este documento para realizar ataques no autorizados. Todas las pruebas se completaron en un entorno local de auditoría estática de código.


1. Resumen de la vulnerabilidad

  • ID de CVE: CVE-2024-57521
  • Componente afectado: Sistema de gestión de permisos RuoYi-Vue (módulo ruoyi-generator)
  • Versiones afectadas: <= v4.7.9
  • Tipo de vulnerabilidad: Inyección SQL autenticada (inyección ciega booleana / CWE-89)
  • Puntuación CVSS: 10.0 (Crítica)
  • Método de auditoría: Auditoría puramente estática de código (análisis de código fuente)

2. Análisis de auditoría del flujo de datos (Source → Filter → Sink)

2.1 Source (punto de entrada de datos del usuario)

  • Ubicación del archivo: ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java

Código clave:

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

Análisis: Un administrador del backend puede pasar cualquier sentencia SQL de creación de tablas a través del parámetro sql de una solicitud HTTP POST. El punto de entrada no impone restricciones suficientes sobre la entrada del usuario y la entrega directamente al filtro posterior para su procesamiento.

Evidencia en captura de pantalla: 03-SqlUtil-filterKeyword

2.2 Filter (defecto fatal del filtro)

· Ubicación del archivo: ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java

Código del defecto central:

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 + ",可能存在安全风险");
    }
}

Análisis del defecto: El filtro primero ejecuta replaceAll("\p{Z}|\s", "") eliminando todos los caracteres de espacio en blanco de la entrada. Sin embargo, las palabras clave en la lista negra SQL_REGEX (como "and ", "select ") tienen espacios finales. Esto hace que la coincidencia falle inevitablemente; basta con que el atacante use %0b (tabulador vertical) en lugar de un espacio después de la palabra clave para eludir perfectamente la comprobación de la lista negra.

Evidencia en captura de pantalla:

02-SqlUtil-SQL_REGEX 01-GenController-createTableSave

2.3 Sink (punto peligroso)

· Ubicación del archivo: ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

Código clave:

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

Análisis: En MyBatis, ${} concatena cadenas directamente en lugar de usar el precompilado seguro #{} . Esto provoca que el SQL malicioso que ya eludió el filtro se envíe a la base de datos para su ejecución. Esta es una vulnerabilidad típica de la combinación "filtrado por lista negra + concatenación insegura".

Evidencia en captura de pantalla:

04-GenTableMapper-createTable

3. Lógica del PoC e ideas de explotación

3.1 Técnica de elusión

· Método: El atacante usa %0b (el tabulador vertical de MySQL, que entra dentro del rango de coincidencia de \s) en lugar de los espacios en la sentencia SQL.

3.2 Análisis de la cadena de ejecución completa

  1. Se envía por HTTP un Payload con %0b: CREATE table xxx as SELECT%0b111 FROM sys_job WHERE 1=0 AND%0bIF(<condición>, 1, 1/0);
  2. El Payload entra en el método filterKeyword, %0b coincide con \s y se elimina, la cadena se convierte en select111 y andIF.
  3. Dado que la lista negra es "select " (con espacio), "select111".indexOf("select ") devuelve -1, eludiendo con éxito la intercepción de la lista negra.
  4. El parámetro peligroso entra en MyBatis, ${sql} lo concatena a la base de datos.
  5. Al analizar MySQL, %0b se considera un carácter de espacio en blanco válido, y el SQL se inyecta y ejecuta con éxito.

3.3 Ideas de automatización de inyección ciega

· Principio de detección: Se utiliza IF(<condición>, 1, 1/0) como detector de inyección ciega booleana. · Condición falsa: Se desencadena un error de división por cero, el servidor devuelve HTTP 500. · Condición verdadera: Normal, sin error. · Método de extracción: Usando búsqueda binaria se pueden adivinar los datos de la base de datos bit a bit.


4. Resumen y recomendaciones de corrección

4.1 Resumen de las causas de la vulnerabilidad

Esta vulnerabilidad es una elusión típica causada por una "corrección incompleta". El desarrollador introdujo un mecanismo de lista negra al corregir una inyección SQL similar anterior, pero pasó por alto que la lista negra depende de los espacios, y la lógica previa de eliminación de espacios destruye las condiciones de coincidencia de la lista negra, lo que finalmente provoca una nueva elusión (CVE-2024-57521).

4.2 Recomendaciones de corrección

· Abolir el mecanismo de lista negra: No dependa de listas negras; el mecanismo de lista blanca es la base de la seguridad. · Usar precompilación: Cambiar ${sql} en MyBatis por el método precompilado #{} . Si es imprescindible pasar SQL dinámico (como creación de tablas, Order By), se debe usar un análisis estricto de árbol de sintaxis abstracta (AST) o una validación estricta de parámetros. · Mejorar el filtro: Si es imprescindible usar una lista negra, se deben eliminar los espacios finales de las palabras clave de la lista negra y realizar una normalización unificada antes de la comparación (como convertir todo a minúsculas, reemplazar %0b, etc. por espacios).


5. Enlaces de referencia

· NVD - CVE-2024-57521 · Repositorio de RuoYi-Vue en Gitee

Descargar herramienta