SQL -Kürzungsangriff

SQL -Kürzungsangriff
Die SQL -Truncation -Sicherheitsanfälligkeit tritt auf. Angreifer können Informationen über die Länge eines kritischen Bereichs (z. B. einen Benutzernamen) sammeln und diese Informationen ausnutzen, um unbefugten Zugriff zu erhalten. Angreifer können sich als ein anderer Benutzer wie Administrator mit ihrem eigenen registrierten Passwort anmelden.

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".

  • Wenn die Eingabe im Feld Formular angegeben ist, prüft die Funktion "SELECT" für Redundanz, die den Eingaben in der Datenbank entspricht.
  • Nach der Überprüfung auf Redundanz überprüft die Funktion "Insertion" die Länge der Eingabe, und die Benutzereingabe wird abgeschnitten, wenn die Länge überschreitet.

Angenommen, ein Entwickler erstellt die Tabelle "Benutzer" über die folgende Abfrage:

Tabellenbenutzer erstellen (Benutzer
user_id int nicht null auto_increment,
user_name varchar (20) nicht null,
Passwort varchar (40) nicht null,
Primärschlüssel (user_id)
);

Wenn der Entwickler dieses Schema unter Verwendung dieses Schemas erstellt, wird ein Administratorkonto mit Folgendem erstellt:

user_name = 'admin'
password = "secry_p4ssw0ord"

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'
(x sind die Räume)
&
Password = ”randomuser”

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.Org
Benutzername: Natas27
Passwort: 55TBJPPzuujgvp5B3BNBG6on9Udpvzcj

Dieses 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.

  • Wir sollten nicht die Duplizierung kritischer Identitäten wie den Benutzernamen zulassen. Wir sollten diese Identitäten primäre Schlüssel machen.
  • Die Abschneidungsfunktion sollte für alle Felder von Frontend -Formularen sowie für Backend -Code implementiert werden, damit Datenbanken verkürzte Eingaben empfangen.
  • Der strenge Modus sollte auf Datenbankebene aktiviert werden. Wenn Datenbanken ohne strengen Modus aktiviert sind. Mit dem strengen Modus geben Datenbanken Fehler im Falle einer Duplikation an und vermeiden Sie das Speichern von Daten.

Lassen Sie uns beispielsweise mit der folgenden Abfrage nach dem strengen Modus suchen:

MySQL> Select @@ SQL_MODE

Wir erstellen eine Datenbank und die Tabelle "Benutzer".''

MySQL> Datenbanktest erstellen
Abfrage OK, 1 Zeile betroffen (0.02 Sek.)
MySQL> Test verwenden
Datenbank geändert
MySQL> Tabellen Benutzer erstellen (Benutzername varchar (10), Kennwort varchar (10));
Abfrage OK, 0 Zeilen betroffen (0.05 Sek.)

Als nächstes erstellen wir einen Administratorbenutzer mit Anmeldeinformationen mithilfe der Abfrage einfügen.

MySQL> In Benutzerwerte einfügen ('Admin', 'password1');
Abfrage OK, 1 Zeile betroffen (0.01 Sek.)

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'
(x sind die Räume)
&
Passwort = 'Pass2' '

Wir werden einen Fehler bekommen, was bedeutet, dass der strenge Modus völlig effektiv ist.

MySQL> In Benutzerwerte einfügen ('Admin A', 'Pass2')
Fehler 1406 (22001): Daten zu lang für die Spalte 'Benutzername' in Zeile 1 zu lang

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.