SQL injekcijas apmācība: mācieties ar piemēru

Satura rādītājs:

Anonim

Dati ir viena no vissvarīgākajām informācijas sistēmu sastāvdaļām. Organizācija izmanto datu bāzes darbināmas tīmekļa lietojumprogrammas, lai iegūtu datus no klientiem. SQL ir strukturētās vaicājumu valodas saīsinājums. To izmanto, lai izgūtu un manipulētu ar datiem datu bāzē.

Kas ir SQL injekcija?

SQL Injection ir uzbrukums, kas saindē dinamiskos SQL priekšrakstus, lai komentētu noteiktas apgalvojuma daļas vai pievienotu nosacījumu, kas vienmēr būs patiess. Tas izmanto slikti izstrādātu tīmekļa lietojumprogrammu dizaina kļūdas, lai izmantotu SQL priekšrakstus ļaunprātīga SQL koda izpildei.

Šajā apmācībā jūs uzzināsiet SQL Injection metodes un to, kā jūs varat aizsargāt tīmekļa lietojumprogrammas no šādiem uzbrukumiem.

  • Kā darbojas SQL injekcija
  • Datorurķēšana: SQL injicē tīmekļa lietojumprogrammu
  • Citi SQL Injection uzbrukuma veidi
  • Automatizācijas rīki SQL injicēšanai
  • Kā novērst pret SQL injekcijas uzbrukumiem
  • Datorurķēšana: SQL injicēšanai izmantojiet Havji

Kā darbojas SQL injekcija

Uzbrukumu veidi, kurus var veikt, izmantojot SQL injekciju, atšķiras atkarībā no datu bāzes motora veida. Uzbrukums darbojas uz dinamiskiem SQL priekšrakstiem . Dinamiskais paziņojums ir paziņojums, kas tiek ģenerēts izpildes laikā, izmantojot parametru paroli no tīmekļa formas vai URI vaicājuma virknes.

Apsvērsim vienkāršu tīmekļa lietojumprogrammu ar pieteikšanās veidlapu. HTML formas kods ir parādīts zemāk.

ŠEIT,

  • Iepriekš minētā veidlapa pieņem e-pasta adresi un paroli, pēc tam tos iesniedz PHP failā ar nosaukumu index.php.
  • Tam ir iespēja saglabāt pieteikšanās sesiju sīkfailā. Mēs to secinājām no izvēles rūtiņas Remember_me. Datu iesniegšanai tā izmanto pasta metodi. Tas nozīmē, ka vērtības URL netiek rādītas.

Pieņemsim, ka aizmugurē esošais paziņojums par lietotāja ID pārbaudi ir šāds

ATLASIET * no lietotājiem, kur e-pasts = $ _POST ['email'] UN parole = md5 ($ _ POST ['parole']);

ŠEIT,

  • Iepriekš minētajā paziņojumā masīva $ _POST [] vērtības tiek izmantotas tieši, tās nedezinficējot.
  • Parole tiek šifrēta, izmantojot MD5 algoritmu.

Mēs ilustrēsim SQL injekcijas uzbrukumu, izmantojot sqlfiddle. Tīmekļa pārlūkprogrammā atveriet vietrādi URL http://sqlfiddle.com/. Jūs saņemsiet šādu logu.

Piezīme: jums būs jāraksta SQL priekšraksti

1. darbība. Kreisajā rūtī ievadiet šo kodu

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. solis) Noklikšķiniet uz Veidot shēmu

3. solis . Labajā rūtī ievadiet šo kodu

atlasīt * no lietotājiem;

4. solis) Noklikšķiniet uz Palaist SQL. Jūs redzēsiet šādu rezultātu

Pieņemsim, ka lietotāja piederumi Šī e-pasta adrese ir aizsargāta pret mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. un 1234 kā parole. Paziņojums, kas jāizpilda pret datu bāzi, būtu

SELECT * FROM users WHERE email = ' Šī e-pasta adrese ir aizsargāta no mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. ' UN parole = md5 ('1234');

Iepriekš minēto kodu var izmantot, komentējot paroles daļu un pievienojot nosacījumu, kas vienmēr būs patiess. Pieņemsim, ka uzbrucējs e-pasta adreses laukā sniedz šādu ievadi.

Šī e-pasta adrese ir aizsargāta no mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. ' VAI 1 = 1 LIMITE 1 - ']

xxx parole.

Ģenerētais dinamiskais paziņojums būs šāds.

SELECT * FROM users WHERE email = ' Šī e-pasta adrese ir aizsargāta no mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. ' VAI 1 = 1 LIMITE 1 - '] UN parole = md5 (' 1234 ');

ŠEIT,

  • Šī e-pasta adrese ir aizsargāta no mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. beidzas ar vienu citātu, kas pabeidz virknes citātu
  • VAI 1 = 1 LIMITS 1 ir nosacījums, kas vienmēr būs patiess un ierobežos atgrieztos rezultātus tikai ar vienu ierakstu.
  • - 'UN ... ir SQL komentārs, kas novērš paroles daļu.

Nokopējiet iepriekš minēto SQL priekšrakstu un ielīmējiet to SQL FiddleRun SQL teksta lodziņā, kā parādīts zemāk

Datorurķēšana: SQL injicē tīmekļa lietojumprogrammu

Mums ir vienkārša tīmekļa lietojumprogramma vietnē http://www.techpanda.org/, kas ir neaizsargāta pret SQL Injection uzbrukumiem tikai demonstrēšanas nolūkos. Iepriekš redzamais HTML formas kods tiek ņemts no pieteikšanās lapas. Lietojumprogramma nodrošina pamata drošību, piemēram, e-pasta lauka attīrīšanu. Tas nozīmē, ka mūsu iepriekš minēto kodu nevar izmantot, lai apietu pieteikšanos.

Lai to apietu, mēs tā vietā varam izmantot paroles lauku. Zemāk redzamajā diagrammā ir norādītas darbības, kas jums jāveic

Pieņemsim, ka uzbrucējs sniedz šādu ievadi

  • 1. darbība: ievadiet Šī e-pasta adrese ir aizsargāta pret mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. kā e-pasta adresi
  • 2. darbība: ievadiet xxx ') VAI 1 = 1 -]
  • Noklikšķiniet uz pogas Iesniegt
  • Jūs tiksiet novirzīts uz informācijas paneli

Izveidotais SQL priekšraksts būs šāds

SELECT * FROM users WHERE email = ' Šī e-pasta adrese ir aizsargāta no mēstuļu robotiem. Lai to apskatītu, jums jābūt aktivizētam JavaScript. ' UN parole = md5 ('xxx') VAI 1 = 1 -] ');

Zemāk redzamā diagramma parāda, ka paziņojums ir izveidots.

ŠEIT,

  • Paziņojumā saprātīgi tiek pieņemts, ka tiek izmantota md5 šifrēšana
  • Pabeidz vienreizējo pēdiņu un aizvērošo iekavu
  • Paziņojumam pievieno nosacījumu, kas vienmēr būs patiess

Kopumā veiksmīgs SQL Injection uzbrukums mēģina veikt vairākas dažādas metodes, piemēram, iepriekš demonstrētās, lai veiktu veiksmīgu uzbrukumu.

Citi SQL Injection uzbrukuma veidi

SQL injekcijas var nodarīt vairāk ļaunuma, nekā vienkārši nododot pieteikšanās algoritmus. Daži no uzbrukumiem ietver

  • Datu dzēšana
  • Datu atjaunināšana
  • Datu ievietošana
  • Izpilda komandas serverī, kas var lejupielādēt un instalēt tādas ļaunprātīgas programmas kā Trojas zirgi
  • Vērtīgu datu, piemēram, kredītkartes detaļu, e-pasta un paroļu eksportēšana uz uzbrucēja attālo serveri
  • Lietotāja pieteikšanās datu iegūšana utt

Šis saraksts nav pilnīgs; tas tikai dod jums priekšstatu par to, kāda SQL injekcija

Automatizācijas rīki SQL injicēšanai

Iepriekš minētajā piemērā mēs izmantojām manuālas uzbrukuma metodes, pamatojoties uz mūsu plašajām zināšanām par SQL. Ir automatizēti rīki, kas var palīdzēt veikt uzbrukumus efektīvāk un pēc iespējas īsākā laikā. Šie rīki ietver

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Kā novērst pret SQL injekcijas uzbrukumiem

Organizācija var pieņemt šādu politiku, lai pasargātu sevi no SQL injekcijas uzbrukumiem.

  • Lietotāja ievadītajai informācijai nekad nevajadzētu uzticēties - tā vienmēr ir jādezinficē, pirms tā tiek izmantota dinamiskajos SQL priekšrakstos.
  • Saglabātās procedūras - tās var iekapsulēt SQL priekšrakstus un visu ievadi uzskatīt par parametriem.
  • Sagatavoti paziņojumi - sagatavoti priekšraksti darbam, vispirms izveidojot SQL priekšrakstu, pēc tam visus iesniegtos lietotāja datus uzskatot par parametriem. Tas neietekmē SQL priekšraksta sintaksi.
  • Regulārās izteiksmes - tās var izmantot, lai noteiktu potenciālu kaitīgu kodu un noņemtu to pirms SQL priekšrakstu izpildes.
  • Datu bāzes savienojuma lietotāja piekļuves tiesības - kontiem, kurus izmanto, lai izveidotu savienojumu ar datu bāzi, jāpiešķir tikai nepieciešamās piekļuves tiesības. Tas var palīdzēt samazināt to, ko SQL priekšraksti var veikt serverī.
  • Kļūdu ziņojumi - tiem nevajadzētu atklāt slepenu informāciju un to, kur tieši radās kļūda. Vienkārši pielāgoti kļūdu ziņojumi, piemēram, “Atvainojiet, mums ir tehniskas kļūdas. Ir sazināta ar tehnisko komandu. Lūdzu, mēģiniet vēlāk vēlāk ”var izmantot, nevis parādīt SQL priekšrakstus, kas izraisīja kļūdu.

Datorurķēšanas darbība: SQL injicēšanai izmantojiet Havij

Šajā praktiskajā scenārijā mēs izmantosim Havij Advanced SQL Injection programmu, lai vietnē meklētu ievainojamības.

Piezīme: jūsu pretvīrusu programma tās rakstura dēļ var to atzīmēt. Jums tas jāpievieno izslēgšanas sarakstam vai jāpārtrauc pretvīrusu programmatūras darbība.

Zemāk redzamais attēls parāda Havij galveno logu

Iepriekš minēto rīku var izmantot, lai novērtētu tīmekļa vietnes / lietojumprogrammas ievainojamību.

Kopsavilkums

  • SQL Injection ir uzbrukuma veids, kurā tiek izmantoti slikti SQL priekšraksti
  • SQL injekciju var izmantot, lai apietu pieteikšanās algoritmus, izgūtu, ievietotu, atjauninātu un dzēstu datus.
  • SQL injekcijas rīki ietver SQLMap, SQLPing un SQLSmack utt.
  • Laba drošības politika, rakstot SQL paziņojumu, var palīdzēt samazināt SQL injekcijas uzbrukumus.