Gegevens zijn een van de meest vitale componenten van informatiesystemen. Database-aangedreven webapplicaties worden door de organisatie gebruikt om gegevens van klanten te krijgen. 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 webtoepassingen om SQL-instructies te misbruiken om kwaadaardige SQL-code uit te voeren.
In deze tutorial leer je SQL Injection-technieken en hoe je webapplicaties tegen dergelijke aanvallen kunt beschermen.
- Hoe SQL-injectie werkt
- Hacking-activiteit: SQL Injecteer een webtoepassing
- Andere typen SQL-injectie
- Automatiseringstools voor SQL-injectie
- Hoe u aanvallen door SQL-injectie kunt voorkomen
- Hacking-activiteit: gebruik Havji voor SQL-injectie
Hoe SQL-injectie werkt
De soorten aanvallen die kunnen worden uitgevoerd met SQL-injectie, variëren afhankelijk van het type database-engine. De aanval werkt op dynamische SQL-statements . Een dynamische instructie is een instructie die tijdens runtime wordt gegenereerd met behulp van het wachtwoord voor parameters van een webformulier of een URI-querytekenreeks.
Laten we eens kijken naar een eenvoudige webapplicatie met een inlogformulier. De code voor het HTML-formulier wordt hieronder weergegeven.
HIER,
- Het bovenstaande formulier accepteert het e-mailadres en het wachtwoord en verzendt ze vervolgens naar een PHP-bestand met de naam index.php.
- Het heeft een optie om de inlogsessie op te slaan in een cookie. We hebben dit afgeleid uit het vakje Remember_me. 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 achterkant voor het controleren van de gebruikers-ID als volgt is
SELECTEER * VAN gebruikers WAAR email = $ _POST ['email'] EN wachtwoord = md5 ($ _ POST ['wachtwoord']);
HIER,
- De bovenstaande instructie gebruikt de waarden van de $ _POST [] -array direct zonder ze op te schonen.
- Het wachtwoord is gecodeerd met behulp van het MD5-algoritme.
We zullen SQL-injectie-aanval illustreren met behulp van sqlfiddle. Open de URL http://sqlfiddle.com/ in uw webbrowser. U krijgt het volgende venster.
Opmerking: u moet de SQL-instructies schrijven
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 ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Stap 2) Klik op Schema bouwen
Stap 3) Voer deze code in het rechterdeelvenster in
selecteer * van gebruikers;
Stap 4) Klik op SQL uitvoeren. U zult het volgende resultaat zien
Stel dat gebruikers dit e-mailadres gebruiken. Dit e-mailadres wordt beveiligd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. en 1234 als het wachtwoord. De instructie die tegen de database moet worden uitgevoerd, zou zijn
SELECTEER * VAN gebruikers WAAR email = ' Dit e-mailadres is beschermd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. ' AND wachtwoord = md5 ('1234');
De bovenstaande code kan worden misbruikt door commentaar te geven op het wachtwoordgedeelte en een voorwaarde toe te voegen die altijd waar zal zijn. Stel dat een aanvaller de volgende invoer in het e-mailadresveld geeft.
Dit e-mailadres is beschermd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. ' OF 1 = 1 LIMIET 1 - ']
xxx voor het wachtwoord.
De gegenereerde dynamische instructie ziet er als volgt uit.
SELECTEER * VAN gebruikers WAAR email = ' Dit e-mailadres is beschermd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. ' OF 1 = 1 LIMIET 1 - '] EN wachtwoord = md5 (' 1234 ');
HIER,
- Dit e-mailadres is beschermd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. eindigt met een enkel aanhalingsteken dat de tekenreeks aanhaalt
- OF 1 = 1 LIMIET 1 is een voorwaarde die altijd waar zal zijn en de geretourneerde resultaten beperkt tot slechts één record.
- - 'AND… is een SQL-opmerking die het wachtwoordgedeelte verwijdert.
Kopieer de bovenstaande SQL-instructie en plak deze in het SQL FiddleRun SQL-tekstvak, zoals hieronder wordt weergegeven
Hacking-activiteit: SQL Injecteer een webtoepassing
We hebben een eenvoudige webtoepassing op http://www.techpanda.org/ die alleen kwetsbaar is voor SQL Injection-aanvallen voor demonstratiedoeleinden. De bovenstaande HTML-formuliercode is afkomstig van de inlogpagina. De applicatie biedt basisbeveiliging, zoals het opschonen van het e-mailveld. 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. Het onderstaande diagram toont de stappen die u moet volgen
Stel dat een aanvaller de volgende invoer levert
- Stap 1: Enter Dit e-mailadres wordt beveiligd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. als het e-mailadres
- Stap 2: voer xxx ') OF 1 = 1 -] in
- 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 = ' Dit e-mailadres is beschermd tegen spambots. JavaScript moet ingeschakeld zijn om het te kunnen bekijken. ' EN wachtwoord = md5 ('xxx') OF 1 = 1 -] ');
Het onderstaande diagram illustreert dat de verklaring is gegenereerd.
HIER,
- De verklaring gaat er op intelligente wijze van uit dat md5-codering wordt gebruikt
- Voltooit het enkele aanhalingsteken en het haakje sluiten
- Voegt een voorwaarde toe aan de stelling die altijd waar zal zijn
Over het algemeen probeert een succesvolle SQL Injection-aanval een aantal verschillende technieken, zoals de hierboven gedemonstreerde, om een succesvolle aanval uit te voeren.
Andere typen SQL-injectie
SQL-injecties kunnen meer schade aanrichten dan alleen door de inlogalgoritmen door te geven. Enkele van de aanvallen zijn onder meer
- Gegevens verwijderen
- Gegevens bijwerken
- Gegevens invoegen
- Het uitvoeren van opdrachten op de server die schadelijke programma's zoals Trojaanse paarden kunnen downloaden en installeren
- Het exporteren van waardevolle gegevens zoals creditcardgegevens, e-mail en wachtwoorden naar de externe server van de aanvaller
- Inloggegevens van gebruikers ophalen, enz
De bovenstaande lijst is niet uitputtend; het geeft je gewoon een idee van wat SQL Injection
Automatiseringstools voor SQL-injectie
In het bovenstaande voorbeeld hebben we handmatige aanvalstechnieken gebruikt op basis van 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 tools omvatten
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Hoe u aanvallen door SQL-injectie kunt voorkomen
Een organisatie kan het volgende beleid toepassen om zichzelf te beschermen tegen SQL Injection-aanvallen.
- 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.
- Voorbereide instructies - voorbereide instructies die 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.
- Reguliere expressies - deze kunnen worden gebruikt om mogelijk schadelijke code te detecteren en deze te verwijderen voordat de SQL-instructies worden uitgevoerd.
- Toegangsrechten voor gebruikers van databaseverbindingen - alleen de benodigde toegangsrechten mogen worden toegekend 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 later opnieuw ”kan worden gebruikt in plaats van de SQL-instructies weer te geven die de fout veroorzaakten.
Hacking-activiteit: 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.
Opmerking: uw antivirusprogramma kan het markeren vanwege zijn aard. U moet het toevoegen aan de lijst met uitsluitingen of uw antivirussoftware pauzeren.
De onderstaande afbeelding toont het hoofdvenster voor Havij
De bovenstaande tool kan worden gebruikt om de kwetsbaarheid van een website / applicatie te beoordelen.
Overzicht
- 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 en bij te werken en te verwijderen.
- Hulpprogramma's voor SQL-injectie omvatten SQLMap, SQLPing en SQLSmack, enz.
- Een goed beveiligingsbeleid bij het schrijven van SQL-instructies kan SQL-injectieaanvallen helpen verminderen.