1. Trunchiați conținutul interogării
În cazul în care doriți să ignorați scripturile din interogare. De exemplu, pentru procesarea de mai jos, interogarea necesită condiția activ=1, dar putem comenta (--, -- -, -+, #, /*, /**/, // , ;%00…) și ignora. Când exploatăm, adesea nu știm ce face conținutul rămas al interogării, așa că folosirea comentariilor în acest caz este foarte eficientă.

După comentariu, interogarea noastră devine:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
2. Ocoliți filtrarea cuvintelor cheie
A. Comentarii în linie
Comentariile inline sunt folosite foarte eficient pentru a ocoli filtrarea spațiilor albe. Puteți utiliza următoarele caractere pentru a ocoli filtrarea spațiilor albe: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). De exemplu:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
Sau ocoliți filtrarea cuvintelor cheie (disponibil cu MySql). În exemplul de mai jos, cuvintele cheie uniune și parolă sunt în lista neagră, așa că au fost blocate. O putem ocoli prin:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
b. Înlocuiți cuvintele cheie
Când exploatăm injecția SQL, folosim adesea cuvinte cheie precum: union, select, information_schema... În multe cazuri, programatorii pur și simplu înlocuiesc acele cuvinte cheie:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
Putem vedea cu ușurință că lipsește codul de procesare de mai sus. Dacă este pur și simplu potrivirea modelului, bypass-ul este extrem de simplu. Să aplicăm distincția cu majuscule, unde literele mari și mici sunt interpretate diferit.
Acum, în loc să folosiți cuvântul cheie:
select, union…
Noi vom folosi:
SeLEcT, UniOn…
Baza acestei ocolire este că sistemele de gestionare a bazelor de date nu fac distincție între cuvintele cheie caz și caz.
În unele cazuri, aplicația web va filtra toate sau o parte din anumite cuvinte cheie (unire, selectare...). Vom ocoli după cum urmează:
id=1+uniunionon+SeLselectecT+1,2,3-- -
După ce uniunea și selectarea sunt filtrate de aplicația web, vom rămâne cu interogarea corectă, după cum urmează:
id=1+union+SeLecT+1,2,3-- -
c. Codificarea caracterelor
Putem ocoli atunci când WAF (Web Application Firewall) blochează cuvintele cheie prin codificarea acestora. Multe aplicații WAF vor decoda interogarea o singură dată și vor filtra cuvintele cheie din lista neagră, apoi haideți să codificăm cererea de două ori, astfel încât să poată fi ocolită în acest caz.
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
3. Ocoliți blocurile ghilimele simple și duble
- Să ne uităm la un exemplu înainte de a afla în mod specific despre această ocolire.
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
În acest scenariu, avem un tabel în baza de date numit utilizatori. Următorul lucru este să cunoașteți numele coloanei din tabel pentru a obține informațiile acesteia. Ca și în interogarea de mai sus, folosim condiția: table_name='users'. Dar dacă atât ghilimele simple ('), cât și ghilimelele duble (") sunt blocate de WAF, nu mai putem folosi „utilizatori” sau „utilizatori”. Deci, cum să rezolvăm această problemă? Sistemul de baze de date încorporat ne oferă o funcție care rezolvă foarte bine această problemă, care este funcția CHAR( ) (pentru Oracle este CHR()). De exemplu, în interogarea de mai sus o vom ocoli prin:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
Programatorii PHP sunt foarte familiarizați cu funcția addslashes(). Funcția addslashes() are ca efect adăugarea înainte de caractere speciale precum ghilimele simple ('), ghilimele duble ("), backslash (\), caracterul NUL (octet nul) "\" pentru a ajuta sistemul de gestionare a bazei de date. nicio dificultate și confuzie în manipularea șirurilor care conțin acele caractere? Astfel, atunci când dorim să injectăm în interogare conform scriptului: name='someName' sau '1'='1'-- Rezultatele nu mai sunt cele așteptate.
Cu toate acestea, există o tehnică de a ocoli funcția addslashes() pentru a injecta caractere ghilimele simple ('). Această tehnică este publică de destul de mult timp, iar implementarea acestei tehnici este destul de dificilă, deoarece este legată de stilul de codare aplicat site-ului.
4. Ocoliți eroarea „mix ilegal de colare pentru operațiunea UNION”
În unele sisteme de management (întâlnite în mod obișnuit în MySql), când bazele de date și tabelele au fost setate la collare, atunci când se folosește cuvântul cheie UNION, va fi raportată eroarea „mix ilegal de collare pentru operațiunea UNION”. Setarea colabării se poate datora intenției designerului bazei de date sau din cauza setării implicite a MySql. În cazul utilizării uniunii, trebuie să ne asigurăm că condiția de selectare a valorii din fiecare câmp trebuie să aibă tipul de cod corespunzător definit. În opinia mea, această eroare este destul de comună, în special pentru CMS-urile care rulează Apache MySql. Oamenii pot afla mai multe la: http://bugs.mysql.com/bug.php?id=57926.
În acest caz, putem folosi modalități de conversie la tipul de codificare adecvat.
De exemplu în următorul caz:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
În interogarea de mai sus, dacă coloana1 are setarea de colare la Unicode-UTF8 sau _latin1, de exemplu, atunci ceea ce este selectat din coloana2 va trebui convertit în codul corespunzător. Putem forța stilul după cum urmează:
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
Vedem un dezavantaj în această metodă de ocolire: trebuie să știm că codul colat este _latin1. O modalitate mai bună de a o ocoli, în opinia mea, este să utilizați funcțiile de codificare și decodare hex și unhex.
![Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare Web5: injecție SQL - Câteva tehnici pentru a ocoli mecanismele de filtrare]()
Există multe alte funcții care pot fi folosite în loc de hex și unhex.