1. Troncare il contenuto della query
Nel caso in cui desideri ignorare gli script nella query. Ad esempio, per l'elaborazione seguente, la query richiede la condizione active=1 ma possiamo commentare (--, -- -, -+, #, /*, /**/, // , ;%00…) e ignoralo. Durante l'estrazione, spesso non sappiamo cosa fa il contenuto rimanente della query, quindi l'utilizzo dei commenti in questo caso è molto efficace.

Dopo aver commentato, la nostra query diventa:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
2. Ignora il filtraggio delle parole chiave
UN. Commenti in linea
I commenti in linea vengono utilizzati in modo molto efficace per aggirare il filtro degli spazi bianchi. È possibile utilizzare i seguenti caratteri per ignorare il filtro degli spazi bianchi: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Per esempio:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
Oppure ignora il filtraggio delle parole chiave (disponibile con MySql). Nell'esempio seguente, le parole chiave union e password sono nella lista nera, quindi sono state bloccate. Possiamo aggirarlo:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
B. Sostituisci le parole chiave
Quando sfruttiamo l'SQL injection, utilizziamo spesso parole chiave come: union, select, information_schema... In molti casi, i programmatori semplicemente sostituiscono quelle parole chiave:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
Possiamo facilmente vedere che manca il codice di elaborazione di cui sopra. Se si tratta semplicemente di una corrispondenza di pattern, il bypass è estremamente semplice. Applichiamo la distinzione tra maiuscole e minuscole, dove le lettere maiuscole e minuscole vengono interpretate in modo diverso.
Ora invece di usare la parola chiave:
select, union…
Noi useremo:
SeLEcT, UniOn…
La base di questo bypass è che i sistemi di gestione dei database non distinguono tra case e parole chiave case.
In alcuni casi, l'applicazione web filtrerà tutte o parte di alcune parole chiave (unione, selezione...). Aggireremo come segue:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Dopo che l'unione e la selezione sono state filtrate dall'applicazione web, ci verrà lasciata la query corretta come segue:
id=1+union+SeLecT+1,2,3-- -
C. Codifica dei caratteri
Possiamo bypassare il blocco WAF (Web Application Firewall) delle parole chiave codificandole. Molte applicazioni WAF decodificheranno la query solo una volta e filtreranno le parole chiave nella lista nera, quindi codificheremo la richiesta due volte in modo che in questo caso possa essere ignorata.
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
3. Bypass blocca le virgolette singole e doppie
- Diamo un'occhiata a un esempio prima di conoscere nello specifico questo bypass.
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
In questo scenario, nel database è presente una tabella denominata Users. Il compito successivo è conoscere il nome della colonna nella tabella per ottenere le sue informazioni. Come nella query precedente, utilizziamo la condizione: table_name='users'. Ma se sia le virgolette singole (') che le virgolette doppie (") sono bloccate da WAF, non possiamo più utilizzare 'utenti' o "utenti". Quindi, come risolvere questo problema? Il sistema di database integrato ci fornisce una funzione che risolve molto bene questo problema, che è la funzione CHAR() (per Oracle è CHR()). Ad esempio, nella query precedente la ignoreremo:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
I programmatori PHP hanno molta familiarità con la funzione addlashes(). La funzione addlashes() ha l'effetto di aggiungere prima di caratteri speciali come virgolette singole ('), virgolette doppie ("), barra rovesciata (\), carattere NUL (byte nullo) "\" per aiutare il sistema di gestione del database. Esiste nessuna difficoltà e confusione durante la gestione di stringhe contenenti questi caratteri? Pertanto, quando vogliamo inserire nella query secondo lo script: name='someName' o '1'='1'-- I risultati non sono più quelli che ci aspettavamo.
Tuttavia, esiste una tecnica per ignorare la funzione addlashes() per inserire caratteri di virgolette singole ('). Questa tecnica è pubblica da molto tempo e l'implementazione di questa tecnica è piuttosto difficile perché è legata allo stile di codifica applicato al sito web.
4. Ignorare l'errore "mix illegale di regole di confronto per l'operazione UNION"
In alcuni sistemi gestionali (comunemente presenti in MySql), quando database e tabelle sono stati impostati in collation, quando si utilizza la parola chiave UNION, verrà segnalato l'errore "illegal mix of collation for operazione UNION". L'impostazione delle regole di confronto può essere dovuta all'intenzione del progettista del database o all'impostazione predefinita di MySql. In caso di utilizzo dell'unione, dobbiamo garantire che la condizione di selezione del valore in ciascun campo debba avere il tipo di codice corrispondente definito. A mio parere, questo errore è abbastanza comune, soprattutto per i CMS che eseguono Apache MySql. Le persone possono saperne di più su: http://bugs.mysql.com/bug.php?id=57926.
In questo caso possiamo utilizzare metodi per convertire nel tipo di codifica appropriato.
Ad esempio nel seguente caso:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
Nella query precedente, se la colonna1 ha le regole di confronto impostate su Unicode-UTF8 o _latin1, ad esempio, ciò che viene selezionato da colonna2 dovrà essere convertito nel codice corrispondente. Possiamo forzare lo stile come segue:
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
Vediamo uno svantaggio in questo metodo di bypass: dobbiamo sapere che il codice raccolto è _latin1. Un modo migliore per aggirarlo, secondo me, è utilizzare le funzioni di codifica e decodifica esadecimale e non esadecimale.
![Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio Web5: SQL injection - Alcune tecniche per aggirare i meccanismi di filtraggio]()
Esistono molte altre funzioni che possono essere utilizzate al posto di hex e unhex.