KompiuteriaiProgramavimas

Kas yra SQL injekcija?

Interneto svetainių ir puslapių skaičius nuolat auga. Kad plėtrą imtųsi visi, kas gali. Ir naujokai interneto programuotojai dažnai naudoja nesaugius ir senus kodus. Tai sukuria daugybę įsibrovėlių ir įsilaužėlių spragų. Nei jie naudojasi. Vienas iš labiausiai klasikinių pažeidimų yra SQL injekcija.

Šiek tiek teorijos

Daugelis žmonių žino, kad dauguma svetainių ir paslaugų tinkle naudoja SQL duomenų bazės saugojimui. Tai struktūrizuota užklausų kalba , leidžianti tvarkyti ir tvarkyti duomenų saugyklą. Yra daug skirtingų duomenų bazių valdymo sistemų versijų - "Oracle", "MySQL", "Postgre". Nepriklausomai nuo pavadinimo ir tipo, jie vienodai naudoja duomenų užklausas. Tai yra galimas pažeidžiamumas. Jei kūrėjas negalėjo teisingai ir saugiai apdoroti užklausos, užpuolikas gali pasinaudoti šia galimybe ir pritaikyti specialią taktiką, kad galėtumėte pasiekti duomenų bazę, o iš ten - visos svetainės valdymui.

Norint išvengti tokių situacijų, reikia protingai optimizuoti kodą ir atidžiai stebėti, kokiu būdu apdorojama užklausa.

SQL injekcijos testas

Norėdami nustatyti pažeidžiamumą tinkle, yra daug paruoštų automatinių programinės įrangos sistemų. Bet jūs galite atlikti paprastą bandymą rankiniu būdu. Norėdami tai padaryti, eikite į vieną iš tirtų svetainių ir bandykite sukelti duomenų bazės klaidą adreso juostoje. Pavyzdžiui, svetainės scenarijus negali apdoroti užklausų ir jų neapkarpyti.

Pavyzdžiui, yra kai_site / index.php? Id = 25

Lengviausias būdas yra pateikti po 25 kabučių ir siųsti prašymą. Jei klaida nepasikarto, visi visi užklausos yra filtruojami svetainėje ir tinkamai apdorojami, arba jų išvestis nustatymuose neleidžiama. Jei puslapis perkrautas su problemomis, tai yra SQL injekcijos pažeidžiamumas.

Pasirodžius, galite pabandyti atsikratyti.

Norėdami įdiegti šį pažeidžiamumą, turite šiek tiek sužinoti apie SQL užklausų komandas. Vienas iš jų - SĄJUNGA. Jis sujungia keletą užklausų rezultatų į vieną. Taigi galite apskaičiuoti laukų skaičių lentelėje. Pirmojo užklausos pavyzdys atrodo taip:

  • Some_site / index.php? Id = 25 UNION SELECT 1.

Daugeliu atvejų toks įrašas turėtų sukelti klaidą. Tai reiškia, kad laukų skaičius nėra lygus 1. Taigi, pasirinkdami parinktis iš 1 ir daugiau, galite nustatyti jų tikslų skaičių:

  • Some_site / index.php? Id = 25 UNION SELECT 1,2,3,4,5,6.

Tai yra, kai klaida nebeatrodo, tai reiškia, kad laukų skaičius yra atspėjamas.

Taip pat yra alternatyvus šios problemos sprendimas. Pavyzdžiui, kai laukų skaičius yra didelis - 30, 60 arba 100. Tai yra komanda GROUP BY. Jis grupuoja užklausos rezultatus pagal tam tikras charakteristikas, pvz .: id:

  • Some_site / index.php? Id = 25 GROUP BY 5.

Jei klaidos nebuvo gauta, tada yra daugiau laukų nei 5. Taigi, pakeičiant variantus iš gana pločio, galima apskaičiuoti, kiek iš jų iš tikrųjų yra.

Šis SQL injekcijos pavyzdys skirtas pradedantiesiems, kurie nori išbandyti savo svetainę. Svarbu prisiminti, kad dėl neteisėtos prieigos prie kito yra Baudžiamojo kodekso straipsnis.

Pagrindiniai injekcijų tipai

SQL injekcijos pažeidžiamumą galima atlikti keliais būdais. Toliau yra populiariausi metodai:

  • SĄJUNGOS užklausa SQL injekcija. Paprastas tokio tipo pavyzdys jau buvo svarstytas aukščiau. Tai įdiegta dėl klaidos tikrinant gaunamus duomenis, kurie jokiu būdu nefiltruojami.

  • Klaida pagrįsta SQL injekcija. Kaip rodo pavadinimas, šis tipas taip pat naudoja klaidas, siunčia išraiškas, kurios yra sintaksiškai neteisingos. Tada atsakymo antraštės yra perimtos, analizuojant, kurios vėliau galėsite atlikti SQL injekciją.

  • Stacked užklausos SQL injekcija. Šį pažeidžiamumą lemia pakartotinių užklausų vykdymas. Jį apibūdina prisegimas ženklo ";" pabaigoje. Šis metodas dažnai įgyvendinamas, kad būtų galima naudotis duomenų skaitymo ir rašymo funkcijomis arba operacinės sistemos funkcijų valdymu, jei tai leidžia privilegijos.

Programinės įrangos kompleksai SQL pažeidžiamumui ieškoti

Programoms, kurios yra prieinamos SQL injekcijoms, paprastai būna du komponentai: svetainės tikrinimas dėl galimų pažeidžiamų vietų ir jų naudojimas norint pasiekti duomenis. Yra tokios komunalinės paslaugos beveik visoms žinomoms platformoms. Jų funkcija labai palengvina svetainės patikrinimą dėl galimybės įsilaužti į SQL injekciją.

Sqlmap

Labai galingas skaitytuvas, kuris veikia su daugeliu žinomų DBVS. Remia įvairius SQL injekcijos įgyvendinimo būdus. Turi galimybę automatiškai atpažinti slaptažodžio maišos tipą ir sugadinti jį per žodyną. Taip pat yra galimybė įkelti ir įkelti failus iš serverio.

Diegimas "Linux" aplinkoje vykdomas naudojant šias komandas:

  • Git klonas https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • Cdsqlmap-dev /,
  • ./sqlmap.py - vedlys.

Windows sistemoje yra parinktis su komandine eilute ir grafine vartotojo sąsaja.

JSQL injekcija

"JSQL Injection" yra kryžminis platformos įrankis, kuriuo galima išbandyti SQL pažeidžiamumą. Parašyta Java, todėl sistemoje turi būti įdiegta JRE. Gali tvarkyti GET, POST, antraštės, slapukų užklausas. Tai turi patogią grafinę sąsają.

Šios programinės įrangos įdiegimas yra toks:

Wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | Grep-E-o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] {1,2}. [0-9] {1,2}. Jar '| Head-n 1`

Paleidimas atliekamas naudojant komandą java-jar ./jsql-injection-v*.jar

Norėdami pradėti patikrinti svetainę SQL pažeidžiamumui, turite įvesti savo adresą viršutiniame lauke. Jie skirti GET ir POST. Jei rezultatas yra teigiamas, kairiųjų langų langelyje rodomas galimų lentelių sąrašas. Jie gali būti peržiūrėti ir sužinoti konfidencialią informaciją.

Jei norite ieškoti administracinių skydų, naudokite skirtuką "Administratoriaus puslapis". Jis naudoja specialius šablonus automatiškai ieškant privilegijuotų vartotojų sistemos įrašų. Iš jų galite gauti tik slaptažodžio maišą. Tačiau tai taip pat yra programos įrankiuose.

Nustačius visas pažeidžiamumas ir įvedus reikalingas užklausas, programa leis jums įkelti failą į serverį arba, atvirkščiai, jį atsisiųsti iš ten.

SQLi Dumper v.7

Ši programa yra paprastas įrankis SQL pažeidžiamumui ieškoti ir įgyvendinti. Tai gamina pagal vadinamąjį gręžtuvą. Jų sąrašus galima rasti internete. Dorky dėl SQL injekcijos yra specialus paieškos užklausų modelis. Su jų pagalba galite rasti potencialiai pažeidžiamą svetainę naudodami bet kokią paieškos variklį.

Mokymo priemonės

Svetainėje itsecgames.com yra specialus įrankių rinkinys, kuris, pavyzdžiui, leidžia parodyti, kaip atlikti SQL injekciją ir išbandyti. Norint naudotis, jis turi būti atsisiunčiamas ir įdiegtas. Archyvas yra failų rinkinys, kuris yra svetainės struktūra. Norėdami jį įdiegti, reikės esamo rinkinio interneto serverio Apache, MySQL ir PHP.

Išpakuodami archyvą į žiniatinklio serverio aplanką, turite eiti į adresą, kuris buvo įvestas diegiant šį programinės įrangos produktą. Atidaromas puslapis su vartotojo registracija. Čia reikia įvesti savo duomenis ir spragtelėti "Sukurti". Išversdama naudotoją į naują langą, sistema raginama pasirinkti vieną iš bandymo parinkčių. Tarp jų yra tiek aprašytų injekcijų, tiek daugelio kitų bandymų užduočių.

Verta paminėti SQL injekcijos tipo GET / Search pavyzdį. Čia reikia jį pasirinkti ir paspausti "Hack". Prieš vartotojui bus rodoma paieškos eilutė ir imituojama tam tikra svetainė su filmais. Galite ilgai žiūrėti filmus. Tačiau yra tik 10. Pavyzdžiui, galite pabandyti įeiti į Geležinį žmogų. Bus rodomas filmas, o tai reiškia, kad svetainė veikia, o joje esančios lentelės yra prieinamos. Dabar mes turime patikrinti, ar scenarijus filtruoja specialius simbolius, ypač kabutės. Norėdami tai padaryti, pridėkite "" prie adreso eilutės. Ir tai jums reikia padaryti po filmo pavadinimu. Svetainė bus mesti klaidą Klaida: turite klaidą savo SQL sintaksėje; Patikrinkite vadovą, kuris atitinka jūsų "MySQL" serverio versiją, kad būtų galima naudoti tinkamą sintaksę šalia "%", esančioje eilutėje 1, kurioje teigiama, kad simboliai vis dar apdorojami netinkamai. Taigi, galite pabandyti pakeisti jūsų užklausą. Tačiau pirmiausia turite apskaičiuoti laukų skaičių. Norėdami tai padaryti, naudokite užsakymą, kuris pateikiamas po citatos: http://testsites.com/sqli_1.php?title=Iron+Man 'užsakyti pagal 2 - & action = paiešką.

Ši komanda paprasčiausiai parodys informaciją apie filmą, ty laukų skaičius yra didesnis nei 2. Dvigubas brūkšnys serveriui praneša, kad likusius prašymus reikia atmesti. Dabar mums reikia rūšiuoti, pakeičiant visas dideles vertes, kol pasirodys klaida. Galų gale paaiškėja, kad laukai bus 7.

Dabar atėjo laikas gauti kažką naudingos iš duomenų bazės. Šiek tiek reikės keisti užklausą adreso juostoje, pateikiant šią formą: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, database (), user (), 4, password, 6, 7 iš vartotojų - & action = paieška. Dėl jo vykdymo pamatysite eilutes su slaptažodžių maišais, kuriuos lengvai galima paversti suprantamais simboliais naudojant vieną iš internetinių paslaugų. Šiek tiek pokoldovav ir lauko pavadinimas su prisijungimo pavadinimu, galite pasiekti kažkieno įrašą, pavyzdžiui, administratoriaus svetainę.

Produkte yra daug injekcijų tipų, kuriuos galite naudoti. Verta prisiminti, kad šių įgūdžių tinkle pritaikymas realiose svetainėse gali būti nusikalstamas.

Įpurškimas ir PHP

Paprastai PHP kodas yra atsakingas už būtiną vartotojo užklausų apdorojimą. Todėl šiuo lygiu jums reikia sukurti apsaugą nuo SQL injekcijų PHP.

Pirmiausia, verta pateikti kelias paprastas rekomendacijas, kurių pagrindu turėtumėte tai padaryti.

  • Duomenys visada turi būti tvarkomi prieš pateikiant juos į duomenų bazę. Galite tai įgyvendinti naudodami esamas išraiškas arba organizuodami užklausas rankiniu būdu. Čia taip pat verta manyti, kad skaitinės vertės yra konvertuojamos į reikalingą tipą;
  • Venkite užklausos dėl įvairių kontrolės struktūrų atsiradimo.

Dabar šiek tiek apie MySQL užklausų taisykles, skirtas apsaugoti nuo SQL injekcijų.

Rašydami bet kokias užklausos frazes, svarbu atskirti duomenis iš SQL raktinių žodžių.

  • SELECT * Iš lentelės WHERE name = Zerg.

Šiame projekte sistema gali manyti, kad Zerg yra lauko pavadinimas, todėl jį reikia pridėti kabutėse.

  • SELECT * Iš lentelės WHERE name = "Zerg".

Tačiau yra situacijų, kai pačioje vertėje yra citatos.

  • SELECT * Iš lentelės WHERE name = "Dramblio Kaulo Krantas".

Čia apdorojama tik dalis katės, o likusieji gali būti suvokiami kaip komanda, kuri, žinoma, nėra. Todėl atsiranda klaida. Taigi jūs turite peržiūrėti tokius duomenis. Norėdami tai padaryti, naudokite backslash \ \.

  • SELECT * Iš lentelės WHERE name = 'cat-e' Ivory. '

Visa tai išdėstyta styginiams. Jei veiksmas įvyksta su skaičiumi, tai nereikia citatų ar susiaurėjimų. Tačiau jie privalomai privalo pridėti reikalingą duomenų tipą.

Rekomenduojama, kad lauko pavadinimas būtų įtrauktas į "backquote". Šis simbolis yra kairėje klaviatūros pusėje kartu su tilde "~". Tai yra būtina, kad MySQL tiksliai atskirtų lauko pavadinimą nuo jo raktinio žodžio.

Dinamiškas darbas su duomenimis

Labai dažnai, norint gauti bet kokius duomenis iš duomenų bazės, naudojamos dinamiškai generuojamos užklausos. Pavyzdžiui:

  • SELECT * Iš lentelės WHERE number = '$ number'.

Čia numeris $ perduodamas kaip lauko reikšmės apibrėžimas. Kas atsitiks, jei katės Djuvarė jį nukentės? Įvyko klaida.

Norint išvengti šios bėdos, žinoma, galite įtraukti "stebuklingas kainas" nustatymuose. Tačiau dabar duomenys bus peržiūrimi, kai tai bus būtina, o ne būtina. Be to, jei kodas yra parašytas rankiniu būdu, galite praleisti šiek tiek daugiau laiko bandydami sukurti įsilaužimą atsparią sistemą patys.

Norėdami pridėti velniop sau, galite naudoti mysql_real_escape_string.

$ Number = mysql_real_escape_string ($ number);

$ Year = mysql_real_escape_string ($ year);

$ Query = "INSERT INTO lentelė (numeris, metai, klasė) VALUES (" $ number "," $ year ", 11)".

Nors kodas išaugo, tačiau galbūt jis veiks daug saugiau.

Vietų savininkai

Vietų savininkai yra originalūs žymekliai, pagal kuriuos sistema sužino, kad šioje vietoje turi būti pakeista speciali funkcija. Pavyzdžiui:

$ Sate = $ mysqli-> prepare ("SELECT District FROM NUMBER WHERE Name =?");

$ Sate-> bind_param ("s", $ number);

$ Sate-> execute ();

Ši kodo dalis rengia užklausos šabloną, tada susieja kintamojo numerį ir vykdo jį. Šis metodas leidžia jums suskaidyti prašymo apdorojimą ir jo įgyvendinimą. Taigi galite apsaugoti save nuo kenksmingo kodo įvedimo SQL užklausose.

Ką gali padaryti užpuolikas

Sistemos apsauga yra labai svarbus veiksnys, kurio negalima pamiršti. Žinoma, lengviau atkurti paprastą svetainės vizitinę kortelę. Ir jei tai puikus portalas, paslauga, forumas? Kokios pasekmės galbūt atsiranda, jei nesvarbu apie saugumą?

Pirma, įsilaužėlis gali pažeisti tiek duomenų bazės vientisumą, tiek visiškai jį pašalinti. Ir jei svetainės administratorius ar hoster nepadarė atsarginės kopijos, tai nebus lengva. Be to, užpuolikas, įsilaužęs į vieną svetainę, gali pereiti prie kitų, esančių tame pačiame serveryje.

Kitas yra lankytojų asmens duomenų vagystė. Kaip juos naudoti - viską riboja tik įsilaužėlio vaizduotė. Tačiau bet kuriuo atveju pasekmės nebus labai malonios. Ypač jei buvo pateikta finansinė informacija.

Be to, užpuolikas gali pats sujungti duomenų bazę ir panaudoti pinigus grįžti.

Vartotojų dezinformacija svetainės administratoriaus vardu, kuris nėra jų savininkas, taip pat gali turėti neigiamų padarinių, nes sukčiavimas yra įmanomas.

Išvada

Visa informacija šiame straipsnyje pateikiama tik informaciniais tikslais. Naudokite jį tik bandydami savo projektus, kai aptinkama ir ištaisyta pažeidžiamumas.

Norint išsamiau išnagrinėti metodą, kaip atlikti SQL injekciją, turite pradėti iš tikrųjų išnagrinėti SQL kalbos ypatybes ir ypatybes. Kaip atliekamos užklausos, raktiniai žodžiai, duomenų tipai ir visa tai taikoma.

Be to, jūs negalėsite be suprasti PHP funkcijų ir HTML elementų veikimo. Pagrindiniai pažeidžiami injekcijų naudojimo taškai yra adreso juosta, paieška ir įvairūs laukai. PHP funkcijų tyrimas, jų įgyvendinimas ir galimybės padės suprasti, kaip galima išvengti klaidų.

Daugelio parengtų programinės įrangos priemonių buvimas leidžia atlikti išsamią svetainės analizę apie žinomą pažeidžiamumą. Vienas iš populiariausių produktų yra "kali linux". Tai yra "Linux" operacinės sistemos vaizdas, kuriame yra daugybė paslaugų ir programų, galinčių atlikti išsamią svetainės stiprumo analizę.

Ką reikia žinoti, kaip nulaužti svetainę? Tai labai paprasta - būtina žinoti apie galimą pažeidžiamumą savo projektą arba svetainėje. Ypač jei tai internetinė parduotuvė su interneto mokėjimo, kai mokėjimo Vartotojo duomenys gali būti pažeidžiamos užpuolikas.

Dėl profesinių studijų esamų informacijos saugumo personalo galės patikrinti svetainę tam tikrus kriterijus ir gylio įvairovė. Pradedant nuo paprastų HTML injekcijų ir socialinės inžinerijos ir sukčiavimo.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 lt.unansea.com. Theme powered by WordPress.