Sicherheit

SQL-Trunkierungsangriff

SQL-Trunkierungsangriff
Die Sicherheitsanfälligkeit durch SQL-Abschneiden tritt auf, wenn eine Datenbank die Benutzereingabe aufgrund einer Beschränkung der Länge abschneidet. Angreifer können Informationen über die Länge eines kritischen Felds (z. B. einen Benutzernamen) sammeln und diese Informationen ausnutzen, um sich unbefugten Zugriff zu verschaffen. Angreifer können sich als andere Benutzer, z. B. als Administrator, mit ihrem eigenen registrierten Passwort anmelden.

In MySQL-Datenbanken besteht normalerweise eine SQL-Kürzungsanfälligkeit. Diese Sicherheitsanfälligkeit wurde erstmals in CVE-2008-4106 beschrieben, das sich auf WordPress CMS bezieht.

Wie SQL-Trunkierungsangriffe funktionieren

Dieser Angriff funktioniert aufgrund des Abschneidens von Benutzereingaben in Datenbanken mit den Funktionen "Auswahl" und "Einfügung".

Angenommen, ein Entwickler erstellt die Tabelle „users“ über die folgende Abfrage:

Tabellenbenutzer erstellen (
user_id INT NOT NULL AUTO_INCREMENT,
Benutzername VARCHAR(20) NICHT NULL,
Passwort VARCHAR(40) NICHT NULL,
PRIMÄRSCHLÜSSEL ( user_id )
);

Verwenden dieses Schemas, wenn der Entwickler ein Administratorkonto mit den folgenden Merkmalen erstellt:

user_name = 'admin'
Passwort = „secret_p4ssw0ord“

Offensichtlich sind diese Anmeldeinformationen nicht öffentlich. Es gibt nur ein Admin-Konto in der Datenbank, und wenn ein Angreifer versucht, ein anderes Konto mit dem Benutzernamen 'admin' zu registrieren, schlägt der Angreifer aufgrund der Redundanzprüfungen der Datenbank fehl. Der Angreifer kann diese Redundanzprüfung immer noch umgehen, um ein weiteres Administratorkonto hinzuzufügen, indem er die Sicherheitsanfälligkeit durch SQL-Abkürzung ausnutzt. Angenommen, der Angreifer registriert ein anderes Konto mit der folgenden Eingabe:

Benutzername = 'adminxxxxxxxxxxxxxxxzufällig'
(x sind die Leerzeichen)
&
Passwort = "RandomUser"

Die Datenbank nimmt den 'user_name' (26 Zeichen) und prüft, ob dieser bereits existiert. Dann wird die Eingabe des Benutzernamens abgeschnitten und 'admin' ('admin' mit Leerzeichen) wird in die Datenbank eingegeben, was zu zwei doppelten Admin-Benutzern führt.

Der Angreifer kann dann einen 'admin'-Benutzer mit eigenem Passwort erstellen. Jetzt hat die Datenbank zwei Admin-'Benutzername'-Einträge, jedoch mit unterschiedlichen Passwörtern. Der Angreifer kann sich mit den neu erstellten Zugangsdaten anmelden, um ein Admin-Panel zu erhalten, da beide Benutzernamen „admin“ und „admin“ für die Datenbankebene gleich sind. Nun schauen wir uns ein Beispiel für einen praktischen Angriff an.

Beispielangriff

In diesem Beispiel nehmen wir ein Szenario von der Website overthewire.org. Die Overthewire-Community stellt Wargame-CTFs zur Verfügung, an denen wir unsere Sicherheitskonzepte üben können. Das Szenario der SQL-Kürzung tritt im Natas-Spiel Level 26->27 auf. Wir können wie folgt auf die Ebene zugreifen:

URL: http://natas27.nata.Labore.über den Draht.org
Benutzername: natas27
Passwort: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Dieses Level ist verfügbar unter: https://overthewire.org/wargames/natas/natas27.html. Ihnen wird eine Anmeldeseite angezeigt, die anfällig für einen SQL Truncation-Angriff ist.

Bei der Überprüfung des Quellcodes werden Sie feststellen, dass der Benutzername 64 beträgt, wie unten gezeigt.

Ein Benutzer namens 'natas28' existiert bereits. Unser Ziel ist es, mithilfe des SQL_truncation-Angriffs einen weiteren Benutzer namens 'natas28' zu erstellen. Also geben wir natas28 ein, gefolgt von 57 Leerzeichen und einem zufälligen Alphabet (in unserem Fall a), Benutzernamen und einem beliebigen Passwort. Der Buchstabe 'a' ist im Screenshot wegen des 65-stelligen Benutzernamens nicht sichtbar. Nach der Erstellung des Benutzerkontos sehen Sie die 'ein.'

Wenn die Datenbank eine sql_truncation-Schwachstelle enthält, sollte die Datenbank jetzt zwei 'natas28'-Benutzernamen haben. Ein Benutzername enthält unser Passwort. Lassen Sie uns versuchen, die Anmeldeinformationen auf der Anmeldeseite einzugeben.

Jetzt sind wir als 'natas28'-Benutzer angemeldet.

Schadensbegrenzung

Um diesen Angriff abzuwehren, müssen wir mehrere Faktoren berücksichtigen.

Lassen Sie uns zum Beispiel mit der folgenden Abfrage nach dem strikten Modus suchen:

mysql> wähle @@sql_mode

Wir erstellen eine Datenbank und die Tabelle 'Benutzer.'

mysql> DATENBANK ERSTELLEN testen
Abfrage OK, 1 Zeile betroffen (0.02 Sek.)
mysql> Test verwenden
Datenbank geändert
mysql> CREATE TABLE-Benutzer (Benutzername VARCHAR(10), Kennwort VARCHAR(10));
Abfrage OK, 0 Zeilen betroffen (0.05 Sek.)

Als Nächstes erstellen wir einen Admin-Benutzer mit Anmeldeinformationen mithilfe der INSERT-Abfrage.

mysql> INSERT IN TO users VALUES ('admin', 'password1');
Abfrage OK, 1 Zeile betroffen (0.01 Sek.)

Wir können die Tabelleninformationen "Benutzer" mit der Option "Auswählen * von Benutzern" anzeigen'.

Die Länge des Benutzernamens beträgt 10 Zeichen. Jetzt werden wir den SQL-Trunkation-Angriff versuchen.

Wenn wir versuchen, Folgendes einzugeben:

Benutzername = 'adminxxxxxxa'
(x sind die Leerzeichen)
&
Passwort = 'pass2'

Wir erhalten einen Fehler, was bedeutet, dass der strikte Modus absolut effektiv ist.

mysql> INSERT INTO Benutzerwerte('admin a', 'pass2')
FEHLER 1406 (22001): Daten zu lang für Spalte 'Benutzername' in Zeile 1

Wenn der strikte Modus nicht aktiviert ist, gibt die Datenbank Warnungen aus, fügt die Daten jedoch trotzdem in die Tabelle ein.

Fazit

Angreifer können Zugriff auf Konten mit hohen Rechten erlangen, wenn die Sicherheitslücke sql_trunction in Ihrer Anwendung vorhanden ist. Der Angreifer kann mit den kritischen Feldern leicht Informationen über einen Benutzernamen und seine Datenbanklänge erhalten und dann denselben Benutzernamen erstellen, gefolgt von Leerzeichen und zufälligem Alphabet nach der Mindestlänge, was zur Erstellung mehrerer Konten mit hohen Berechtigungen führt. Diese Sicherheitsanfälligkeit ist kritisch, kann jedoch vermieden werden, wenn Sie einige Sicherheitsvorkehrungen treffen, z. B. den strikten Modus für Benutzereingaben aktivieren und das sensible Feld zum Primärschlüssel in der Datenbank machen.

Installieren Sie das neueste OpenRA-Strategiespiel auf Ubuntu Linux
OpenRA ist eine Libre/Free Real Time Strategy Game Engine, die die frühen Westwood-Spiele wie den Klassiker Command & Conquer: Red Alert Red nachbilde...
Installieren Sie den neuesten Dolphin Emulator für Gamecube & Wii unter Linux
Mit dem Dolphin Emulator können Sie Ihre ausgewählten Gamecube- und Wii-Spiele auf Linux-Personalcomputern (PC) spielen. Als frei verfügbarer Open-So...
So verwenden Sie die GameConqueror-Cheat-Engine unter Linux
Der Artikel enthält eine Anleitung zur Verwendung der GameConqueror-Cheat-Engine unter Linux. Viele Benutzer, die Spiele unter Windows spielen, verwen...