Data är en av de viktigaste komponenterna i informationssystem. Databasdrivna webbapplikationer används av organisationen för att få data från kunder. SQL är förkortningen för Structured Query Language. Den används för att hämta och manipulera data i databasen.
Vad är en SQL-injektion?
SQL Injection är en attack som förgiftar dynamiska SQL-uttalanden för att kommentera vissa delar av uttalandet eller lägga till ett villkor som alltid kommer att vara sant. Det utnyttjar designfel i dåligt utformade webbapplikationer för att utnyttja SQL-uttalanden för att utföra skadlig SQL-kod.
I denna handledning lär du dig SQL Injection-tekniker och hur du kan skydda webbapplikationer från sådana attacker.
- Hur SQL Injection fungerar
- Hackningsaktivitet: SQL injicera en webbapplikation
- Andra SQL-injektionsattacktyper
- Automationsverktyg för SQL-injektion
- Hur man förhindrar mot SQL-injektionsattacker
- Hackaktivitet: Använd Havji för SQL-injektion
Hur SQL Injection fungerar
De typer av attacker som kan utföras med SQL-injektion varierar beroende på typ av databasmotor. Attacken fungerar på dynamiska SQL-uttalanden . Ett dynamiskt uttalande är ett uttalande som genereras vid körning med parametern lösenord från en webbformulär eller URI-frågesträng.
Låt oss överväga en enkel webbapplikation med ett inloggningsformulär. Koden för HTML-formuläret visas nedan.
HÄR,
- Ovanstående formulär accepterar e-postadressen och lösenordet skickar dem sedan till en PHP-fil med namnet index.php.
- Det har möjlighet att lagra inloggningssessionen i en cookie. Vi har dragit detta från kryssrutan remember_me. Den använder postmetoden för att skicka data. Detta innebär att värdena inte visas i webbadressen.
Låt oss anta att uttalandet i backend för kontroll av användar-ID är som följer
VÄLJ * FRÅN användare VAR e-post = $ _POST ['email'] OCH lösenord = md5 ($ _ POST ['lösenord']);
HÄR,
- Ovanstående uttalande använder värdena för $ _POST [] -matrisen direkt utan att desinficera dem.
- Lösenordet krypteras med MD5-algoritmen.
Vi kommer att illustrera SQL-injektionsattack med sqlfiddle. Öppna webbadressen http://sqlfiddle.com/ i din webbläsare. Du får följande fönster.
Obs! Du måste skriva SQL-uttalanden
Steg 1) Ange den här koden i den vänstra rutan
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'));
Steg 2) Klicka på Byggschema
Steg 3) Ange den här koden i den högra rutan
välj * bland användare;
Steg 4) Klicka på Kör SQL. Du kommer att se följande resultat
Antag att användartillbehör Denna e-postadress är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. och 1234 som lösenord. Uttalandet som ska köras mot databasen skulle vara
VÄLJ * FRÅN användare VAR e-post = 'Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. ' OCH lösenord = md5 ('1234');
Ovanstående kod kan utnyttjas genom att kommentera lösenordsdelen och lägga till ett villkor som alltid kommer att vara sant. Låt oss anta att en angripare tillhandahåller följande inmatning i e-postadressfältet.
Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. ' ELLER 1 = 1 GRÄNS 1 - ']
xxx för lösenordet.
Det genererade dynamiska uttalandet kommer att vara som följer.
VÄLJ * FRÅN användare VAR e-post = 'Den här e-postadressen skyddas från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. ' ELLER 1 = 1 GRÄNS 1 - '] OCH lösenord = md5 (' 1234 ');
HÄR,
- Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. slutar med en enda offert som kompletterar strängoffertet
- ELLER 1 = 1 GRÄNS 1 är ett villkor som alltid kommer att vara sant och begränsar de returnerade resultaten till endast en post.
- - 'OCH ... är en SQL-kommentar som eliminerar lösenordsdelen.
Kopiera ovanstående SQL-sats och klistra in det i SQL FiddleRun SQL Text-rutan som visas nedan
Hackningsaktivitet: SQL injicera en webbapplikation
Vi har en enkel webbapplikation på http://www.techpanda.org/ som är sårbar för SQL Injection-attacker endast för demonstrationsändamål. HTML-formulärkoden ovan är hämtad från inloggningssidan. Applikationen ger grundläggande säkerhet som att desinficera e-postfältet. Det betyder att vår kod ovan inte kan användas för att kringgå inloggningen.
För att komma runt det kan vi istället utnyttja lösenordsfältet. Diagrammet nedan visar stegen du måste följa
Låt oss anta att en angripare ger följande input
- Steg 1: Ange den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. som e-postadress
- Steg 2: Ange xxx ') ELLER 1 = 1 -]
- Klicka på knappen Skicka
- Du kommer att skickas till instrumentpanelen
Det genererade SQL-uttalandet kommer att vara som följer
VÄLJ * FRÅN användare VAR e-post = 'Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det. ' OCH lösenord = md5 ('xxx') ELLER 1 = 1 -] ');
Diagrammet nedan illustrerar uttalandet har genererats.
HÄR,
- Uttalandet förutsätter intelligent att md5-kryptering används
- Slutför den enskilda offerten och stängningsfästet
- Lägger till ett villkor i uttalandet som alltid kommer att vara sant
I allmänhet försöker en framgångsrik SQL Injection-attack ett antal olika tekniker som de som visas ovan för att utföra en framgångsrik attack.
Andra SQL-injektionsattacktyper
SQL-injektioner kan göra mer skada än bara genom att skicka inloggningsalgoritmerna. Några av attackerna inkluderar
- Radera data
- Uppdaterar data
- Infoga data
- Köra kommandon på servern som kan ladda ner och installera skadliga program som trojaner
- Exportera värdefull information som kreditkortsinformation, e-post och lösenord till angriparens fjärrserver
- Få användarinloggningsinformation etc.
Ovanstående lista är inte uttömmande; det ger dig bara en uppfattning om vilken SQL-injektion
Automationsverktyg för SQL-injektion
I exemplet ovan använde vi manuella attacktekniker baserat på vår stora kunskap om SQL. Det finns automatiserade verktyg som kan hjälpa dig att utföra attackerna mer effektivt och på kortast möjliga tid. Dessa verktyg inkluderar
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Hur man förhindrar mot SQL-injektionsattacker
En organisation kan anta följande policy för att skydda sig mot SQL Injection-attacker.
- Användarinmatning ska aldrig lita på - den måste alltid göras ren innan den används i dynamiska SQL-uttalanden.
- Lagrade procedurer - dessa kan inkapsla SQL-satserna och behandla alla inmatningar som parametrar.
- Förberedda uttalanden - förberedda uttalanden för att fungera genom att skapa SQL-uttalandet först behandla sedan alla inlämnade användardata som parametrar. Detta har ingen inverkan på syntaxen för SQL-satsen.
- Regelbundna uttryck - dessa kan användas för att upptäcka potentiell skadlig kod och ta bort den innan SQL-uttalanden körs.
- Användaråtkomsträttigheter för databasanslutning - endast nödvändiga åtkomsträttigheter bör ges till konton som används för att ansluta till databasen. Detta kan bidra till att minska vad SQL-uttalanden kan utföra på servern.
- Felmeddelanden - dessa bör inte avslöja känslig information och var exakt ett fel inträffade. Enkla anpassade felmeddelanden som ”Tyvärr, vi har tekniska fel. Det tekniska teamet har kontaktats. Försök igen senare ”kan användas istället för att visa SQL-uttalanden som orsakade felet.
Hackaktivitet: Använd Havij för SQL-injektion
I detta praktiska scenario ska vi använda Havij Advanced SQL Injection-program för att skanna en webbplats för sårbarheter.
Obs: ditt antivirusprogram kan flagga det på grund av dess natur. Du bör lägga till den i undantagslistan eller pausa ditt antivirusprogram.
Bilden nedan visar huvudfönstret för Havij
Ovanstående verktyg kan användas för att bedöma sårbarheten hos en webbplats / applikation.
Sammanfattning
- SQL Injection är en attacktyp som utnyttjar dåliga SQL-uttalanden
- SQL-injektion kan användas för att kringgå inloggningsalgoritmer, hämta, infoga och uppdatera och ta bort data.
- SQL-injektionsverktyg inkluderar SQLMap, SQLPing och SQLSmack, etc.
- En bra säkerhetspolicy när du skriver SQL-uttalande kan bidra till att minska SQL-injektionsattacker.