Datori, Programmēšana
Kas ir injekcijas SQL?
Tīkla vietņu un lapu skaits nepārtraukti pieaug. Attīstību uzņemas visi, kas to var. Un iesācēju web programmētāji bieži izmanto nedrošu un veco kodu. Un tas rada daudz nepilnību iebrucējiem un hakeriem. Ne tas, kā viņi izmanto. Viena no klasiskākajām ievainojamībām ir SQL injekcija.
Nedaudz teorijas
Daudzi cilvēki zina, ka lielākā daļa vietņu un pakalpojumu tīklā izmanto SQL datubāzes saglabāšanai. Šī ir strukturēta vaicājuma valoda, kas ļauj pārvaldīt un pārvaldīt datu veikalus. Pastāv daudz dažādu datubāzu pārvaldības sistēmu versijas - Oracle, MySQL, Postgre. Neatkarīgi no nosaukuma un veida viņi vienādi izmanto datu pieprasījumus. Šeit ir iespējamā neaizsargātība. Ja izstrādātājs nevarēja pareizi un droši apstrādāt pieprasījumu, uzbrucējs to var izmantot un izmantot īpašu taktiku, lai piekļūtu datubāzei un no turienes visas vietnes pārvaldībai.
Lai izvairītos no šādām situācijām, jums ir nepieciešams intelektuāli optimizēt kodu un uzmanīgi kontrolēt, kādā veidā tiek apstrādāts vaicājums.
SQL injekcijas tests
Lai konstatētu neaizsargātības klātbūtni tīklā, ir daudz sagatavotu automatizēto programmatūras sistēmu. Bet jūs varat veikt vienkāršu pārbaudi manuāli. Lai to izdarītu, dodieties uz kādu no pārbaudītajām vietnēm un mēģiniet radīt datubāzes kļūdu adreses joslā. Piemēram, vietnes skripts nedrīkst apstrādāt pieprasījumus un tos negriezt.
Piemēram, ir some_site / index.php? Id = 25
Vieglākais veids ir likt pēc 25 citātiem un nosūtīt pieprasījumu. Ja nekādas kļūdas nav notikušas, tad visi vai visi pieprasījumi tiek filtrēti vietnē un tiek apstrādāti pareizi, vai to izlaide ir atspējota iestatījumos. Ja lapa tiek pārsniegta ar problēmām, tad SQL ievainojamība ir neaizsargāta.
Kad tas ir atrasts, jūs varat mēģināt atbrīvoties no tā.
Lai ieviestu šo neaizsargātību, jums mazliet jāzina par SQL vaicājuma komandām. Viens no tiem ir SAVIENĪBA. Tas apvieno vairākus vaicājuma rezultātus vienā. Tātad jūs varat aprēķināt lauku skaitu tabulā. Pirmā vaicājuma piemērs izskatās šādi:
- Some_site / index.php? Id = 25 SAVIENĪBAS SELEKCIJA 1.
Lielākajā daļā gadījumu šādam ierakstam jāuzrāda kļūda. Tas nozīmē, ka lauku skaits nav vienāds ar 1. Tādējādi, izvēloties opcijas no 1 un vairāk, varat iestatīt to precīzo skaitli:
- Some_site / index.php? Id = 25 SAVIENĪBAS IZVĒLNE 1,2,3,4,5,6.
Tas ir, ja kļūda vairs neparādās, tas nozīmē, ka lauku skaits tiek uzminēts.
Pastāv arī alternatīva risinājums šai problēmai. Piemēram, ja lauku skaits ir liels - 30, 60 vai 100. Tas ir GROUP BY komanda. Tas apkopo vaicājuma rezultātus saskaņā ar dažām īpašībām, piemēram, id:
- Some_site / index.php? Id = 25 GROUP BY 5.
Ja kļūdas nav saņemtas, tad ir vairāk lauku nekā 5. Tādējādi, aizstājot variantus no diezgan plaša diapazona, ir iespējams aprēķināt, cik no tiem faktiski ir.
Šis SQL injekcijas piemērs ir iesācējiem, kuri vēlas izmēģināt savu vietni. Ir svarīgi atcerēties, ka par nesankcionētu piekļuvi kādam citam ir Kriminālkodeksa pants.
Galvenie injicēšanas veidi
Neaizsargātību, izmantojot SQL injekcijas, var veikt vairākos veidos. Tālāk ir vispopulārākās metodes:
SAVIENĪBAS vaicājums SQL injekcija. Vienkāršs šāda veida piemērs jau ir izskatīts iepriekš. Tas tiek ieviests kļūdu dēļ, pārbaudot ienākošos datus, kas nekādā veidā netiek filtrēti.
Kļūdu bāzēta SQL injekcija. Kā norāda nosaukums, šis veids arī izmanto kļūdas, nosūtot izteicienus, kas ir sintaksēti nepareizi. Tad atbildes galvenes tiek pārtvertas, analizējot, kuras jūs vēlāk varēsit veikt SQL injekciju.
Stacked vaicājumi SQL injekcijas. Šo neaizsargātību nosaka pēc secīgu pieprasījumu izpilde. To raksturo piesaiste zīmes ";" beigās. Šo pieeju bieži īsteno, lai piekļūtu lasīšanas un rakstīšanas datiem vai operētājsistēmas funkciju pārvaldībai, ja to pieļauj privilēģijas.
Programmatūras kompleksi SQL ievainojamību meklēšanai
Programmām, kas ir pieejamas SQL injekcijām, parasti ir divas sastāvdaļas: vietnes skenēšana iespējamo ievainojamību un to izmantošana, lai piekļūtu datiem. Šādas komutācijas ir pieejamas gandrīz visām pazīstamajām platformām. To funkcionalitāte ievērojami atvieglo vietnes pārbaudi, lai varētu uzlauzt SQL injekciju.
Sqlmap
Ļoti spēcīgs skeneris, kas darbojas ar visbiežāk zināmo DBVS. Atbalsta dažādas metodes SQL injekcijas ieviešanai. Vai ir iespēja automātiski atpazīt paroļu hash tipa un kapāt to caur vārdnīcu. Ir arī funkciju augšupielādēt un augšupielādēt failus no servera.
Instalēšana Linux vidē tiek veikta, izmantojot šādas komandas:
- Git klons https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
- Cdsqlmap-dev /
- ./sqlmap.py - vednis.
Operētājsistēmai Windows ir iespēja ar komandrindu un ar grafisko lietotāja interfeisu.
JSQL injekcija
JSQL Injection ir starpplatformu rīks, lai pārbaudītu SQL ievainojamību. Rakstīts Java, tāpēc sistēmai ir jābūt instalētai JRE. Var apstrādāt GET, POST, galvenes, sīkfailu pieprasījumus. Tā ir ērta grafiskā saskarne.
Šīs programmatūras instalēšana ir šāda:
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`
Izlaišana tiek veikta, izmantojot komandu java-jar ./jsql-injection-v*.jar
Lai sāktu pārbaudīt vietni SQL ievainojamībai, augšējā laukā jāievada tā adrese. Tie ir atsevišķi GET un POST. Ja rezultāts ir pozitīvs, kreisajā logā parādās pieejamo tabulu saraksts. Tos var apskatīt un uzzināt konfidenciālu informāciju.
Lai meklētu administratīvos paneļus, izmantojiet cilni Administrācijas lapa. Tas izmanto īpašas veidnes, lai automātiski meklētu priviliģēto lietotāju sistēmas ierakstus. No tiem jūs varat iegūt tikai parastu hash. Bet tas ir pieejams arī programmas rīkos.
Pēc visu ievainojamību atrašanas un nepieciešamo vaicājumu ievadīšanas lietderība ļaus jums augšupielādēt failu serverī vai, otrādi, lejupielādēt to no turienes.
SQLi Dumper v.7
Šī programma ir viegli lietojams rīks SQL ievainojamību meklēšanai un ieviešanai. Izgatavo to, pamatojoties uz tā sauktajiem treniņiem. To sarakstus var atrast internetā. Dorky SQL injekcijai ir īpašs meklēšanas vaicājumu modelis. Ar viņu palīdzību jūs varat atrast potenciāli neaizsargātu vietni, izmantojot jebkuru meklētājprogrammu.
Apmācīšanas rīki
Site itsecgames.com ir īpašs rīku komplekts, kas, piemēram, parāda, kā veikt SQL injekciju un to pārbaudīt. Lai to izmantotu, tas ir jāieraksta un jāinstalē. Arhīvā ir failu kopums, kas ir vietnes struktūra. Lai to instalētu, jums būs nepieciešams esošais tīmekļa servera Apache, MySQL un PHP serveris.
Pēc arhīva izpakošanas tīmekļa servera mapē, jums jāierodas uz adresi, kas tika ievadīta, instalējot šo programmatūras produktu. Tiks atvērta lapa ar lietotāja reģistrāciju. Šeit jums jāievada sava informācija un noklikšķiniet uz "Izveidot". Pārvēršot lietotāju jaunā logā, sistēma liek jums izvēlēties vienu no pārbaudes opcijām. Starp tiem ir gan aprakstītas injekcijas, gan daudzi citi testa uzdevumi.
Ir vērts apsvērt piemēru par SQL injekcijas tipa GET / Search. Šeit tev jāizvēlas un nospiediet "Hack". Pirms lietotājs parādīs meklēšanas virkni un noteiktu vietnes ar filmas imitāciju. Jūs varat ilgi pavadīt filmas. Bet ir tikai 10. Piemēram, jūs varat mēģināt ieiet Iron Man. Tiks parādīta filma, kas nozīmē, ka vietne darbojas, un tabulas tajā ir pieejamas. Tagad mums ir jāpārbauda, vai skripts filtrē īpašas rakstzīmes, it īpaši pēdienu. Lai to izdarītu, pievienojiet adreses rindai. Un jums tas jādara pēc filmas nosaukuma. Vietne būs mest kļūdu. Kļūda: jūsu SQL sintaksē ir kļūda; Pārbaudiet rokasgrāmatu, kas atbilst jūsu MySQL servera versijai, pareizajā sintaksē, lai to izmantotu netālu no '%' 'pirmajā rindiņā, kur teikts, ka rakstzīmes joprojām tiek apstrādātas nepareizi. Tātad, jūs varat mēģināt aizstāt savu pieprasījumu. Bet vispirms ir jāaprēķina lauku skaits. Lai to izdarītu, izmantojiet pasūtījumu pēc, ko ievada pēc cenas: http://testsites.com/sqli_1.php?title=Iron+Man 'pasūtīt pēc 2 - & action = meklēt.
Šī komanda vienkārši parāda informāciju par filmu, tas ir, lauku skaits ir lielāks par 2. Dubultā defise norāda serverim, ka atlikušie pieprasījumi ir jāizmet. Tagad mums ir jārīkojas, aizvietojot visas lielās vērtības, līdz tiek parādīta kļūda. Galu galā izrādās, ka lauki būs 7.
Tagad ir pienācis laiks iegūt kaut ko noderīgu no datubāzes. Mazliet būs jāmaina vaicājums adrešu joslā, piesaistot to šādai veidlapai: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, database (), user (), 4, password, 6, 7 no lietotājiem - & action = meklēšana. Tā izpildes rezultātā jūs redzēsiet rindas ar paroles maiņām, kuras var viegli pārvērst saprotamās rakstzīmes, izmantojot vienu no tiešsaistes pakalpojumiem. Nedaudz pokoldovav un lauka nosaukuma uzņemšana ar pieteikšanos, jūs varat piekļūt kāda cita ierakstiem, piemēram, administrācijas vietnei.
Produktā ir daudz veidu injicēšanas, par kurām jūs varat praktizēt. Ir vērts atcerēties, ka šo prasmju izmantošana tīklā, reālajās vietnēs var būt krimināli sodāma.
Injekcijas un PHP
Parasti PHP kods ir atbildīgs par lietotāja pieprasīto pieprasījumu apstrādi. Tāpēc šajā līmenī jums ir nepieciešams izveidot aizsardzību pret SQL injekcijām PHP.
Vispirms ir vērts sniegt dažus vienkāršus ieteikumus, pamatojoties uz kuriem jums tas jādara.
- Dati vienmēr jāpārstrādā pirms ievietošanas datu bāzē. Jūs varat to īstenot vai nu, izmantojot esošās izteiksmes vai organizējot vaicājumus manuāli. Arī šajā gadījumā ir vērts ņemt vērā, ka skaitliskās vērtības tiek pārveidotas atbilstoši vajadzīgajam tipam;
- Izvairieties no pieprasījuma par dažādu kontroles struktūru parādīšanos.
Tagad nedaudz par MySQL pieprasījumu noteikumiem, lai aizsargātu pret SQL injekcijām.
Rakstot jebkuru vaicājuma izteiksmi, ir svarīgi nodalīt datus no SQL atslēgvārdiem.
- SELECT * no tabulas WHERE name = Zerg.
Šajā projektā sistēma var domāt, ka Zerg ir lauka nosaukums, tādēļ jums tas jāpievieno pēdiņās.
- SELECT * no tabulas WHERE name = 'Zerg'.
Tomēr pastāv situācijas, kad pati vērtība satur citātus.
- SELECT * no tabulas WHERE name = 'Kotdivuāra'.
Šeit apstrādā tikai daļu kaķa, un pārējo var uztvert kā komandu, kas, protams, nav. Tādēļ rodas kļūda. Tātad jums ir jāuzskata šāda veida dati. Lai to izdarītu, izmantojiet backslash-\.
- SELECT * no tabulas WHERE name = 'cat-e' Ivory. '
Visi iepriekš minētie attiecas uz stīgām. Ja darbība notiek ar numuru, tad tai nav vajadzīgas pēdiņas vai kvadrātieklas. Tomēr tiem noteikti ir obligāti jānoved pie nepieciešamā datu veida.
Ir ieteikums, ka lauka nosaukums ir jāiekļauj atpakaļkvotē. Šis simbols atrodas tastatūras kreisajā pusē kopā ar tildi "~". Tas ir nepieciešams, lai MySQL precīzi noteiktu lauka nosaukumu no tā atslēgvārda.
Dinamisks darbs ar datiem
Ļoti bieži, lai iegūtu visus datus no datu bāzes, tiek izmantoti dinamiski ģenerētie vaicājumi. Piemēram:
- SELECT * no tabulas WHERE number = '$ number'.
Šeit $ numurs tiek nodots kā lauka vērtības definīcija. Kas notiks, ja tas nokļūs kaķa d'Ivoire? Radās kļūda.
Lai izvairītos no šīm problēmām, protams, varat iekļaut iestatījumos "burvju citātus". Bet tagad dati tiks pārmeklēti nepieciešamības gadījumā, un tas nav nepieciešams. Turklāt, ja kods tiek rakstīts manuāli, jūs varat pavadīt nedaudz vairāk laika, mēģinot pats izveidot pret pasīvām vērstu sistēmu.
Lai pievienotu slīpsvītru sevi, varat izmantot mysql_real_escape_string.
$ Number = mysql_real_escape_string ($ numurs);
$ Gads = mysql_real_escape_string ($ gads);
$ Query = "INSERT INTO tabula (numurs, gads, klase) VĒRTĪBAS ('$ number', '$ year', 11)".
Lai gan kods ir palielinājies, tomēr potenciāli tas darbosies daudz drošāk.
Saglabātāji
Saglabātāji ir oriģinālie marķieri, saskaņā ar kuriem sistēma uzzina, ka šajā vietā jāaizvieto īpaša funkcija. Piemēram:
$ Sate = $ mysqli-> sagatavot ("SELECT District FROM NUMBER WHERE name =?");
$ Sate-> bind_param ("s", $ numurs);
$ Sate-> izpildīt ();
Šī koda daļa sagatavo vaicājuma veidni, pēc tam saista mainīgā skaitli un izpilda to. Šī pieeja ļauj sadalīt pieprasījuma apstrādi un tās īstenošanu. Tādējādi jūs varat pasargāt sevi no ļaunprātīgas koda injekcijas SQL vaicājumos.
Ko uzbrucējs var darīt
Sistēmas aizsardzība ir ļoti svarīgs faktors, kuru nevar ignorēt. Protams, vienkāršu mājas lapas vizītkarti būs vieglāk atjaunot. Un, ja tas ir lielisks portāls, pakalpojums, forums? Kādas sekas var būt, ja jūs nedomājat par drošību?
Pirmkārt, hacker var izjaukt gan datubāzes integritāti, gan pilnībā noņemt. Un, ja vietnes administrators vai hoster nebija izveidojis dublējumu, tas nebūs viegli. Turklāt uzbrucējs, uzlauzot vienā vietnē, var pārslēgties uz citiem, kas atrodas tajā pašā serverī.
Tālāk ir apmeklētāju personas datu zādzība. Kā tos izmantot - viss ir ierobežots tikai ar hakera iztēli. Bet jebkurā gadījumā sekas nebūs ļoti patīkamas. Jo īpaši, ja būtu ietverta finanšu informācija.
Arī uzbrucējs var apvienot datubāzi un pēc tam izvilkt naudu, lai atgrieztos.
Lietotāju dezinformācija vietnes administratora vārdā, kam nav viņu pašu, var būt arī negatīvas sekas, jo ir iespējama krāpšana.
Secinājums
Visa šī raksta informācija ir paredzēta tikai informatīviem nolūkiem. Izmantojiet to tikai, lai pārbaudītu savus projektus, kad tiek konstatēti un izlaboti ievainojumi.
Lai veiktu padziļinātu pētījumu par SQL injekcijas veikšanas metodi, jums jāsāk ar faktisko SQL valodas funkciju un funkciju izpēti. Kā tiek veikti pieprasījumi, atslēgvārdi, datu veidi un visu to piemērošana.
Arī jūs nevarat iztikt bez izpratnes par PHP funkciju un HTML elementu darbību. Galvenie neaizsargātie punkti injekciju lietošanai ir adrešu josla, meklēšana un dažādi lauki. PHP funkciju izpēte, to īstenošana un iespējas palīdzēs jums saprast, kā no kļūdām var izvairīties.
Daudzu gatavu programmatūras rīku klātbūtne ļauj jums veikt padziļinātu vietnes analīzi par zināmām neaizsargātākajām vietām. Viens no populārākajiem produktiem ir kali linux. Tas ir uz Linux balstītas operētājsistēmas tēls, kurā ir liels skaits komunālo pakalpojumu un programmu, kas spēj veikt visaptverošu vietnes analīzi par izturību.
Kāpēc man jāzina, kā nojaukt vietni? Tas ir ļoti vienkārši - tas ir nepieciešams, lai iegūtu priekšstatu par potenciāli neaizsargātām jūsu projekta vai vietnes vietām. It īpaši, ja tas ir tiešsaistes veikals ar iespēju maksāt tiešsaistē, ja uzbrucēju var tikt apdraudēta lietotāja maksājumu informācija.
Profesionālai izpētei, informācijas drošības dienesti varēs pārbaudīt vietni saskaņā ar dažādiem kritērijiem un dziļumu. No vienkāršas HTML injekcijas līdz sociālajai inženierijai un pikšķerēšanai.
Similar articles
Trending Now