Vadnica za vbrizgavanje SQL: Naučite se s primerom

Kazalo:

Anonim

Podatki so ena najpomembnejših komponent informacijskih sistemov. Spletne aplikacije, ki temeljijo na podatkovnih bazah, organizacija uporablja za pridobivanje podatkov od strank. SQL je kratica za jezik strukturiranih poizvedb. Uporablja se za pridobivanje in obdelavo podatkov v bazi podatkov.

Kaj je vbrizgavanje SQL?

SQL Injection je napad, ki zastrupi dinamične stavke SQL, da komentira določene dele stavka ali doda pogoj, ki bo vedno resničen. Napake oblikovanja v slabo zasnovanih spletnih aplikacijah izkorišča za izkoriščanje stavkov SQL za izvajanje zlonamerne kode SQL.

V tej vadnici boste spoznali tehnike vbrizgavanja SQL in kako lahko zaščitite spletne aplikacije pred takimi napadi.

  • Kako deluje SQL Injection
  • Dejavnost vdora: SQL vbrizga spletno aplikacijo
  • Druge vrste napadov SQL Injection
  • Orodja za avtomatizacijo za vbrizgavanje SQL
  • Kako preprečiti napade vbrizgavanja SQL
  • Dejavnost vdora: Uporabite Havji za vbrizgavanje SQL

Kako deluje SQL Injection

Vrste napadov, ki jih je mogoče izvesti z vbrizgavanjem SQL, se razlikujejo glede na vrsto mehanizma baze podatkov. Napad deluje na dinamične stavke SQL . Dinamični stavek je stavek, ki se ustvari med izvajanjem z uporabo gesla parametrov iz spletnega obrazca ali poizvedbenega niza URI.

Razmislimo o preprosti spletni aplikaciji z obrazcem za prijavo. Koda za obrazec HTML je prikazana spodaj.

TUKAJ,

  • Zgornji obrazec sprejema e-poštni naslov in geslo nato pošlje v datoteko PHP z imenom index.php.
  • Ima možnost shranjevanja prijavne seje v piškotek. To smo ugotovili iz potrditvenega polja Remember_me. Za pošiljanje podatkov uporablja metodo post. To pomeni, da vrednosti niso prikazane v URL-ju.

Predpostavimo, da je izjava na zaledju za preverjanje uporabniškega ID-ja naslednja

SELECT * FROM users WHERE email = $ _POST ['email'] IN geslo = md5 ($ _ POST ['geslo']);

TUKAJ,

  • Zgornji stavek neposredno uporablja vrednosti polja $ _POST [], ne da bi jih razkuževal.
  • Geslo je šifrirano z algoritmom MD5.

Pokazali bomo napad vbrizgavanja SQL z uporabo sqlfiddle. V spletnem brskalniku odprite URL http://sqlfiddle.com/. Dobili boste naslednje okno.

Opomba: napisati boste morali stavke SQL

Korak 1) Vnesite to kodo v levo podokno

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

Korak 2) Kliknite Build Schema

Korak 3) Vnesite to kodo v desno podokno

izberite * med uporabniki;

Korak 4) Kliknite Zaženi SQL. Videli boste naslednji rezultat

Recimo, da uporabniške potrebščine Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. in 1234 kot geslo. Stavek, ki naj se izvrši proti bazi podatkov, bi bil

SELECT * FROM users WHERE email = ' Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. ' IN geslo = md5 ('1234');

Zgornjo kodo lahko izkoristite tako, da komentirate del gesla in dodate pogoj, ki bo vedno resničen. Recimo, da napadalec v polje za e-poštni naslov vnese naslednji vnos.

Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. ' ALI 1 = 1 OMEJITEV 1 - ']

xxx za geslo.

Ustvarjeni dinamični stavek bo naslednji.

SELECT * FROM users WHERE email = ' Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. ' ALI 1 = 1 OMEJITEV 1 - '] IN geslo = md5 (' 1234 ');

TUKAJ,

  • Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. se konča z enim narekovajem, ki dopolnjuje niz z navednicami
  • ALI 1 = 1 LIMIT 1 je pogoj, ki bo vedno resničen in vrne rezultate na samo en zapis.
  • - 'AND ... je komentar v SQL, ki odpravlja del gesla.

Kopirajte zgornji stavek SQL in ga prilepite v polje z besedilom SQL FiddleRun SQL, kot je prikazano spodaj

Dejavnost vdora: SQL vbrizga spletno aplikacijo

Na spletnem mestu http://www.techpanda.org/ imamo preprosto spletno aplikacijo, ki je ranljiva za napade SQL Injection samo za predstavitvene namene. Zgornja koda obrazca HTML je vzeta s strani za prijavo. Aplikacija zagotavlja osnovno varnost, na primer čiščenje e-poštnega polja. To pomeni, da naše zgornje kode ni mogoče uporabiti za izogibanje prijavi.

Da bi to zaobšli, lahko raje uporabimo polje za geslo. Spodnji diagram prikazuje korake, ki jih morate upoštevati

Recimo, da napadalec poda naslednji vnos

  • 1. korak: Vnesite Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. kot e-poštni naslov
  • 2. korak: Vnesite xxx ') ALI 1 = 1 -]
  • Kliknite gumb Pošlji
  • Usmerjeni boste na armaturno ploščo

Ustvarjeni stavek SQL bo naslednji

SELECT * FROM users WHERE email = ' Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. ' IN geslo = md5 ('xxx') ALI 1 = 1 -] ');

Spodnji diagram ponazarja, da je bila izjava ustvarjena.

TUKAJ,

  • Izjava pametno predvideva, da se uporablja šifriranje md5
  • Dopolni enojni narekovaj in zaključni oklepaj
  • Izjavi doda pogoj, ki bo vedno resničen

Na splošno uspešen napad vbrizgavanja SQL poskuša številne različne tehnike, kot so zgoraj prikazane, za izvedbo uspešnega napada.

Druge vrste napadov SQL Injection

Injekcije SQL lahko škodijo več kot zgolj s posredovanjem prijavnih algoritmov. Nekateri napadi vključujejo

  • Brisanje podatkov
  • Posodabljanje podatkov
  • Vstavljanje podatkov
  • Izvajanje ukazov na strežniku, ki lahko prenesejo in namestijo zlonamerne programe, kot so trojanci
  • Izvoz dragocenih podatkov, kot so podatki o kreditni kartici, e-pošta in gesla, na oddaljeni strežnik napadalca
  • Pridobivanje uporabniških podatkov za prijavo itd

Zgornji seznam ni izčrpen; samo daje idejo, kaj SQL Injection

Orodja za avtomatizacijo za vbrizgavanje SQL

V zgornjem primeru smo uporabili tehnike ročnega napada, ki temeljijo na našem obsežnem znanju SQL. Obstajajo avtomatizirana orodja, s katerimi lahko napade izvedete učinkoviteje in v najkrajšem možnem času. Ta orodja vključujejo

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

Kako preprečiti napade vbrizgavanja SQL

Organizacija lahko sprejme naslednjo politiko, da se zaščiti pred napadi SQL Injection.

  • Uporabniškemu vnosu nikoli ne bi smeli zaupati - pred uporabo v dinamičnih stavkih SQL ga je treba vedno sanirati.
  • Shranjeni postopki - ti lahko zajemajo stavke SQL in vse vnose obravnavajo kot parametre.
  • Pripravljeni stavki - pripravljeni stavki za delo tako, da najprej ustvarijo stavek SQL, nato pa vse predložene uporabniške podatke obravnavajo kot parametre. To ne vpliva na sintakso stavka SQL.
  • Regularni izrazi - z njimi lahko zaznate morebitno škodljivo kodo in jo odstranite pred izvajanjem stavkov SQL.
  • Pravice uporabniškega dostopa do povezave z bazo podatkov - do računov, ki se uporabljajo za povezavo z bazo podatkov, morajo biti dodeljene samo potrebne pravice dostopa. To lahko pomaga zmanjšati, kaj lahko stavki SQL izvajajo na strežniku.
  • Sporočila o napakah - ta ne smejo razkriti občutljivih informacij in kje natančno je prišlo do napake. Preprosta sporočila o napakah po meri, na primer »Žal imamo tehnične napake. Opisana je bila tehnična ekipa. Poskusite znova pozneje «se lahko uporabi namesto prikaza stavkov SQL, ki so povzročili napako.

Dejavnost vdora: Uporabite Havij za SQL Injection

V tem praktičnem scenariju bomo uporabili program Havij Advanced SQL Injection za skeniranje spletnega mesta glede ranljivosti.

Opomba: vaš protivirusni program ga lahko označi zaradi svoje narave. Dodajte ga na seznam izključitev ali zaustavite protivirusno programsko opremo.

Spodnja slika prikazuje glavno okno za Havij

Zgornje orodje lahko uporabimo za oceno ranljivosti spletnega mesta / aplikacije.

Povzetek

  • SQL Injection je vrsta napada, ki izkorišča slabe izjave SQL
  • Vbrizgavanje SQL lahko uporabimo za zaobjem algoritmov za prijavo, pridobivanje, vstavljanje in posodabljanje ter brisanje podatkov.
  • Orodja za vbrizgavanje SQL vključujejo SQLMap, SQLPing in SQLSmack itd.
  • Dobra varnostna politika pri pisanju izjave SQL lahko pomaga zmanjšati napade vbrizgavanja SQL.