Podaci su jedna od najvažnijih sastavnica informacijskih sustava. Web aplikacije koje koriste baze podataka koriste organizacije za dobivanje podataka od kupaca. SQL je kratica za jezik strukturiranih upita. Koristi se za dohvaćanje i upravljanje podacima u bazi podataka.
Što je SQL injekcija?
SQL Injection je napad koji truje dinamičke SQL izraze kako bi komentirao određene dijelove izraza ili dodao uvjet koji će uvijek biti istinit. Koristi nedostatke dizajna u loše dizajniranim web aplikacijama za iskorištavanje SQL izraza za izvršavanje zlonamjernog SQL koda.
U ovom vodiču naučit ćete tehnike ubrizgavanja SQL i kako možete zaštititi web aplikacije od takvih napada.
- Kako funkcionira SQL Injection
- Aktivnost hakiranja: SQL ubrizgava web aplikaciju
- Ostale vrste napada SQL Injection
- Alati za automatizaciju za SQL ubrizgavanje
- Kako spriječiti napade SQL ubrizgavanja
- Aktivnost hakiranja: Upotrijebite Havji za SQL Injection
Kako funkcionira SQL Injection
Vrste napada koje se mogu izvesti pomoću SQL ubrizgavanja razlikuju se ovisno o vrsti motora baze podataka. Napad djeluje na dinamičke SQL izraze . Dinamički izraz je izraz koji se generira u vrijeme izvođenja pomoću lozinke parametara iz web obrasca ili URI niza upita.
Razmotrimo jednostavnu web aplikaciju s obrascem za prijavu. Kôd za HTML obrazac prikazan je u nastavku.
OVDJE,
- Gornji obrazac prihvaća adresu e-pošte, a lozinka ih zatim šalje u PHP datoteku pod nazivom index.php.
- Ima mogućnost pohrane sesije prijave u kolačić. To smo zaključili iz potvrdnog okvira Remember_me. Za slanje podataka koristi metodu objavljivanja. To znači da se vrijednosti ne prikazuju u URL-u.
Pretpostavimo da je izjava na pozadini za provjeru korisničkog ID-a sljedeća
ODABERITE * OD korisnika GDJE email = $ _POST ['email'] I lozinka = md5 ($ _ POST ['lozinka']);
OVDJE,
- Gornja izjava izravno koristi vrijednosti niza $ _POST [] bez njihove sanacije.
- Lozinka je šifrirana pomoću MD5 algoritma.
Ilustrirat ćemo napad SQL ubrizgavanjem pomoću sqlfiddle. Otvorite URL http://sqlfiddle.com/ u svom web pregledniku. Dobit ćete sljedeći prozor.
Napomena: morat ćete napisati SQL izraze
Korak 1) Unesite ovaj kôd u lijevo okno
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 Izgradi shemu
Korak 3) Unesite ovaj kôd u desno okno
odaberite * od korisnika;
Korak 4) Kliknite Pokreni SQL. Vidjet ćete sljedeći rezultat
Pretpostavimo da korisničke potrepštine Ova adresa e-pošte je zaštićena od neželjenih robota. Ako ga želite pregledati, potreban vam je omogućen JavaScript. i 1234 kao lozinku. Izjava koja bi se izvršila protiv baze podataka bila bi
SELECT * FROM users WHERE email = ' Ova adresa e-pošte zaštićena je od neželjenih robota. Ako ga želite pregledati, potreban vam je Java-skripta. ' I lozinka = md5 ('1234');
Gornji kod se može iskoristiti komentiranjem dijela lozinke i dodavanjem uvjeta koji će uvijek biti istinit. Pretpostavimo da napadač daje sljedeći unos u polje adrese e-pošte.
Ova adresa e-pošte zaštićena je od neželjenih robota. Ako ga želite pregledati, potreban vam je Java-skripta. ' ILI 1 = 1 OGRANIČITE 1 - ']
xxx za lozinku.
Generirani dinamički iskaz bit će sljedeći.
SELECT * FROM users WHERE email = ' Ova adresa e-pošte zaštićena je od neželjenih robota. Ako ga želite pregledati, potreban vam je Java-skripta. ' ILI 1 = 1 OGRANIČITE 1 - '] I lozinka = md5 (' 1234 ');
OVDJE,
- Ova adresa e-pošte zaštićena je od neželjenih robota. Ako ga želite pregledati, potreban vam je omogućen JavaScript. završava jednim navodnikom koji dovršava navodnik niza
- ILI 1 = 1 OGRANIČENJE 1 uvjet je koji će uvijek biti istina i ograničava vraćene rezultate na samo jedan zapis.
- - 'I ... je SQL komentar koji uklanja dio lozinke.
Kopirajte gornju SQL izjavu i zalijepite je u SQL FiddleRun SQL tekstni okvir kao što je prikazano u nastavku
Aktivnost hakiranja: SQL ubrizgava web aplikaciju
Imamo jednostavnu web-aplikaciju na http://www.techpanda.org/ koja je ranjiva na napade SQL Injection samo u svrhu demonstracije. Kôd HTML obrasca preuzet je sa stranice za prijavu. Aplikacija pruža osnovnu sigurnost kao što je sanacija polja e-pošte. To znači da se naš gornji kôd ne može koristiti za zaobilaženje prijave.
Da bismo to zaobišli, možemo umjesto toga iskoristiti polje lozinke. Dijagram u nastavku prikazuje korake koje morate slijediti
Pretpostavimo da napadač daje sljedeći ulaz
- Korak 1: Unesite Ova adresa e-pošte zaštićena je od neželjenih robota. Ako ga želite pregledati, potreban vam je omogućen JavaScript. kao adresa e-pošte
- Korak 2: Unesite xxx ') ILI 1 = 1 -]
- Kliknite gumb Pošalji
- Bit ćete usmjereni na nadzornu ploču
Generirani SQL izraz bit će sljedeći
SELECT * FROM users WHERE email = ' Ova adresa e-pošte zaštićena je od neželjenih robota. Ako ga želite pregledati, potreban vam je Java-skripta. ' I lozinka = md5 ('xxx') ILI 1 = 1 -] ');
Dijagram u nastavku ilustrira da je izjava generirana.
OVDJE,
- Izjava pametno pretpostavlja da se koristi md5 enkripcija
- Dovršava jedan navodnik i završnu zagradu
- Izjavi dodaje uvjet koji će uvijek biti istinit
Općenito, uspješan napad ubrizgavanja SQL pokušava niz različitih tehnika poput gore prikazanih kako bi izveo uspješan napad.
Ostale vrste napada SQL Injection
SQL injekcije mogu naštetiti više nego samo prosljeđivanjem algoritama za prijavu. Neki od napada uključuju
- Brisanje podataka
- Ažuriranje podataka
- Umetanje podataka
- Izvršavanje naredbi na poslužitelju koje mogu preuzeti i instalirati zlonamjerne programe poput trojanskih programa
- Izvoz dragocjenih podataka poput podataka o kreditnoj kartici, e-pošte i lozinki na udaljeni poslužitelj napadača
- Dobivanje podataka za prijavu korisnika itd
Gornji popis nije iscrpan; to vam samo daje ideju o tome što SQL Injection
Alati za automatizaciju za SQL ubrizgavanje
U gornjem primjeru koristili smo tehnike ručnog napada zasnovane na našem velikom znanju SQL-a. Postoje automatizirani alati koji vam mogu pomoći da učinite napade učinkovitije i u najkraćem mogućem roku. Ovi alati uključuju
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Kako spriječiti napade SQL ubrizgavanja
Organizacija može usvojiti sljedeće politike kako bi se zaštitila od napada SQL Injection.
- Nikada se ne smije vjerovati korisničkom unosu - uvijek ga treba sanirati prije nego što se koristi u dinamičkim SQL izrazima.
- Pohranjene procedure - one mogu inkapsulirati SQL izraze i sav ulaz tretirati kao parametre.
- Pripremljeni izrazi - pripremljeni izrazi koji će raditi prvo stvaranjem SQL izraza, a zatim tretiranjem svih poslanih korisničkih podataka kao parametara. To nema utjecaja na sintaksu SQL izraza.
- Regularni izrazi - oni se mogu koristiti za otkrivanje potencijalno štetnog koda i njegovo uklanjanje prije izvođenja SQL izraza.
- Korisnička prava pristupa veze na bazu podataka - računi koji se koriste za povezivanje s bazom podataka trebaju dobiti samo potrebna prava pristupa. To može pomoći smanjiti ono što SQL izrazi mogu izvoditi na poslužitelju.
- Poruke pogreške - one ne bi trebale otkriti osjetljive podatke i gdje se točno dogodila pogreška. Jednostavne prilagođene poruke o pogreškama poput "Žao nam je, imamo tehničke pogreške. Kontaktiran je tehnički tim. Pokušajte ponovo kasnije ”može se koristiti umjesto prikazivanja SQL izraza koji su uzrokovali pogrešku.
Aktivnost hakiranja: Koristite Havij za SQL Injection
U ovom praktičnom scenariju koristit ćemo program Havij Advanced SQL Injection za skeniranje web stranica radi ranjivosti.
Napomena: vaš ga antivirusni program može označiti zbog svoje prirode. Trebali biste ga dodati na popis izuzeća ili zaustaviti antivirusni softver.
Na slici ispod prikazan je glavni prozor za Havij
Gornji alat može se koristiti za procjenu ranjivosti web mjesta / aplikacije.
Sažetak
- SQL Injection je vrsta napada koja iskorištava loše SQL izraze
- SQL ubrizgavanje može se koristiti za zaobilaženje algoritama za prijavu, dohvaćanje, umetanje i ažuriranje i brisanje podataka.
- Alati za ubrizgavanje SQL-a uključuju SQLMap, SQLPing i SQLSmack itd.
- Dobra sigurnosna politika prilikom pisanja SQL izraza može pomoći u smanjenju napada SQL ubrizgavanjem.