Duomenys yra vienas iš svarbiausių informacinių sistemų komponentų. Duomenų bazėmis valdomas žiniatinklio programas organizacija naudoja duomenims iš klientų gauti. SQL yra struktūrinės užklausos kalbos akronimas. Jis naudojamas duomenims gauti ir manipuliuoti duomenų bazėje.
Kas yra SQL injekcija?
„SQL Injection“ yra ataka, kuri nuodija dinaminius SQL sakinius, kad galėtų komentuoti tam tikras teiginio dalis arba pridėti sąlygą, kuri visada bus teisinga. Jis naudoja blogai suprojektuotų žiniatinklio programų dizaino trūkumus, kad išnaudotų SQL sakinius kenkėjiškam SQL kodui vykdyti.
Šioje pamokoje sužinosite „SQL Injection“ metodus ir tai, kaip galite apsaugoti žiniatinklio programas nuo tokių atakų.
- Kaip veikia SQL įpurškimas
- Įsilaužimo veikla: SQL įšvirkškite žiniatinklio programą
- Kiti SQL injekcijos atakos tipai
- SQL injekcijos automatikos įrankiai
- Kaip apsisaugoti nuo SQL injekcijos atakų
- Įsilaužimas: naudokite „Havji“ SQL injekcijai
Kaip veikia SQL įpurškimas
Atakų, kurias galima atlikti naudojant SQL injekciją, tipai skiriasi priklausomai nuo duomenų bazės variklio tipo. Ataka veikia dinaminiuose SQL sakiniuose . Dinaminis sakinys yra sakinys, sugeneruotas vykdymo metu naudojant parametrų slaptažodį iš žiniatinklio formos arba URI užklausos eilutės.
Apsvarstykime paprastą žiniatinklio programą su prisijungimo forma. HTML formos kodas rodomas žemiau.
ČIA
- Aukščiau pateiktoje formoje priimamas el. Pašto adresas, o slaptažodis juos persiunčia į PHP failą pavadinimu index.php.
- Ji turi galimybę išsaugoti prisijungimo sesiją slapuke. Tai padarėme iš žymės langelio „Remember_me“. Duomenims pateikti naudojamas pašto metodas. Tai reiškia, kad vertės URL nerodomos.
Tarkime, kad naudotojo ID tikrinimo pagrindiniame sakinyje pateiktas sakinys yra toks
PASIRINKITE * IŠ vartotojų, kur el. Paštas = $ _POST ['email'] IR slaptažodis = md5 ($ _ POST ['slaptažodis']);
ČIA
- Anksčiau pateiktame teiginyje masyvo $ _POST [] reikšmės naudojamos tiesiogiai jų netvarkant.
- Slaptažodis yra užšifruotas naudojant MD5 algoritmą.
Mes iliustruosime SQL injekcijos ataką naudodami sqlfiddle. Savo interneto naršyklėje atidarykite URL http://sqlfiddle.com/. Gausite šį langą.
Pastaba: turėsite parašyti SQL sakinius
1 žingsnis) Įveskite šį kodą kairiajame lauke
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'));
2 žingsnis) Spustelėkite „Sukurti schemą“
3 žingsnis) Įveskite šį kodą dešinėje srityje
pasirinkti * iš vartotojų;
4 žingsnis) Spustelėkite Vykdyti SQL. Pamatysite tokį rezultatą
Tarkime, kad vartotojo reikmenys Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. ir 1234 kaip slaptažodį. Pareiškimas, kurį reikia vykdyti pagal duomenų bazę, būtų
SELECT * FROM users WHERE email = ' Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. ' IR slaptažodis = md5 ('1234');
Pirmiau pateiktą kodą galima išnaudoti komentuojant slaptažodžio dalį ir pridedant sąlygą, kuri visada bus teisinga. Tarkime, kad užpuolikas el. Pašto adreso lauke pateikia šį įvestį.
Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. ' ARBA 1 = 1 LIMITAS 1 - ']
xxx slaptažodžiui.
Sugeneruotas dinaminis sakinys bus toks.
SELECT * FROM users WHERE email = ' Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. ' ARBA 1 = 1 LIMITAS 1 - '] IR slaptažodis = md5 (' 1234 ');
ČIA
- Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. baigiasi viena citata, kuri užbaigia eilutės citatą
- ARBA 1 = 1 LIMITAS 1 yra sąlyga, kuri visada bus teisinga ir apribos grąžintus rezultatus tik vienu įrašu.
- - „IR… yra SQL komentaras, pašalinantis slaptažodžio dalį.
Nukopijuokite aukščiau pateiktą SQL sakinį ir įklijuokite jį į „SQL FiddleRun SQL“ teksto laukelį, kaip parodyta žemiau
Įsilaužimo veikla: SQL įšvirkškite žiniatinklio programą
Mes turime paprastą žiniatinklio programą adresu http://www.techpanda.org/ , kuri pažeidžiama SQL įpurškimo atakų tik demonstravimo tikslais. Aukščiau pateiktas HTML formos kodas yra paimtas iš prisijungimo puslapio. Programa suteikia pagrindinį saugumą, pvz., El. Pašto lauko valymą. Tai reiškia, kad aukščiau nurodyto kodo negalima naudoti norint apeiti prisijungimą.
Norėdami tai apeiti, galime naudoti slaptažodžio lauką. Žemiau pateiktoje diagramoje parodyti veiksmai, kuriuos turite atlikti
Tarkime, kad užpuolikas pateikia šį įvestį
- 1 veiksmas: įveskite Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. kaip el. pašto adresą
- 2 veiksmas: įveskite xxx ') ARBA 1 = 1 -]
- Spustelėkite mygtuką Pateikti
- Būsite nukreipti į prietaisų skydelį
Sukurtas SQL sakinys bus toks
SELECT * FROM users WHERE email = ' Šis el. Pašto adresas yra apsaugotas nuo šiukšlų. Norėdami jį peržiūrėti, turite įgalinti „JavaScript“. ' IR slaptažodis = md5 ('xxx') ARBA 1 = 1 -] ');
Žemiau pateiktoje diagramoje pavaizduotas sugeneruotas teiginys.
ČIA
- Pareiškime protingai daroma prielaida, kad naudojamas md5 šifravimas
- Užbaigiama viena citata ir uždaromasis skliaustas
- Prie teiginio prideda sąlygą, kuri visada bus teisinga
Apskritai sėkminga „SQL Injection“ ataka bando atlikti daugybę skirtingų būdų, tokių kaip aukščiau parodyta, sėkmingai įvykdyti ataką.
Kiti SQL injekcijos atakos tipai
SQL injekcijos gali padaryti daugiau žalos nei tik perduodamos prisijungimo algoritmus. Kai kurie išpuolių yra
- Ištrinami duomenys
- Atnaujinami duomenys
- Įterpiami duomenys
- Komandos vykdymas serveryje, kuris gali atsisiųsti ir įdiegti kenkėjiškas programas, tokias kaip Trojos arklys
- Eksportuoti vertingus duomenis, tokius kaip kredito kortelės informacija, el. Paštas ir slaptažodžiai, į užpuoliko nuotolinį serverį
- Kaip gauti vartotojo prisijungimo duomenis ir pan
Ankstesnis sąrašas nėra išsamus; tai tik suteikia jums idėją, ką SQL injekcijos
SQL injekcijos automatikos įrankiai
Ankstesniame pavyzdyje mes naudojome rankinio užpuolimo metodus, pagrįstus didžiulėmis savo žiniomis apie SQL. Yra automatizuotų įrankių, kurie gali padėti atlikti atakas efektyviau ir per trumpiausią įmanomą laiką. Šios priemonės apima
- „SQLSmack“ - https://securiteam.com/tools/5GP081P75C
- „SQLPing 2“ - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- „SQLMap“ - http://sqlmap.org/
Kaip apsisaugoti nuo SQL injekcijos atakų
Organizacija gali taikyti šią politiką, kad apsisaugotų nuo „SQL Injection“ atakų.
- Niekada negalima pasitikėti vartotojo įrašu - prieš naudojant jį dinaminiuose SQL sakiniuose, jis visada turi būti išvalytas.
- Saugomos procedūros - tai gali apimti SQL sakinius ir visus įvestis traktuoti kaip parametrus.
- Paruošti teiginiai - parengti teiginiai, kad pirmiausia būtų sukurtas SQL sakinys, tada visi pateikti vartotojo duomenys traktuojami kaip parametrai. Tai neturi įtakos SQL sakinio sintaksei.
- Reguliarūs posakiai - juos galima naudoti norint nustatyti galimą žalingą kodą ir jį pašalinti prieš vykdant SQL sakinius.
- Duomenų bazės prisijungimo vartotojo prieigos teisės - sąskaitoms, naudojamoms prisijungti prie duomenų bazės, turėtų būti suteiktos tik būtinos prieigos teisės. Tai gali padėti sumažinti tai, ką SQL sakiniai gali atlikti serveryje.
- Klaidų pranešimai - jie neturėtų atskleisti neskelbtinos informacijos ir to, kur tiksliai įvyko klaida. Paprasti pasirinktiniai klaidų pranešimai, pvz., „Atsiprašome, mes patyrėme techninių klaidų. Buvo susisiekta su technine komanda. Bandykite dar kartą vėliau “, o ne rodyti klaidą sukėlusius SQL sakinius.
Įsilaužimo veikla: naudokite „Havij“ SQL injekcijai
Šiame praktiniame scenarijuje naudosime „Havij Advanced SQL Injection“ programą, kad patikrintume, ar svetainėje nėra pažeidžiamumų.
Pastaba: jūsų antivirusinė programa gali ją pažymėti dėl savo pobūdžio. Turėtumėte jį pridėti prie išimčių sąrašo arba pristabdyti antivirusinę programinę įrangą.
Žemiau pateiktame paveikslėlyje parodytas pagrindinis Havij langas
Pirmiau pateiktą įrankį galima naudoti norint įvertinti interneto svetainės / programos pažeidžiamumą.
Santrauka
- „SQL Injection“ yra atakos tipas, kuris naudoja blogus SQL sakinius
- SQL injekcija gali būti naudojama apeiti prisijungimo algoritmus, gauti, įterpti, atnaujinti ir ištrinti duomenis.
- SQL injekcijos įrankiai apima SQLMap, SQLPing ir SQLSmack ir kt.
- Gera saugumo politika rašant SQL gali padėti sumažinti SQL injekcijos išpuolius.