1. Kap de query-inhoud af
Voor het geval u de scripts in de query wilt negeren. Voor de onderstaande verwerking vereist de query bijvoorbeeld de voorwaarde active=1, maar we kunnen commentaar geven (--, -- -, -+, #, /*, /**/, // , ;%00…) en negeer het. Bij mining weten we vaak niet wat de resterende inhoud van de zoekopdracht doet, dus het gebruik van opmerkingen is in dit geval zeer effectief.

Na commentaar wordt onze vraag:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
2. Omzeil trefwoordfiltering
A. Inline-opmerkingen
Inline-opmerkingen worden zeer effectief gebruikt om het filteren van witruimte te omzeilen. U kunt de volgende tekens gebruiken om witruimtefiltering te omzeilen: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Bijvoorbeeld:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
Of omzeil trefwoordfiltering (beschikbaar bij MySql). In het onderstaande voorbeeld staan de trefwoorden Union en Wachtwoord op de zwarte lijst en zijn ze dus geblokkeerd. We kunnen dit omzeilen door:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
B. Vervang trefwoorden
Bij het exploiteren van SQL-injectie gebruiken we vaak trefwoorden zoals: union, select, information_schema... In veel gevallen vervangen programmeurs eenvoudigweg deze trefwoorden:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
We kunnen gemakkelijk zien dat de bovenstaande verwerkingscode ontbreekt. Als het alleen maar om het matchen van patronen gaat, is de bypass uiterst eenvoudig. Laten we hoofdlettergevoelig toepassen, waarbij hoofdletters en kleine letters verschillend worden geïnterpreteerd.
In plaats van het trefwoord te gebruiken:
select, union…
We zullen gebruiken:
SeLEcT, UniOn…
De basis van deze bypass is dat databasebeheersystemen geen onderscheid maken tussen case en case-trefwoorden.
In sommige gevallen filtert de webapplicatie bepaalde trefwoorden (vereniging, selectie...) geheel of gedeeltelijk eruit. We zullen als volgt omzeilen:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Nadat de unie en selectie door de webapplicatie zijn uitgefilterd, houden we als volgt de juiste vraag over:
id=1+union+SeLecT+1,2,3-- -
C. Tekencodering
We kunnen omzeilen wanneer WAF (Web Application Firewall) trefwoorden blokkeert door ze te coderen. Veel WAF-applicaties decoderen de zoekopdracht slechts één keer en filteren trefwoorden uit de zwarte lijst. Laten we het verzoek vervolgens twee keer coderen, zodat het in dit geval kan worden omzeild.
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
3. Bypass blokkeert enkele en dubbele aanhalingstekens
- Laten we naar een voorbeeld kijken voordat we specifiek over deze bypass leren.
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
In dit scenario hebben we een tabel in de database met de naam gebruikers. De volgende taak is om de kolomnaam in de tabel te kennen om de informatie ervan te verkrijgen. Net als in de bovenstaande zoekopdracht gebruiken we de voorwaarde: table_name='users'. Maar als zowel enkele aanhalingstekens (') als dubbele aanhalingstekens (") worden geblokkeerd door WAF, kunnen we 'users' of 'users' niet langer gebruiken. Dus hoe kunnen we dit probleem oplossen? Het ingebouwde databasesysteem geeft ons een functie die lost dit probleem heel goed op, namelijk de CHAR( )-functie (voor Oracle is dit CHR()). In de bovenstaande query zullen we dit bijvoorbeeld omzeilen door:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
PHP-programmeurs zijn zeer bekend met de functie addlashes(). De functie addlashes() heeft het effect dat er vóór speciale tekens zoals enkele aanhalingstekens ('), dubbele aanhalingstekens ("), backslash (\), NUL (null byte) teken "\" worden toegevoegd om het databasebeheersysteem te helpen. geen problemen en verwarring bij het verwerken van strings die deze karakters bevatten?Dus als we in de query willen injecteren volgens het script: name='someName' of '1'='1'-- De resultaten zijn niet langer wat we verwachtten.
Er is echter een techniek om de functie addlashes() te omzeilen en enkele aanhalingstekens (') in te voegen. Deze techniek is al geruime tijd openbaar en het implementeren van deze techniek is behoorlijk moeilijk omdat deze gekoppeld is aan de codeerstijl die op de website wordt toegepast.
4. Omzeil de fout "illegale combinatie van sortering voor bewerking UNION"
In sommige beheersystemen (vaak te vinden in MySql), wanneer databases en tabellen zijn ingesteld op sorteren, wordt bij gebruik van het trefwoord UNION de fout "illegale combinatie van sorteren voor bewerking UNION" gerapporteerd. Het instellen van de sortering kan te wijten zijn aan de bedoeling van de databaseontwerper of aan de standaardinstelling van MySql. Als u unie gebruikt, moeten we ervoor zorgen dat voor de selectiewaardevoorwaarde in elk veld het overeenkomstige codetype is gedefinieerd. Naar mijn mening komt deze fout vrij vaak voor, vooral bij CMS'en waarop Apache MySql wordt uitgevoerd. Mensen kunnen meer leren op: http://bugs.mysql.com/bug.php?id=57926.
In dit geval kunnen we manieren gebruiken om naar het juiste coderingstype te converteren.
Bijvoorbeeld in het volgende geval:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
Als in de bovenstaande query de sortering van kolom1 bijvoorbeeld is ingesteld op Unicode-UTF8 of _latin1, moet datgene wat uit kolom2 is geselecteerd, worden geconverteerd naar de overeenkomstige code. We kunnen de stijl als volgt forceren:
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
We zien een nadeel in deze bypass-methode: we moeten weten dat de verzamelde code _latin1 is. Een betere manier om dit te omzeilen is naar mijn mening het gebruik van de hex- en unhex-coderings- en decoderingsfuncties.
![Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen Web5: SQL-injectie - Enkele technieken om filtermechanismen te omzeilen]()
Er zijn veel andere functies die kunnen worden gebruikt in plaats van hex en unhex.