SQL Injection Tutorial: Lær med eksempel

Indholdsfortegnelse:

Anonim

Data er en af ​​de mest vitale komponenter i informationssystemer. Databasedrevne webapplikationer bruges af organisationen til at hente data fra kunder. SQL er forkortelsen for Structured Query Language. Det bruges til at hente og manipulere data i databasen.

Hvad er en SQL Injection?

SQL Injection er et angreb, der forgifter dynamiske SQL-sætninger for at kommentere bestemte dele af udsagnet eller tilføje en tilstand, der altid vil være sand. Det udnytter designfejlene i dårligt designede webapplikationer til at udnytte SQL-sætninger til at udføre ondsindet SQL-kode.

I denne vejledning lærer du SQL Injection-teknikker, og hvordan du kan beskytte webapplikationer mod sådanne angreb.

  • Sådan fungerer SQL Injection
  • Hackingaktivitet: SQL indsprøjt en webapplikation
  • Andre SQL Injection angrebstyper
  • Automatiseringsværktøjer til SQL-injektion
  • Sådan forhindres mod SQL-injektionsangreb
  • Hacking-aktivitet: Brug Havji til SQL-injektion

Sådan fungerer SQL Injection

De typer angreb, der kan udføres ved hjælp af SQL-injektion, varierer afhængigt af databasemotortypen. Angrebet fungerer på dynamiske SQL-sætninger . En dynamisk erklæring er en erklæring, der genereres ved kørsel ved hjælp af parametreadgangskode fra en webformular eller URI-forespørgselsstreng.

Lad os overveje en simpel webapplikation med en loginformular. Koden til HTML-formularen vises nedenfor.

HER,

  • Ovenstående form accepterer e-mail-adressen, og adgangskoden sender dem derefter til en PHP-fil med navnet index.php.
  • Det har en mulighed for at gemme login-sessionen i en cookie. Vi har trukket dette fra afkrydsningsfeltet remember_me. Det bruger post-metoden til at indsende data. Dette betyder, at værdierne ikke vises i URL'en.

Lad os antage, at udsagnet i backend til kontrol af bruger-ID er som følger

VÆLG * FRA brugere, HVOR e-mail = $ _POST ['email'] OG password = md5 ($ _ POST ['password']);

HER,

  • Ovenstående erklæring bruger værdierne i $ _POST [] -arrayet direkte uden at desinficere dem.
  • Adgangskoden krypteres ved hjælp af MD5-algoritme.

Vi illustrerer SQL-injektionsangreb ved hjælp af sqlfiddle. Åbn URL'en http://sqlfiddle.com/ i din webbrowser. Du får følgende vindue.

Bemærk: Du bliver nødt til at skrive SQL-udsagnene

Trin 1) Indtast denne kode i venstre rude

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'));

Trin 2) Klik på Byg skema

Trin 3) Indtast denne kode i højre rude

vælg * blandt brugerne;

Trin 4) Klik på Kør SQL. Du vil se følgende resultat

Antag, at brugerforsyninger Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se den. og 1234 som adgangskode. Erklæringen, der skal udføres mod databasen, ville være

VÆLG * FRA brugere WHERE email = ' Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se det. ' OG adgangskode = md5 ('1234');

Ovenstående kode kan udnyttes ved at kommentere adgangskodedelen og tilføje en betingelse, der altid vil være sand. Lad os antage, at en hacker angiver følgende input i feltet E-mail-adresse.

Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se det. ' ELLER 1 = 1 GRÆNSE 1 - ']

xxx for adgangskoden.

Den genererede dynamiske sætning vil være som følger.

VÆLG * FRA brugere WHERE email = ' Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se det. ' ELLER 1 = 1 GRÆNSE 1 - '] OG adgangskode = md5 (' 1234 ');

HER,

  • Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se den. ender med et enkelt tilbud, der fuldender streng citatet
  • ELLER 1 = 1 GRÆNSE 1 er en betingelse, der altid vil være sand og begrænser de returnerede resultater til kun en post.
  • - 'OG ... er en SQL-kommentar, der fjerner adgangskodedelen.

Kopier ovenstående SQL-sætning og indsæt den i SQL FiddleRun SQL-tekstfelt som vist nedenfor

Hackingaktivitet: SQL indsprøjt en webapplikation

Vi har en enkel webapplikation på http://www.techpanda.org/, der kun er sårbar over for SQL Injection-angreb til demonstrationsformål. HTML-formkoden ovenfor er taget fra login-siden. Applikationen giver grundlæggende sikkerhed, såsom rensning af e-mail-feltet. Dette betyder, at vores ovennævnte kode ikke kan bruges til at omgå login.

For at komme rundt om det kan vi i stedet udnytte adgangskodefeltet. Diagrammet nedenfor viser de trin, du skal følge

Lad os antage, at en hacker leverer følgende input

  • Trin 1: Indtast denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se den. som e-mail-adresse
  • Trin 2: Indtast xxx ') ELLER 1 = 1 -]
  • Klik på knappen Send
  • Du vil blive dirigeret til instrumentbrættet

Den genererede SQL-sætning vil være som følger

VÆLG * FRA brugere WHERE email = ' Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se det. ' OG adgangskode = md5 ('xxx') ELLER 1 = 1 -] ');

Diagrammet nedenfor illustrerer udsagnet er genereret.

HER,

  • Erklæringen antager intelligent, at md5-kryptering bruges
  • Fuldfører det enkelte tilbud og lukkebeslaget
  • Tilføjer en betingelse til udsagnet, der altid vil være sand

Generelt forsøger et vellykket SQL Injection-angreb en række forskellige teknikker som dem, der er vist ovenfor, for at udføre et vellykket angreb.

Andre SQL Injection angrebstyper

SQL-injektioner kan gøre mere skade end bare ved at videregive login-algoritmerne. Nogle af angrebene inkluderer

  • Sletning af data
  • Opdatering af data
  • Indsættelse af data
  • Udførelse af kommandoer på serveren, der kan downloade og installere ondsindede programmer såsom trojanske heste
  • Eksport af værdifulde data såsom kreditkortoplysninger, e-mail og adgangskoder til angriberens fjernserver
  • Få brugeroplysninger om bruger osv

Ovenstående liste er ikke udtømmende; det giver dig bare en idé om, hvad SQL Injection

Automatiseringsværktøjer til SQL-injektion

I ovenstående eksempel brugte vi manuelle angrebsteknikker baseret på vores store viden om SQL. Der er automatiserede værktøjer, der kan hjælpe dig med at udføre angrebene mere effektivt og inden for den kortest mulige tid. Disse værktøjer inkluderer

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Sådan forhindres mod SQL-injektionsangreb

En organisation kan vedtage følgende politik for at beskytte sig mod SQL Injection-angreb.

  • Brugerinput skal aldrig stole på - Det skal altid desinficeres, før det bruges i dynamiske SQL-sætninger.
  • Gemte procedurer - disse kan indkapsle SQL-sætningerne og behandle alle input som parametre.
  • Forberedte udsagn - forberedte udsagn til at arbejde ved at oprette SQL-sætningen først behandle alle indsendte brugerdata som parametre. Dette har ingen indvirkning på syntaksen for SQL-sætningen.
  • Regulære udtryk - disse kan bruges til at opdage potentiel skadelig kode og fjerne den, før SQL-sætningerne udføres.
  • Databaseforbindelse brugeradgangsrettigheder - kun nødvendige adgangsrettigheder skal gives til konti, der bruges til at oprette forbindelse til databasen. Dette kan hjælpe med at reducere, hvad SQL-sætningerne kan udføre på serveren.
  • Fejlmeddelelser - disse bør ikke afsløre følsomme oplysninger, og hvor nøjagtigt der opstod en fejl. Enkle brugerdefinerede fejlmeddelelser såsom “Beklager, vi oplever tekniske fejl. Det tekniske team er blevet kontaktet. Prøv igen senere ”kan bruges i stedet for at vise de SQL-sætninger, der forårsagede fejlen.

Hackingaktivitet: Brug Havij til SQL-injektion

I dette praktiske scenarie skal vi bruge Havij Advanced SQL Injection-programmet til at scanne et websted for sårbarheder.

Bemærk: dit antivirusprogram markerer det muligvis på grund af dets natur. Du skal føje den til listen over udelukkelser eller sætte din antivirussoftware på pause.

Billedet nedenfor viser hovedvinduet for Havij

Ovenstående værktøj kan bruges til at vurdere et websteds / applikations sårbarhed.

Resumé

  • SQL Injection er en angrebstype, der udnytter dårlige SQL-sætninger
  • SQL-injektion kan bruges til at omgå login-algoritmer, hente, indsætte og opdatere og slette data.
  • SQL-injektionsværktøjer inkluderer SQLMap, SQLPing og SQLSmack osv.
  • En god sikkerhedspolitik, når du skriver SQL-sætning, kan hjælpe med at reducere SQL-injektionsangreb.