Drošība

SQL saīsināšanas uzbrukums

SQL saīsināšanas uzbrukums
SQL saīsināšanas ievainojamība rodas, kad datu bāze saīsina lietotāja ievadīto garuma ierobežojumu dēļ. Uzbrucēji var apkopot informāciju par kritiskā lauka garumu (piemēram, lietotājvārdu) un izmantot šo informāciju, lai iegūtu nesankcionētu piekļuvi. Uzbrucēji var pieteikties kā citi lietotāji, piemēram, administrators, ar savu reģistrēto paroli.

SQL saīsināšanas ievainojamība parasti pastāv MySQL datu bāzēs. Šī ievainojamība pirmo reizi tika aprakstīta CVE-2008-4106, kas bija saistīta ar WordPress CMS.

Kā darbojas SQL saīsināšanas uzbrukumi

Šis uzbrukums darbojas tāpēc, ka tiek saīsināts lietotāju ievads datubāzēs, izmantojot funkcijas “izvēle” un “ievietošana”.

Pieņemsim, ka izstrādātājs izveido tabulu “lietotāji”, izmantojot šādu vaicājumu:

izveidot tabulas lietotājus (
user_id INT NAV NULL AUTO_INCREMENT,
user_name VARCHAR (20) NAV NULL,
parole VARCHAR (40) NAV NULL,
GALVENĀ ATSLĒGA (user_id)
);

Izmantojot šo shēmu, ja izstrādātājs izveido administratora kontu ar tālāk norādīto:

user_name = 'administrators'
parole = “secret_p4ssw0ord”

Acīmredzot šie akreditācijas dati nav publiski pieejami. Datu bāzē ir tikai viens administratora konts, un, ja uzbrucējs mēģina reģistrēt citu kontu ar “admin” lietotājvārdu, uzbrucējs neizdosies datu bāzes atlaišanas pārbaudes dēļ. Uzbrucējs joprojām var apiet šo atlaišanas pārbaudi, lai pievienotu citu administratora kontu, izmantojot ievainojamību SQL saīsināšana. Pieņemsim, ka uzbrucējs reģistrē citu kontu ar šādu ievadi:

Lietotājvārds = 'adminxxxxxxxxxxxxxxxxandomand'
(x ir atstarpes)
&
Parole = ”RandomUser”

Datu bāzē tiks ierakstīts “user_name” (26 rakstzīmes) un pārbaudīts, vai tas jau pastāv. Pēc tam ievads user_name tiks saīsināts un datu bāzē tiks ievadīts 'admin' ('admin' ar atstarpi), kā rezultātā tiks izveidoti divi administratora lietotāju dublikāti.

Pēc tam uzbrucējs var izveidot administratora lietotāju ar savu paroli. Tagad datu bāzē ir divi admin 'user_name' ieraksti, bet ar dažādām parolēm. Uzbrucējs var pieteikties, izmantojot jaunizveidotos akreditācijas datus, lai iegūtu administratora paneli, jo gan lietotāju_vārdi “admin”, gan “admin” ir vienādi datu bāzes līmenī. Tagad mēs aplūkosim praktiskā uzbrukuma paraugu.

Uzbrukuma paraugs

Šajā piemērā mēs ņemsim scenāriju no vietnes overthewire.org. Overthewire kopiena nodrošina karakuļļu CTF, uz kuriem mēs varam praktizēt savas drošības koncepcijas. SQL saīsināšanas scenārijs notiek natas spēlē 26. līmenis -> 27. Mēs varam piekļūt līmenim, izmantojot:

URL: http: // natas27.natas.laboratorijas.pārvilkt.org
Lietotājvārds: natas27
Parole: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Šis līmenis ir pieejams vietnē https: // overthewire.org / wargames / natas / natas27.html. Jums tiks parādīta pieteikšanās lapa, kas ir neaizsargāta pret SQL saīsināšanas uzbrukumu.

Pārbaudot pirmkodu, jūs redzēsiet, ka lietotājvārda garums ir 64, kā parādīts zemāk.

Lietotājs ar nosaukumu “natas28” jau pastāv. Mūsu mērķis ir izveidot citu lietotāju ar nosaukumu “natas28”, izmantojot uzbrukumu SQL_truncation. Tātad, mēs ievadīsim natas28, kam sekos 57 atstarpes un izlases alfabēts (mūsu gadījumā a), lietotājvārds un jebkura parole. Burts “a” ekrānuzņēmumā nav redzams 65 rakstzīmju garuma lietotājvārda dēļ. Pēc lietotāja konta izveides jūs varēsit redzēt 'a."

Ja datu bāzē ir ievainojamība sql_truncation, tad datubāzei tagad vajadzētu būt diviem “natas28” lietotājvārdiem. Vienā lietotājvārdā būs mūsu parole. Mēģināsim ievadīt akreditācijas datus pieteikšanās lapā.

Tagad mēs esam pieteikušies kā “natas28” lietotājs.

Mīkstināšana

Lai mazinātu šo uzbrukumu, mums būs jāņem vērā vairāki faktori.

Piemēram, pārbaudīsim stingro režīmu, izmantojot šādu vaicājumu:

mysql> atlasiet @@ sql_mode

Mēs izveidosim datu bāzi un tabulas lietotājus."

mysql> IZVEIDOT DATU BĀZES testu
Vaicājums OK, ietekmēta 1 rinda (0.02 sek.)
mysql> Izmantot testu
Datu bāze mainīta
mysql> CREATE TABLE lietotāji (lietotājvārds VARCHAR (10), parole VARCHAR (10));
Vaicājums OK, ietekmētas 0 rindas (0.05 sek.)

Pēc tam mēs izveidosim administratora lietotāju ar akreditācijas datiem, izmantojot INSERT vaicājumu.

mysql> INSERT INTO users VALUES ('admin', 'password1');
Vaicājums OK, ietekmēta 1 rinda (0.01 sek.)

Informāciju par lietotāju tabulu mēs varam redzēt, izmantojot opciju “izvēlēties * no lietotājiem”.

Lietotājvārda garums ir 10 rakstzīmes. Tagad mēs izmēģināsim SQL saīsināšanas uzbrukumu.

Mēģinot ievadīt sekojošo:

Lietotājvārds = 'adminxxxxxa'
(x ir atstarpes)
&
Parole = 'pass2'

Mēs saņemsim kļūdu, kas nozīmē, ka stingrais režīms ir pilnīgi efektīvs.

mysql> INSERT INTO lietotāju vērtības ('admin a', 'pass2')
KĻŪDA 1406 (22001): 1. rindā slejas “lietotājvārds” dati ir pārāk gari

Ja nav iespējots stingrais režīms, datu bāze izdos brīdinājumus, taču dati joprojām tiks ievietoti tabulā.

Secinājums

Uzbrucēji var iegūt piekļuvi augstas privilēģijas kontiem, ja jūsu lietojumprogrammā pastāv ievainojamība sql_trunction. Uzbrucējs var viegli iegūt informāciju par lietotājvārdu un tā datu bāzes garumu, izmantojot kritiskos laukus, pēc tam izveidot to pašu lietotājvārdu, pēc minimālā garuma atstarpes un nejaušus alfabētus, kā rezultātā tiek izveidoti vairāki augstas privilēģijas konti. Šī ievainojamība ir kritiska, taču no tās var izvairīties, ja veicat dažus drošības pasākumus, piemēram, aktivizējat stingru režīmu lietotāja ievadei un sensitīvo lauku padarot par primāro atslēgu datu bāzē.

OpenTTD vs Simutrans
Transporta simulācijas izveide var būt jautra, relaksējoša un ārkārtīgi vilinoša. Tāpēc jums jāpārliecinās, ka izmēģināt pēc iespējas vairāk spēļu, la...
OpenTTD apmācība
OpenTTD ir viena no populārākajām biznesa simulācijas spēlēm. Šajā spēlē jums ir jāizveido brīnišķīgs transporta bizness. Tomēr jūs sāksit sākumā apmē...
SuperTuxKart operētājsistēmai Linux
SuperTuxKart ir lielisks nosaukums, kas paredzēts, lai sniegtu jums Mario Kart pieredzi bez maksas jūsu Linux sistēmā. Tas ir diezgan izaicinoši un ja...