Sigurnost

Napad SQL skraćivanja

Napad SQL skraćivanja
Ranjivost SQL skraćivanja pojavljuje se kada baza podataka skrati korisnički unos zbog ograničenja duljine. Napadači mogu prikupiti podatke o duljini kritičnog polja (poput korisničkog imena) i iskoristiti ih kako bi stekli neovlašteni pristup. Napadači se mogu prijaviti kao neki drugi korisnici, poput administratora, sa svojom registriranom lozinkom.

Ranjivost SQL skraćivanja obično postoji u MySQL bazama podataka. Ova je ranjivost prvi put opisana u CVE-2008-4106, koja je bila povezana s WordPress CMS-om.

Kako funkcioniraju napadi na skraćivanje SQL-a

Ovaj napad djeluje zbog skraćivanja korisničkog unosa u bazama podataka pomoću funkcija 'odabira' i 'umetanja'.

Pretpostavimo da programer kreira tablicu "korisnici" putem sljedećeg upita:

stvoriti korisnike tablice (
user_id INT NIJE NULL AUTO_INCREMENT,
korisničko ime VARCHAR (20) NIJE NULL,
lozinka VARCHAR (40) NIJE NULL,
PRIMARNI KLJUČ (user_id)
);

Koristeći ovu shemu, ako programer stvori administratorski račun sa sljedećim:

user_name = 'admin'
lozinka = "secret_p4ssw0ord"

Očito je da ove vjerodajnice nisu javne. U bazi podataka postoji samo jedan administratorski račun, a ako napadač pokuša registrirati drugi račun s korisničkim imenom 'admin', napadač neće uspjeti zbog provjere suvišnosti baze podataka. Napadač i dalje može zaobići tu provjeru suvišnosti kako bi dodao još jedan račun administratora iskorištavajući ranjivost SQL skraćivanja. Pretpostavimo da napadač registrira drugi račun sa sljedećim ulazom:

Korisničko ime = 'adminxxxxxxxxxxxxxxx slučajno'
(x su razmaci)
&
Lozinka = "RandomUser"

Baza podataka će uzeti 'korisničko ime' (26 znakova) i provjeriti postoji li to već. Zatim će se unos korisničko ime skratiti, a u bazu podataka unijet će se 'admin' ('admin' s razmakom), što će rezultirati dvama duplikatima administratora.

Tada napadač može stvoriti 'admin' korisnika sa vlastitom lozinkom. Sada baza podataka ima dva administratorska "user_name" unosa, ali s različitim lozinkama. Napadač se može prijaviti s novostvorenim vjerodajnicama kako bi dobio administratorsku ploču jer su oba korisnička imena "admin" i "admin" jednaka za razinu baze podataka. Sada ćemo pogledati primjer praktičnog napada.

Uzorak napada

U ovom ćemo primjeru preuzeti web stranicu s prekomjerne žice.org. Zajednica overwireova osigurava CTF-ove ratnih igara na kojima možemo vježbati svoje sigurnosne koncepte. Scenarij SQL skraćivanja događa se u natas igri 26 -> 27. Razini možemo pristupiti na sljedeći način:

URL: http: // natas27.natas.laboratorijima.prevrnuti.org
Korisničko ime: natas27
Lozinka: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Ova je razina dostupna na: https: // overthewire.org / wargames / natas / natas27.html. Prikazat će vam se stranica za prijavu koja je ranjiva na napad SQL skraćivanja.

Nakon pregleda izvornog koda, vidjet ćete da je duljina korisničkog imena 64, kao što je prikazano u nastavku.

Korisnik pod nazivom 'natas28' već postoji. Cilj nam je stvoriti drugog korisnika pod nazivom 'natas28' pomoću napada SQL_truncation. Dakle, unijet ćemo natas28, nakon čega slijedi 57 razmaka i slučajna abeceda (u našem slučaju a), korisničko ime i bilo koja lozinka. Slovo "a" nije vidljivo na snimci zaslona zbog korisničkog imena dužine 65 znakova. Nakon stvaranja korisničkog računa, moći ćete vidjeti 'a.'

Ako baza podataka sadrži ranjivost sql_truncation, tada bi baza podataka trebala imati dva korisnička imena 'natas28'. Jedno korisničko ime sadržavat će našu lozinku. Pokušajmo unijeti vjerodajnice na stranici za prijavu.

Sada smo prijavljeni kao korisnik 'natas28'.

Smanjenje

Da bismo ublažili ovaj napad, morat ćemo uzeti u obzir više čimbenika.

Na primjer, provjerimo strogi način pomoću sljedećeg upita:

mysql> odaberite @@ sql_mode

Stvorit ćemo bazu podataka i korisnike tablice.'

mysql> test STVARI BAZU PODATAKA
Upit je u redu, zahvaćen 1 redak (0.02 sek)
mysql> Koristi test
Baza podataka promijenjena
mysql> CREATE TABLE korisnici (korisničko ime VARCHAR (10), lozinka VARCHAR (10));
Upit je u redu, 0 redaka pogođeno (0.05 sek)

Dalje ćemo stvoriti administrativnog korisnika s vjerodajnicama pomoću upita INSERT.

mysql> UMETNI U VRIJEDNOSTI korisnika ('admin', 'password1');
Upit je u redu, zahvaćen 1 redak (0.01 sek)

Informacije o tablici "korisnici" možemo vidjeti pomoću opcije "odaberi * od korisnika".

Duljina korisničkog imena je 10 znakova. Sada ćemo pokušati s napadom SQL skraćivanja.

Kada pokušamo unijeti sljedeće:

Korisničko ime = 'adminxxxxxa'
(x su razmaci)
&
Lozinka = 'pass2'

Dobit ćemo pogrešku, što znači da je strogi način rada potpuno učinkovit.

mysql> INSERT INTO u korisničke vrijednosti ('admin a', 'pass2')
POGREŠKA 1406 (22001): Podaci su predugi za stupac 'korisničko ime' u retku 1

Ako nije omogućen strogi način rada, baza podataka će izdavati upozorenja, ali će svejedno umetati podatke u tablicu.

Zaključak

Napadači mogu dobiti pristup visoko privilegiranim računima ako u vašoj aplikaciji postoji ranjivost sql_trunction. Napadač lako može dobiti informacije o korisničkom imenu i duljini njegove baze podataka pomoću kritičnih polja, zatim stvoriti isto korisničko ime, nakon čega slijede razmaci i nasumične abecede nakon minimalne duljine, što rezultira stvaranjem više računa s visokim privilegijima. Ova je ranjivost kritična, ali može se izbjeći ako poduzmete neke sigurnosne mjere predostrožnosti, poput aktiviranja strogog načina za korisničke unose i postavljanja osjetljivog polja kao primarnog ključa u bazi podataka.

Zamijenite svoje tipke miša različito za različiti softver pomoću X-Mouse Button Control
Možda vam treba alat koji bi mogao promijeniti kontrolu miša sa svakom aplikacijom koju koristite. Ako je to slučaj, možete isprobati aplikaciju pod n...
Microsoft Sculpt Touch bežični miš pregled
Nedavno sam čitao o Microsoft Sculpt Touch bežični miš i odlučio ga kupiti. Nakon što sam ga neko vrijeme koristio, odlučio sam s njim podijeliti svoj...
Trackpad i pokazivač miša na ekranu AppyMouse za Windows tablete
Korisnicima tableta često nedostaje pokazivač miša, posebno kada su navični koristiti prijenosna računala. Pametni telefoni i tableti osjetljivi na do...