Veiligheid

SQL-afbrekingsaanval

SQL-afbrekingsaanval
De SQL Truncation-kwetsbaarheid treedt op wanneer een database de gebruikersinvoer afkapt vanwege een beperking van de lengte. Aanvallers kunnen informatie verzamelen over de lengte van een kritiek veld (zoals een gebruikersnaam) en deze informatie misbruiken om ongeautoriseerde toegang te verkrijgen. Aanvallers kunnen inloggen als een andere gebruiker, zoals een beheerder, met hun eigen geregistreerde wachtwoord.

Kwetsbaarheid van SQL-afkorting bestaat meestal in MySQL-databases. Deze kwetsbaarheid werd voor het eerst beschreven in CVE-2008-4106, die verband hield met WordPress CMS.

Hoe SQL-afbrekingsaanvallen werken

Deze aanval werkt door het inkorten van gebruikersinvoer in databases met behulp van de functies 'selectie' en 'invoegen'.

Stel dat een ontwikkelaar de tabel "gebruikers" maakt via de volgende query:

tabelgebruikers aanmaken(
user_id INT NIET NULL AUTO_INCREMENT,
gebruikersnaam VARCHAR (20) NIET NULL,
wachtwoord VARCHAR(40) NOT NULL,
PRIMAIRE SLEUTEL ( user_id )
);

Gebruik dit schema als de ontwikkelaar een beheerdersaccount maakt met het volgende:

user_name = 'admin'
wachtwoord = "secret_p4ssw0ord"

Het is duidelijk dat deze inloggegevens niet openbaar zijn. Er is slechts één beheerdersaccount in de database en als een aanvaller probeert een ander account te registreren met de 'admin'-gebruikersnaam, zal de aanvaller falen vanwege de redundantiecontroles van de database. De aanvaller kan die redundantiecontrole nog steeds omzeilen om een ​​ander beheerdersaccount toe te voegen door misbruik te maken van het beveiligingslek met betrekking tot SQL Truncation. Stel dat de aanvaller een ander account registreert met de volgende invoer:

Gebruikersnaam = 'adminxxxxxxxxxxxxxxxxxxwillekeurig'
(x zijn de spaties)
&
Wachtwoord = "Willekeurige Gebruiker"

De database neemt de 'user_name' (26 karakters) en controleert of deze al bestaat. Vervolgens wordt de invoer gebruikersnaam afgekapt en wordt 'admin' ('admin' met spatie) in de database ingevoerd, wat resulteert in twee dubbele beheerdersgebruikers.

De aanvaller kan dan een 'admin'-gebruiker maken met zijn eigen wachtwoord. Nu heeft de database twee admin 'user_name'-vermeldingen, maar met verschillende wachtwoorden. De aanvaller kan inloggen met de nieuw aangemaakte inloggegevens om een ​​beheerderspaneel te krijgen, omdat zowel gebruikersnamen "admin" als "admin" gelijk zijn voor het databaseniveau. Nu zullen we kijken naar een voorbeeld van een praktische aanval.

Voorbeeldaanval

In dit voorbeeld nemen we een scenario van de website over thewire.org. De overthewire-community biedt wargame-CTF's waarop we onze beveiligingsconcepten kunnen oefenen. Het scenario van SQL-afkapping vindt plaats in natas-spel Level 26->27. We hebben toegang tot het niveau met behulp van het volgende:

URL: http://natas27.natas.laboratoria.over de draad.org
Gebruikersnaam: natas27
Wachtwoord: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Dit niveau is beschikbaar op: https://overthewire.org/wargames/natas/natas27.html. U krijgt een inlogpagina te zien die kwetsbaar is voor een SQL Truncation-aanval.

Bij het inspecteren van de broncode, zult u zien dat de gebruikersnaam 64 is, zoals hieronder weergegeven:.

Er bestaat al een gebruiker met de naam 'natas28'. Ons doel is om nog een gebruiker met de naam 'natas28' te maken met behulp van de SQL_truncation-aanval. We zullen dus natas28 invoeren, gevolgd door 57 spaties en een willekeurig alfabet (in ons geval a), gebruikersnaam en elk wachtwoord. De letter 'a' is niet zichtbaar in de schermafbeelding vanwege de gebruikersnaam van 65 tekens. Na het aanmaken van het gebruikersaccount, ziet u de 'een.'

Als de database sql_truncation-kwetsbaarheid bevat, zou de database nu twee 'natas28'-gebruikersnamen moeten hebben. Eén gebruikersnaam bevat ons wachtwoord. Laten we proberen de inloggegevens op de inlogpagina in te voeren.

Nu zijn we ingelogd als de 'natas28'-gebruiker.

Mitigatie

Om deze aanval af te zwakken, moeten we rekening houden met meerdere factoren.

Laten we bijvoorbeeld de strikte modus controleren met behulp van de volgende query:

mysql> selecteer @@sql_mode

We zullen een database maken en de tabel 'gebruikers'.'

mysql> CREATE DATABASE-test
Query OK, 1 rij beïnvloed (0.02 seconden)
mysql> Gebruik test
Database gewijzigd
mysql> CREATE TABLE-gebruikers (gebruikersnaam VARCHAR (10), wachtwoord VARCHAR (10));
Query OK, 0 rijen beïnvloed (0.05 seconden)

Vervolgens zullen we een admin-gebruiker met inloggegevens maken met behulp van de INSERT-query.

mysql> INSERT INTO gebruikerswaarden ('admin', 'password1');
Query OK, 1 rij beïnvloed (0.01 seconden)

We kunnen de tabelinformatie 'gebruikers' zien met de optie 'select * from users' users.

De gebruikersnaam is 10 tekens lang. Nu gaan we de SQL-afkapaanval proberen try.

Wanneer we proberen het volgende in te voeren:

Gebruikersnaam = 'adminxxxxxxa'
(x zijn de spaties)
&
Wachtwoord = 'pas2'

We krijgen een foutmelding, wat betekent dat de strikte modus volledig effectief is.

mysql> INSERT INTO gebruikerswaarden('admin a', 'pass2')
ERROR 1406 (22001): Gegevens te lang voor kolom 'gebruikersnaam' in rij 1

Als de strikte modus niet is ingeschakeld, geeft de database waarschuwingen af, maar worden de gegevens nog steeds in de tabel ingevoegd.

Conclusie

Aanvallers kunnen toegang krijgen tot accounts met hoge bevoegdheden als de sql_trunction-kwetsbaarheid in uw toepassing bestaat. De aanvaller kan gemakkelijk informatie krijgen over een gebruikersnaam en de lengte van de database met behulp van de kritieke velden en vervolgens dezelfde gebruikersnaam maken, gevolgd door spaties en willekeurig alfabet na de minimale lengte, wat resulteert in het maken van meerdere accounts met hoge bevoegdheden. Dit beveiligingslek is van cruciaal belang, maar kan worden vermeden als u enkele veiligheidsmaatregelen neemt, zoals het activeren van de strikte modus voor gebruikersinvoer en het gevoelige veld de primaire sleutel in de database maken.

Top 5 ergonomische computermuisproducten voor Linux
Veroorzaakt langdurig computergebruik pijn in uw pols of vingers?? Heb je last van stijve gewrichten en moet je constant de hand schudden?? Voelt u ee...
Hoe de muis- en touchpad-instellingen te wijzigen met Xinput in Linux
De meeste Linux-distributies worden standaard geleverd met de bibliotheek "libinput" om invoergebeurtenissen op een systeem af te handelen. Het kan in...
Wijs uw muisknoppen anders toe voor verschillende software met X-Mouse Button Control
Misschien heeft u een tool nodig waarmee u de bediening van uw muis kunt veranderen bij elke applicatie die u gebruikt. Als dit het geval is, kunt u e...