SQL Trication Vulnerability existiert normalerweise in MySQL -Datenbanken. Diese Sicherheitsanfälligkeit wurde erstmals in CVE-2008-4106 beschrieben, das mit WordPress CMS zusammenhängt.
Wie SQL -Kürzungsangriffe funktionieren
Dieser Angriff funktioniert aufgrund der Kürzung der Benutzereingaben in Datenbanken mithilfe der Funktionen "Auswahl" und "Insertion".
Angenommen, ein Entwickler erstellt die Tabelle "Benutzer" über die folgende Abfrage:
Tabellenbenutzer erstellen (BenutzerWenn der Entwickler dieses Schema unter Verwendung dieses Schemas erstellt, wird ein Administratorkonto mit Folgendem erstellt:
user_name = 'admin'Offensichtlich sind diese Anmeldeinformationen nicht öffentlich. In der Datenbank befindet sich nur ein Admin -Konto. Wenn ein Angreifer versucht, ein anderes Konto beim Benutzernamen "Admin" zu registrieren, fällt der Angreifer aufgrund der Redundanzprüfungen der Datenbank fehl. Der Angreifer kann diese Redundanzprüfung weiterhin umgehen, um ein weiteres Administratorkonto hinzuzufügen, indem die SQL -Truncation -Schwachstelle ausnutzt. Angenommen, der Angreifer registriert ein anderes Konto mit den folgenden Eingaben:
User_name = 'adminxxxxxxxxxxxxxxxxxxrandom'Die Datenbank nimmt den 'user_name' (26 Zeichen) und prüft, ob dies bereits vorhanden ist. Anschließend wird die Eingabe user_name abgeschnitten und "admin" ("admin" mit Speicherplatz) wird in die Datenbank eingegeben, was zu zwei doppelten Administratorbenutzern führt.
Der Angreifer ist dann in der Lage, einen "Administrator" -Enutzer mit seinem eigenen Passwort zu erstellen. Jetzt verfügt die Datenbank über zwei Administratoren 'user_name' Einträge, jedoch mit unterschiedlichen Passwörtern. Der Angreifer kann sich mit den neu erstellten Anmeldeinformationen anmelden, um ein Administratorfeld zu erhalten, da sowohl User_Names "Admin" und "admin" für die Datenbankebene gleich sind. Jetzt werden wir uns einen praktischen Angriff ansehen.
Probenangriff
In diesem Beispiel werden wir ein Szenario von der Website Overthowire nehmen.Org. Die Overthowire Community bietet Wargame CTFs, auf die wir unsere Sicherheitskonzepte praktizieren können. Das Szenario der SQL-Kürzung erfolgt in Natas Game Level 26-> 27. Wir können mit Folgendem auf die Ebene zugreifen:
URL: http: // natas27.Natas.Labors.überthemen.OrgDieses Level ist unter: https: // overthowire erhältlich.org/wargames/natas/natas27.html. Sie werden eine Anmeldeseite angezeigt, die für einen SQL -Kürzungsangriff anfällig ist.
Wenn Sie den Quellcode inspizieren, werden Sie feststellen, dass die Länge des Benutzernamens 64 beträgt, wie unten gezeigt.
Es gibt bereits ein Benutzer namens 'Natas28'. Unser Ziel ist es, einen anderen Benutzer namens 'Natas28' mit dem SQL_TRuncation -Angriff zu erstellen. Wir werden also Natas28 eingeben, gefolgt von 57 Leerzeichen und einem zufälligen Alphabet (in unserem Fall a), einem Benutzernamen und einem Passwort. Der Buchstaben 'A' ist im Screenshot aufgrund des 65-Charakter-Länge-Benutzernamens nicht sichtbar. Nach der Erstellung des Benutzerkontos können Sie die 'sehen' sehenA.''
Wenn die Datenbank SQL_TRuncation Schwachstellen enthält, sollte die Datenbank jetzt zwei 'Natas28' Benutzernamen haben. Ein Benutzername enthält unser Passwort. Versuchen wir, die Anmeldeinformationen auf der Anmeldeseite einzugeben.
Jetzt sind wir als "Natas28" -Nutzer angemeldet.
Minderung
Um diesen Angriff zu mildern, müssen wir mehrere Faktoren berücksichtigen.
Lassen Sie uns beispielsweise mit der folgenden Abfrage nach dem strengen Modus suchen:
MySQL> Select @@ SQL_MODEWir erstellen eine Datenbank und die Tabelle "Benutzer".''
MySQL> Datenbanktest erstellenAls nächstes erstellen wir einen Administratorbenutzer mit Anmeldeinformationen mithilfe der Abfrage einfügen.
MySQL> In Benutzerwerte einfügen ('Admin', 'password1');Wir können die Tabelleninformationen "Benutzer" anhand der Option "Auswählen * aus den Benutzern" sehen.
Die Benutzername -Länge beträgt 10 Zeichen. Jetzt werden wir den SQL -Kürzungsanschlag ausprobieren.
Wenn wir versuchen, Folgendes einzugeben:
Userername = 'adminxxxxxa'Wir werden einen Fehler bekommen, was bedeutet, dass der strenge Modus völlig effektiv ist.
MySQL> In Benutzerwerte einfügen ('Admin A', 'Pass2')Ohne strengen Modus aktiviert die Datenbank Warnungen aus, fügt die Daten jedoch weiterhin in die Tabelle ein.
Abschluss
Angreifer können Zugang zu hochprivilegischen Konten erhalten, wenn die Schwachstellen von SQL_TRUNKTION in Ihrer Anwendung vorhanden ist. Der Angreifer kann leicht Informationen über einen Benutzernamen und seine Datenbanklänge mit den kritischen Feldern erhalten und dann denselben Benutzernamen erstellen, gefolgt von Leerzeichen und zufälligem Alphabet nach der Mindestlänge, was zur Erstellung mehrerer hochprivilegierter Konten führt. Diese Sicherheitsanfälligkeit ist kritisch, kann jedoch vermieden werden, wenn Sie einige Sicherheitsvorkehrungen treffen, z.