1. Kürzen Sie den Abfrageinhalt
Falls Sie die Skripte in der Abfrage ignorieren möchten. Für die folgende Verarbeitung erfordert die Abfrage beispielsweise die Bedingung active=1, aber wir können kommentieren (--, -- -, -+, #, /*, /**/, // , ;%00…) und ignoriere es. Beim Mining wissen wir oft nicht, was der verbleibende Inhalt der Abfrage bewirkt, daher ist die Verwendung von Kommentaren in diesem Fall sehr effektiv.

Nach dem Kommentieren lautet unsere Abfrage:

2. Umgehen Sie die Schlüsselwortfilterung
A. Inline-Kommentare
Inline-Kommentare werden sehr effektiv verwendet, um die Leerraumfilterung zu umgehen. Sie können die folgenden Zeichen verwenden, um die Leerraumfilterung zu umgehen: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Zum Beispiel:

Oder umgehen Sie die Schlüsselwortfilterung (verfügbar mit MySql). Im folgenden Beispiel befinden sich die Schlüsselwörter Union und Password auf der Blacklist und wurden daher blockiert. Wir können dies umgehen, indem wir:

B. Schlüsselwörter ersetzen
Wenn wir SQL-Injection ausnutzen, verwenden wir häufig Schlüsselwörter wie: Union, Select, Information_Schema ... In vielen Fällen ersetzen Programmierer diese Schlüsselwörter einfach:

Wir können leicht erkennen, dass der obige Verarbeitungscode fehlt. Wenn es sich lediglich um einen Mustervergleich handelt, ist die Umgehung äußerst einfach. Lassen Sie uns die Groß- und Kleinschreibung berücksichtigen, wobei Groß- und Kleinbuchstaben unterschiedlich interpretiert werden.
Anstatt das Schlüsselwort zu verwenden:
select, union…
Wir werden verwenden:
SeLEcT, UniOn…
Die Grundlage dieser Umgehung besteht darin, dass Datenbankverwaltungssysteme nicht zwischen Groß- und Kleinschreibung und Groß-/Kleinschreibungsschlüsselwörtern unterscheiden.
In einigen Fällen filtert die Webanwendung bestimmte Schlüsselwörter (Union, Select...) ganz oder teilweise heraus. Wir werden wie folgt umgehen:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Nachdem Union und Select von der Webanwendung herausgefiltert wurden, erhalten wir die richtige Abfrage wie folgt:
id=1+union+SeLecT+1,2,3-- -
C. Zeichenkodierung
Wir können das Blockieren von Schlüsselwörtern durch die WAF (Web Application Firewall) umgehen, indem wir sie kodieren. Viele WAF-Anwendungen dekodieren die Abfrage nur einmal und filtern Schlüsselwörter in der Blacklist heraus. Anschließend kodieren wir die Anfrage zweimal, damit sie in diesem Fall umgangen werden kann.

3. Bypass blockiert einfache und doppelte Anführungszeichen
- Schauen wir uns ein Beispiel an, bevor wir uns speziell mit dieser Umgehung befassen.

In diesem Szenario haben wir in der Datenbank eine Tabelle mit dem Namen „Benutzer“. Die nächste Aufgabe besteht darin, den Spaltennamen in der Tabelle zu kennen, um deren Informationen zu erhalten. Wie in der obigen Abfrage verwenden wir die Bedingung: table_name='users'. Wenn jedoch sowohl einfache Anführungszeichen (') als auch doppelte Anführungszeichen (") von WAF blockiert werden, können wir „Benutzer“ oder „Benutzer“ nicht mehr verwenden. Wie kann dieses Problem gelöst werden? Das integrierte Datenbanksystem stellt uns eine Funktion zur Verfügung, die löst dieses Problem sehr gut, nämlich die Funktion CHAR( ) (für Oracle ist es CHR()). In der obigen Abfrage werden wir sie beispielsweise umgehen, indem wir:


PHP-Programmierer sind mit der Funktion addslashes() bestens vertraut. Die Funktion addslashes() bewirkt, dass Sonderzeichen wie einfache Anführungszeichen ('), doppelte Anführungszeichen ("), Backslash (\) und NUL-Zeichen (Nullbyte) „\“ hinzugefügt werden, um das Datenbankverwaltungssystem zu unterstützen. Gibt es Keine Schwierigkeiten und Verwirrung beim Umgang mit Zeichenfolgen, die diese Zeichen enthalten? Wenn wir also gemäß dem Skript Folgendes in die Abfrage einfügen möchten: name='someName' oder '1'='1'-- Die Ergebnisse entsprechen nicht mehr unseren Erwartungen.
Es gibt jedoch eine Technik, um die Funktion addslashes() zu umgehen und einfache Anführungszeichen (') einzufügen. Diese Technik ist seit geraumer Zeit öffentlich bekannt und die Implementierung dieser Technik ist ziemlich schwierig, da sie an den auf der Website angewendeten Codierungsstil gebunden ist.
4. Umgehen Sie den Fehler „Ungültige Sortiermischung für Operation UNION“.
In einigen Verwaltungssystemen (häufig in MySql zu finden) wird bei Verwendung des Schlüsselworts UNION, wenn Datenbanken und Tabellen auf Kollatierung eingestellt sind, der Fehler „Ungültige Mischung von Kollatierung für Operation UNION“ gemeldet. Das Festlegen der Sortierung kann auf die Absicht des Datenbankdesigners oder auf die Standardeinstellung von MySql zurückzuführen sein. Bei Verwendung von Union müssen wir sicherstellen, dass für die Auswahlwertbedingung in jedem Feld der entsprechende Codetyp definiert sein muss. Meiner Meinung nach kommt dieser Fehler recht häufig vor, insbesondere bei CMS, auf denen Apache MySql läuft. Weitere Informationen finden Sie unter: http://bugs.mysql.com/bug.php?id=57926.
In diesem Fall können wir Methoden zur Konvertierung in den entsprechenden Kodierungstyp verwenden.
Beispielsweise im folgenden Fall:

Wenn in der obigen Abfrage die Sortierung für Spalte1 beispielsweise auf Unicode-UTF8 oder _latin1 eingestellt ist, muss die Auswahl aus Spalte2 in den entsprechenden Code konvertiert werden. Wir können den Stil wie folgt erzwingen:

Wir sehen bei dieser Umgehungsmethode einen Nachteil: Wir müssen wissen, dass der zusammengestellte Code _latin1 ist. Eine bessere Möglichkeit, dies zu umgehen, ist meiner Meinung nach die Verwendung der Hex- und Unhex-Kodierungs- und Dekodierungsfunktionen.

Es gibt viele andere Funktionen, die anstelle von Hex und Unhex verwendet werden können.