Zelfstudie voor SQL-injectie: leer met voorbeelden

Gegevens zijn een van de meest vitale componenten van informatiesystemen. Database-aangedreven webapplicaties worden door de organisatie gebruikt om gegevens van klanten te verkrijgen. SQL is de afkorting voor Structured Query Language. Het wordt gebruikt om gegevens in de database op te halen en te manipuleren.

Wat is een SQL-injectie?

SQL-injectie is een aanval die dynamische SQL-instructies vergiftigt om bepaalde delen van de instructie te becommentariëren of een voorwaarde toe te voegen die altijd waar zal zijn. Het maakt gebruik van de ontwerpfouten in slecht ontworpen webapplicaties om SQL-instructies te misbruiken om kwaadaardige SQL-code uit te voeren.

SQL Injection

Hoe SQL-injectie werkt

De soorten aanvallen die kunnen worden uitgevoerd met behulp van SQL-injectie variëren afhankelijk van het type database-engine. De aanval werkt op dynamische SQL-instructies. Een dynamische instructie is een instructie die tijdens runtime wordt gegenereerd met behulp van het wachtwoord van een webformulier of een URI-queryreeks.

Laten we eens kijken naar een eenvoudige webapplicatie met een inlogformulier. De code voor het HTML-formulier wordt hieronder weergegeven.

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

HIER,

  • Het bovenstaande formulier accepteert de email adres en wachtwoord verzendt ze vervolgens naar a PHP bestand met de naam index.php.
  • Het heeft de mogelijkheid om de inlogsessie in een cookie op te slaan. Dit hebben wij afgeleid uit de Remember_me checkbox. Het gebruikt de post-methode om gegevens in te dienen. Dit betekent dat de waarden niet in de URL worden weergegeven.

Laten we aannemen dat de instructie aan de backend voor het controleren van de gebruikers-ID als volgt is

SELECTEER * VAN gebruikers WAAR email = $_POST['email'] AND wachtwoord = md5($_POST['wachtwoord']);

HIER,

  • De bovenstaande verklaring gebruikt de waarden van de $_POST[] array rechtstreeks zonder ze op te schonen.
  • Het wachtwoord wordt gecodeerd met behulp van het MD5-algoritme.

We zullen een SQL-injectieaanval illustreren met behulp van sqlfiddle. Open de URL http://sqlfiddle.com/ in uw webbrowser. Je krijgt het vervolgwing venster.

Let op: u zult de SQL-instructies moeten schrijven

SQL-injectie werkt

Stap 1) Voer deze code in het linkerdeelvenster in

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
  
insert into users (email,password) values ('m@m.com',md5('abc'));

Stap 2) Klik op Schema samenstellen

Stap 3) Voer deze code in het rechterdeelvenster in

selecteer * uit gebruikers;

Stap 4) Klik op SQL uitvoeren. Je zult het volgende zienwing resultaat

SQL-injectie werkt

Stel dat er gebruikersbenodigdheden zijn beheerder@admin.sys en 1234 als wachtwoord. De instructie die moet worden uitgevoerd op de database zou zijn

SELECTEER * VAN gebruikers WAAR email = 'admin@admin.sys' EN wachtwoord = md5('1234');

De bovenstaande code kan worden misbruikt door het wachtwoordgedeelte van commentaar te voorzien en een voorwaarde toe te voegen die altijd waar zal zijn. Laten we aannemen dat een aanvaller de volgende informatie verstrektwing invoeren in de email adresveld.

xxx@xxx.xxx' OF 1 = 1 LIMIET 1 — ' ]

xxx voor het wachtwoord.

De gegenereerde dynamische instructie ziet er als volgt uit.

SELECTEER * VAN gebruikers WAAR email = 'xxx@xxx.xxx' OF 1 = 1 LIMIT 1 — ' ] EN wachtwoord = md5('1234');

HIER,

  • xxx@xxx.xxx eindigt met een enkel aanhalingsteken dat het aanhalingsteken van de tekenreeks voltooit
  • OR 1 = 1 LIMIT 1 is een voorwaarde die altijd waar is en die de geretourneerde resultaten beperkt tot slechts één record.
  • — ' AND … is een SQL-opmerking die het wachtwoordgedeelte elimineert.

Kopieer de bovenstaande SQL-instructie en plak deze in SQL FiddleRun SQL-tekst box zoals hieronder

SQL-injectie werkt

Hackactiviteit: SQL injecteert een webapplicatie

We hebben een eenvoudige webapplicatie op http://www.techpanda.org/ dat alleen voor demonstratiedoeleinden kwetsbaar is voor SQL-injectieaanvallen. De bovenstaande HTML-formuliercode is afkomstig van de inlogpagina. De applicatie biedt basisbeveiliging, zoals het ontsmetten van de email veld. Dit betekent dat onze bovenstaande code niet kan worden gebruikt om de login te omzeilen.

Om dat te omzeilen, kunnen we in plaats daarvan het wachtwoordveld exploiteren. In onderstaand schema zijn de stappen weergegeven die u moet volgen

SQL Injecteer een webapplicatie

Laten we aannemen dat een aanvaller de volgende informatie verstrektwing invoer

  • Stap 1: Voer xxx@xxx.xxx in als email adres
  • Stap 2: Voer xxx') in OF 1 = 1 — ]

SQL Injecteer een webapplicatie

  • Klik op de knop Verzenden
  • U wordt doorverwezen naar het dashboard

De gegenereerde SQL-instructie ziet er als volgt uit

SELECTEER * VAN gebruikers WAAR email = 'xxx@xxx.xxx' EN wachtwoord = md5('xxx') OF 1 = 1 — ]');

Het onderstaande diagram illustreert dat de instructie is gegenereerd.

SQL Injecteer een webapplicatie

HIER,

  • De verklaring gaat er op intelligente wijze van uit dat MD5-codering wordt gebruikt
  • Voltooit het enkele aanhalingsteken en het afsluitende haakje
  • Voegt een voorwaarde toe aan de bewering die altijd waar zal zijn

Over het algemeen probeert een succesvolle SQL-injectieaanval een aantal verschillende technieken uit, zoals hierboven gedemonstreerd, om een ​​succesvolle aanval uit te voeren.

Andere typen SQL-injectieaanvallen

SQL-injecties kunnen meer schade aanrichten dan alleen het doorgeven van de inlogalgoritmen. Enkele van de aanvallen omvatten

  • Gegevens verwijderen
  • Gegevens bijwerken
  • Gegevens invoegen
  • Het uitvoeren van opdrachten op de server die kwaadaardige programma's zoals Trojaanse paarden kunnen downloaden en installeren
  • Exporteren van waardevolle gegevens zoals creditcard details, Enmailen wachtwoorden voor de externe server van de aanvaller
  • Gebruikerslogin verkrijgen details etc

De bovenstaande lijst is niet uitputtend; het geeft je gewoon een idee van wat SQL Injection is

Automatiseringstools voor SQL-injectie

In het bovenstaande voorbeeld hebben we handmatige aanvalstechnieken gebruikt, gebaseerd op onze uitgebreide kennis van SQL. Er zijn geautomatiseerde tools die u kunnen helpen de aanvallen efficiënter en binnen de kortst mogelijke tijd uit te voeren. Deze hulpmiddelen omvatten

Hoe u SQL-injectieaanvallen kunt voorkomen

Een organisatie kan de follo overnemenwing beleid om zichzelf te beschermen tegen SQL-injectieaanvallen.

  • Gebruikersinvoer mag nooit worden vertrouwd – Het moet altijd worden opgeschoond voordat het wordt gebruikt in dynamische SQL-instructies.
  • Opgeslagen procedures - deze kunnen de SQL-instructies inkapselen en alle invoer als parameters behandelen.
  • Opgestelde verklaringen –bereidde instructies voor om te werken door eerst de SQL-instructie te maken en vervolgens alle ingediende gebruikersgegevens als parameters te behandelen. Dit heeft geen invloed op de syntaxis van de SQL-instructie.
  • Normale uitdrukkingen -deze kunnen worden gebruikt om potentieel schadelijke code te detecteren en deze te verwijderen voordat de SQL-instructies worden uitgevoerd.
  • Toegangsrechten voor gebruikers van databaseverbinding –alleen noodzakelijke toegangsrechten mogen worden gegeven aan accounts die worden gebruikt om verbinding te maken met de database. Dit kan helpen verminderen wat de SQL-instructies op de server kunnen uitvoeren.
  • Foutmeldingen -deze mogen geen gevoelige informatie onthullen en waar precies een fout is opgetreden. Eenvoudige aangepaste foutmeldingen zoals “Sorry, we ondervinden technische fouten. Er is contact opgenomen met het technische team. Probeer het opnieuw later” kan worden gebruikt in plaats van de SQL-instructies weer te geven die de fout hebben veroorzaakt.

Hackactiviteit: gebruik Havij voor SQL-injectie

In dit praktische scenario gaan we het Havij Advanced SQL Injection-programma gebruiken om een ​​website te scannen op kwetsbaarheden.

Let op: uw antivirusprogramma kan dit vanwege de aard ervan markeren. U moet het toevoegen aan de lijst met uitsluitingen of uw antivirussoftware pauzeren.

De onderstaande afbeelding toont het hoofdvenster voor Havij

Gebruik Havij voor SQL-injectie

Bovenstaand hulpmiddel kan worden gebruikt om de kwetsbaarheid van een website/applicatie te beoordelen.

Samengevat

  • SQL-injectie is een aanvalstype dat misbruik maakt van slechte SQL-instructies
  • SQL-injectie kan worden gebruikt om inlogalgoritmen te omzeilen, gegevens op te halen, in te voegen, bij te werken en te verwijderen.
  • SQL-injectietools omvatten SQLMap, SQLPing en SQLSmack, enz.
  • Een goed beveiligingsbeleid bij het schrijven van een SQL-instructie kan SQL-injectieaanvallen helpen verminderen.
Guru99 wordt gesponsord door Invicti
invicti

Invicti, de ontwikkelaars van Proof Based Scanning-technologie, hebben het Guru99-project gesponsord om het beveiligingsbewustzijn van webapplicaties te vergroten en meer ontwikkelaars de kans te geven om te leren over het schrijven van veilige code