SQL Injection Tutorial: Lær med eksempel

Innholdsfortegnelse:

Anonim

Data er en av de viktigste komponentene i informasjonssystemene. Databasedrevne webapplikasjoner brukes av organisasjonen for å få data fra kunder. SQL er forkortelsen for Structured Query Language. Den brukes til å hente og manipulere data i databasen.

Hva er en SQL Injection?

SQL Injection er et angrep som forgifter dynamiske SQL-setninger for å kommentere visse deler av setningen eller legge til en tilstand som alltid vil være sant. Det utnytter designfeilene i dårlig utformede webapplikasjoner for å utnytte SQL-setninger for å utføre ondsinnet SQL-kode.

I denne veiledningen lærer du SQL Injection-teknikker og hvordan du kan beskytte webapplikasjoner mot slike angrep.

  • Hvordan SQL Injection fungerer
  • Hackingsaktivitet: SQL Injiser et webapplikasjon
  • Andre SQL Injection angrepstyper
  • Automatiseringsverktøy for SQL-injeksjon
  • Hvordan forhindre SQL-injeksjonsangrep
  • Hackingsaktivitet: Bruk Havji til SQL Injection

Hvordan SQL Injection fungerer

Hvilke typer angrep som kan utføres ved hjelp av SQL-injeksjon, varierer avhengig av typen databasemotor. Angrepet fungerer på dynamiske SQL-setninger . En dynamisk setning er en setning som genereres ved kjøretid ved hjelp av parameterpassord fra et webskjema eller URI-spørringsstreng.

La oss vurdere en enkel webapplikasjon med et påloggingsskjema. Koden for HTML-skjemaet vises nedenfor.

HER,

  • Ovennevnte skjema godtar e-postadressen, og passordet sender dem deretter til en PHP-fil som heter index.php.
  • Det har et alternativ å lagre påloggingsøkten i en informasjonskapsel. Vi har trukket dette fra avkrysningsruten remember_me. Den bruker postmetoden for å sende inn data. Dette betyr at verdiene ikke vises i URL-en.

La oss anta at uttalelsen på baksiden for kontroll av bruker-ID er som følger

VELG * FRA brukere HVOR e-post = $ _POST ['email'] OG passord = md5 ($ _ POST ['passord']);

HER,

  • Ovennevnte utsagn bruker verdiene til $ _POST [] -matrisen direkte uten å desinfisere dem.
  • Passordet krypteres ved hjelp av MD5-algoritme.

Vi vil illustrere SQL-injeksjonsangrep ved hjelp av sqlfiddle. Åpne URL-en http://sqlfiddle.com/ i nettleseren din. Du får følgende vindu.

Merk: du må skrive SQL-setningene

Trinn 1) Skriv inn denne koden i venstre rute

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

Trinn 2) Klikk på Bygg skjema

Trinn 3) Skriv inn denne koden i høyre rute

velg * fra brukerne;

Trinn 4) Klikk Kjør SQL. Du vil se følgende resultat

Anta at brukerforsyninger Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se den. og 1234 som passord. Uttalelsen som skal utføres mot databasen vil være

VELG * FRA brukere WHERE email = ' Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se det. ' OG passord = md5 ('1234');

Ovennevnte kode kan utnyttes ved å kommentere passorddelen og legge til en tilstand som alltid vil være sant. La oss anta at en angriper gir følgende innspill i e-postadressefeltet.

Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se det. ' ELLER 1 = 1 GRENSE 1 - ']

xxx for passordet.

Den genererte dynamiske setningen vil være som følger.

VELG * FRA brukere WHERE email = ' Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se det. ' ELLER 1 = 1 GRENSE 1 - '] OG passord = md5 (' 1234 ');

HER,

  • Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se den. avsluttes med et enkelt tilbud som fullfører streng sitatet
  • ELLER 1 = 1 GRENSE 1 er en tilstand som alltid vil være sant og begrenser de returnerte resultatene til bare en post.
  • - 'OG ... er en SQL-kommentar som eliminerer passorddelen.

Kopier SQL-setningen ovenfor og lim den inn i SQL FiddleRun SQL Text-boksen som vist nedenfor

Hackingsaktivitet: SQL Injiser et webapplikasjon

Vi har en enkel webapplikasjon på http://www.techpanda.org/ som er sårbar for SQL Injection-angrep bare for demonstrasjonsformål. HTML-skjemakoden ovenfor er hentet fra påloggingssiden. Søknaden gir grunnleggende sikkerhet som å rense e-postfeltet. Dette betyr at koden ovenfor ikke kan brukes til å omgå påloggingen.

For å komme rundt det, kan vi i stedet utnytte passordfeltet. Diagrammet nedenfor viser trinnene du må følge

La oss anta at en angriper gir følgende innspill

  • Trinn 1: Skriv inn denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se den. som e-postadressen
  • Trinn 2: Skriv inn xxx ') ELLER 1 = 1 -]
  • Klikk på Send-knappen
  • Du blir sendt til dashbordet

Den genererte SQL-setningen vil være som følger

VELG * FRA brukere WHERE email = ' Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se det. ' OG passord = md5 ('xxx') ELLER 1 = 1 -] ');

Diagrammet nedenfor illustrerer utsagnet er generert.

HER,

  • Uttalelsen forutsetter intelligent at md5-kryptering brukes
  • Fullfører enkelt tilbud og lukkende brakett
  • Legger til en betingelse til utsagnet som alltid vil være sant

Generelt forsøker et vellykket SQL Injection-angrep en rekke forskjellige teknikker som de som er vist ovenfor for å utføre et vellykket angrep.

Andre SQL Injection angrepstyper

SQL Injections kan gjøre mer skade enn bare ved å sende innloggingsalgoritmene. Noen av angrepene inkluderer

  • Slette data
  • Oppdaterer data
  • Sette inn data
  • Utføre kommandoer på serveren som kan laste ned og installere ondsinnede programmer som trojanere
  • Eksporterer verdifulle data som kredittkortdetaljer, e-postadresse og passord til angriperens eksterne server
  • Få brukerinnloggingsdetaljer osv

Ovennevnte liste er ikke uttømmende; det gir deg bare en ide om hva SQL Injection

Automatiseringsverktøy for SQL-injeksjon

I eksemplet ovenfor brukte vi manuelle angrepsteknikker basert på vår enorme kunnskap om SQL. Det finnes automatiserte verktøy som kan hjelpe deg med å utføre angrepene mer effektivt og på kortest mulig tid. Disse verktøyene inkluderer

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

Hvordan forhindre SQL-injeksjonsangrep

En organisasjon kan vedta følgende policy for å beskytte seg mot SQL Injection-angrep.

  • Brukerinngang skal aldri stole på - Den må alltid rengjøres før den brukes i dynamiske SQL-setninger.
  • Lagrede prosedyrer - disse kan kapsle inn SQL-setningene og behandle alle innganger som parametere.
  • Forberedte uttalelser - forberedte uttalelser for å fungere ved å opprette SQL-setningen, og deretter behandle alle innsendte brukerdata som parametere. Dette har ingen innvirkning på syntaksen til SQL-setningen.
  • Vanlige uttrykk - disse kan brukes til å oppdage potensiell skadelig kode og fjerne den før du kjører SQL-setningene.
  • Brukertilgangsrettigheter for databasetilkobling - bare nødvendige tilgangsrettigheter skal gis til kontoer som brukes til å koble til databasen. Dette kan bidra til å redusere hva SQL-setningene kan utføre på serveren.
  • Feilmeldinger - disse skal ikke avsløre sensitiv informasjon og hvor nøyaktig en feil oppstod. Enkle tilpassede feilmeldinger som “Beklager, vi opplever tekniske feil. Det tekniske teamet er kontaktet. Vennligst prøv igjen senere ”kan brukes i stedet for å vise SQL-setningene som forårsaket feilen.

Hackingsaktivitet: Bruk Havij til SQL Injection

I dette praktiske scenariet skal vi bruke Havij Advanced SQL Injection-program til å skanne et nettsted for sårbarheter.

Merk: antivirusprogrammet ditt kan markere det på grunn av dets natur. Du bør legge den til ekskluderingslisten eller stoppe antivirusprogramvaren din midlertidig.

Bildet nedenfor viser hovedvinduet for Havij

Ovennevnte verktøy kan brukes til å vurdere sårbarheten til et nettsted / applikasjon.

Sammendrag

  • SQL Injection er en angrepstype som utnytter dårlige SQL-setninger
  • SQL-injeksjon kan brukes til å omgå påloggingsalgoritmer, hente, sette inn og oppdatere og slette data.
  • SQL-injeksjonsverktøy inkluderer SQLMap, SQLPing og SQLSmack, etc.
  • En god sikkerhetspolicy når du skriver SQL-uttalelser kan bidra til å redusere SQL-injeksjonsangrep.