SQLMap ili kako da se zaštitite od SQL injection napada
Baze podataka su osnova svake aplikacije. One nam omogućavaju da čuvamo i organizujemo velike količine podataka, tako da im lako možemo pristupiti, upravljati njima i ažurirati ih.
S obzirom da imaju tako važnu ulogu, baze podataka su često meta hakerskih napada. Zbog toga je važno da znamo kako da ih zaštitimo od tih napada i omogućimo da naše aplikacije rade nesmetano i bezbedno.
U ovom tekstu ćemo objasniti kako hakeri najčešće mogu da preuzmu kontrolu nad bazom podataka i šta možete da preduzmete da to sprečite.
Šta je SQL injection?
SQL injection je tip napada kod koga napadač ubacuje maliciozni kod u SQL statement. Ukoliko napad uspe, napadač će moći da dobije pristup osetljivim podacima u vašoj bazi podataka.
Kada preuzme kontrolu nad bazom, on može da preuzme i podatke iz nje, modifikuje ih ili čak i obriše ukoliko to želi. Evo nekoliko uobičajenih scenarija SQL injection napada:
- Napadač može da ubaci deo malicioznog koda u login formu. Na primer, ukoliko login forma očekuje da korisnik unese svoje korisničko ime i lozinku, napadač u polje admin može uneti ’ OR ‘1’=’1. To će uvek biti smatrano kao true (istinit iskaz) i omogućiće napadaču da se loguje čak iako ne zna password.
- Napadač može da ubaci deo malicioznog koda u polje za pretragu na sajtu. Na primer, ukoliko polje za pretragu očekuje da korisnik unese neku reč, napadač može da umesto reči unese ‘ OR ‘1’=’1. To će vratiti sve zapise iz baze podataka, umesto nekog koji odgovara reči koja se pretražuje.
- Napadač može da ubaci deo malicioznog koda u formu koja korisnicima omogućava da ažuriraju svoje podatke. Na primer, ukoliko ta forma očekuje da korisnik unese svoj telefonski broj, napadač u to polje može uneti ‘; DROP TABLE users; — ,. To će obrisati tabelu sa korisnicima (users) iz baze podataka.
Ovo su samo neki primeri SQL injection napada. Postoje i mnogi drugi načini i tehnike koje napadači koriste da bi pokušali da dobiju neophodne privilegije nad bazom podataka. Baze koje nisu regularno održavane i ažurirane su posebno ranjive na SQL injection napade.
Šta je SQLMap?
SQL Map je softver otvorenog koda (open source) koji automatski pronalazi SQL injection ranjivosti. Možete ga koristiti da testirate web aplikacije na SQL injection ranjivost i pristupite ranjivoj bazi.
Zbog svojih karakteristika SQLmap je omiljen alat među penetration testerima. Napisan je u Python-u i radi podjednako dobro na Windows, LInux i MacOS operativnim sistemima.
SQLmap možete koristiti za različite vrste napada na bazu podataka: fingerprinting, izvlačenje podataka, čak i preuzimanje čitave baze. Takođe ga možemo koristiti za zaobilaženje login forme i izvršavanje komandi nad operativnim sistemom.
Kako da instalirate SQLMap
SQLMap dolazi sa preinstaliranim Kali Linux i Parrot operativnim sistemom. Da biste instalirali SQLMap na sistemima zasnovanim na Ubuntu/Debian-u, potrebno je da koristite apt package manager.
apt install sqlmap
Da biste ga instalirali na Mac-u, možete da koristite Homebrew
brew install sqlmap
Ako koristite neke druge platforme, instrukcije za instalaciju možete potražiti ovde.
Kada je instalacija završena, možete proveriti i help meni korišćenjem argumenta -h. Help takođe može pomoći u radu sa SQLMap softverom.
sqlmap -h
SQLMap takođe ima i detaljan help meni, kojem možete pristupiti pomoću argumenta -hh.
sqlmap -hh
Sada kada ste instalirali SQLMap, vreme je da pogledate kako se radi sa njim.
Kako da koristite SQLMap
Da biste koristili SQLMap, prvo treba da identifikujete web sajt ili bazu podataka koji su ranjivi na SQL injection napad. To možete da uraditi ručno ili da koristite SQLMap da skenirate web sajt. Kada identifikujete ranjiv web sajt ili bazu podataka, možete da koristite SQLMap za dalje testiranje.
Evo osnovne SQLMap komande:
sqlmap -u [URL] -p [parameter] --dbs
Ova komanda će pokrenuti SQLMap sken određenog URL i parametra na ranjivosti. To podrazumeva izlaganje podataka, ažuriranje podataka, pa čak i brisanje cele baze podataka.
Najjednostavniji način za proveru da li je web sajt ranjiv na SQL injection napad, je preko query parametara. Pretpostavimo da web sajt izlistava korisničke podatke korišćenjem id parametra. Na primer, testsite.com/page.php?id=1.
To može biti prosleđeno kao ulaz u SQLMap i on će automatski skenirati web sajt da bi proverio da li postoje neke ranjivosti u bazi. Evo primera komande:
sqlmap -u https://testsite.com/page.php?id=1 --dbs
Flag -u se koristi da bi se odredila URL, a pomoću komande –dbs SQLMap prolazi kroz bazu.
Ako je napad uspešan, SQLMap će izlistati bazu, zajedno sa listom njenih tabela.
Sada kada ste dobili inicijalni pristup, možete da radite sa bazom podataka. Ovo je komanda koja izlistava tabele u bazi podataka.
sqlmap -u https://testsite.com/page.php?id=1 -D <db_name> --tables
Da biste izlistali kolone u tabeli, možete da koristite sledeću komandu:
sqlmap -u https://testsite.com/page.php?id=7 -D <database_name> -T <table_name> --columns
Da biste obrisali celu bazu, možete da koristite sledeću komandu:
sqlmap -u https://testsite.com/page.php?id=7 -D <database_name> --dump-all
SQLMap ima dosta drugih korisnih funkcionalnosti, kao što je podešavanje kolačića, smena korisničkih agenata i mnoge druge.
Kako da se odbranite od SQL Injection napada
Da biste sprečili SQL Injection napade, trebalo bi da pratite sledeće korake:
Koristite parametrizovane upite
Uvek koristite parametrizovane upite (parameterized queries) kada radite sa bazom podatada. Ovo znači da bi trebalo da u SQL upitu označite mesto gde će se kasnije staviti unos (najčeće upitnikom), umesto da se unos nalazi direktno u upitu.
To će sprečiti napadača da ubaci zlonamerni kod u vaše SQL izjave.
Dobro obezbedite korisnički unos
Uvek bi trebalo da proveravate i sanirate svaki korisnički unos da biste obezbedili da je siguran. Trebalo bi da osigurate da unos ne sadrži nikakav opasan karakter ili maliciozni kod.
To će sprečiti napadača da ubaci SQL upite čak iako je u prilici da zaobiđe vaše korišćenje parametrizovanih upita.
Koristite pripremljene izjave
Ako vaša baza podataka podržava pripremljene izjave (prepared statements), trebalo bi da koristite njih umesto parametrizovanih upita. Pripremljene izjave su prekompajlirane SQL izjave, koje možete izvršiti više puta sa različitim parametrima.
To će otežati napadaču da ubaci maliciozni kod, jer su pripremljene izjave prekompajlirane.
Autentikacija i kontrola pristupa
Trebalo bi da imate jaku autentikaciju i kontrolu pristupa vašoj bazi podataka. To će obezbediti da se samo autorizovani korisnici loguju na vašu bazu, na taj način je štiteći od malicioznog koda.
Monitoring i alerti
Uvek nadgledajte svoju bazu podataka i tražite sumnjive aktivnosti. Za istu namenu možete postaviti i alerte da vas obaveste ukoliko se pojavi neke takva aktivnost. To uključuje neuspešne pokušaje logovanja ili veliki broj SQL upita.
To vam može pomoći da detektujete SQL injection napad dok je on u ranoj fazi i na vreme preduzeti neophodne radnje.
Zaključak
Baza podataka je osnova svake aplikacije. Zbog toga što mogu sadržati vredne i važne podatke, baze podataka su često na meti hakera. Da biste je pravilo zaštitili i preventivno sprečili napade, možete koristiti specijalizovani alat pod nazivom SQLMap. U pitanju je alat koji će vam pomoći da detektujete potencijalne ranjivosti u vašoj bazi podataka i na taj način ih otklonite pre nego što do dođe do napada.
Bez komentara