Saugumas

SQL sutrumpinimo ataka

SQL sutrumpinimo ataka
„SQL Truncation“ pažeidžiamumas atsiranda, kai duomenų bazė sutrumpina vartotojo įvestį dėl ilgio apribojimo. Užpuolikai gali rinkti informaciją apie kritinio lauko ilgį (pvz., Vartotojo vardą) ir naudoti šią informaciją, kad gautų neteisėtą prieigą. Užpuolikai gali prisijungti kaip kiti vartotojai, pvz., Administratorius, turėdami savo registruotą slaptažodį.

SQL sutrumpinimo pažeidžiamumas paprastai egzistuoja MySQL duomenų bazėse. Šis pažeidžiamumas pirmą kartą buvo aprašytas CVE-2008-4106, kuris buvo susijęs su „WordPress CMS“.

Kaip veikia SQL sutrumpinimo atakos

Ši ataka veikia dėl to, kad sutrumpinamas vartotojo įvedimas duomenų bazėse naudojant „pasirinkimo“ ir „įterpimo“ funkcijas.

Tarkime, kad kūrėjas sukuria lentelę „vartotojai“ atlikdamas šią užklausą:

sukurti lentelės vartotojus (
user_id INT NĖRA VISO AUTO_INCREMENT,
vartotojo vardas VARCHAR (20) NE NULL,
slaptažodis VARCHAR (40) NOT NULL,
PAGRINDINIS RAKTAS (vartotojo ID)
);

Naudodamiesi šia schema, jei kūrėjas sukuria administratoriaus abonementą su šiais būdais:

vartotojo vardas = 'administratorius'
slaptažodis = „secret_p4ssw0ord“

Akivaizdu, kad šie įgaliojimai nėra vieši. Duomenų bazėje yra tik viena administratoriaus paskyra, o jei užpuolikas bando užregistruoti kitą paskyrą naudodamas „admin“ vartotojo vardą, užpuolikas nepavyks dėl duomenų bazės perteklinių patikrinimų. Užpuolikas vis tiek gali apeiti tą pertekliaus patikrinimą ir pridėti kitą administratoriaus abonementą, pasinaudodamas „SQL Truncation“ pažeidžiamumu. Tarkime, kad užpuolikas užregistruoja kitą paskyrą naudodamas šį įvestį:

Vartotojo_vardas = 'adminxxxxxxxxxxxxxxxxxandandom'
(x yra tarpai)
&
Slaptažodis = „RandomUser“

Duomenų bazėje bus „vartotojo vardas“ (26 simboliai) ir patikrinta, ar ji jau egzistuoja. Tada naudotojo vardo įvestis bus sutrumpinta, o „admin“ („admin“ su tarpu) bus įvesta į duomenų bazę, todėl du administratoriaus vartotojai dublikatai.

Tada užpuolikas gali sukurti „administratoriaus“ vartotoją su savo slaptažodžiu. Dabar duomenų bazėje yra du administratoriaus „vartotojo_vardas“ įrašai, tačiau skirtingi slaptažodžiai. Užpuolikas gali prisijungti naudodamas naujai sukurtus kredencialus, kad gautų administratoriaus skydą, nes tiek vartotojo vardai, tiek „admin“, ir „admin“ yra lygūs duomenų bazės lygiui. Dabar mes pažvelgsime į pavyzdinę praktinę ataką.

Atakos pavyzdys

Šiame pavyzdyje mes paimsime scenarijų iš interneto perjungimo.org. „Overthewire“ bendruomenė teikia karinius žaidimų CTF, kuriuose mes galime pritaikyti savo saugumo koncepcijas. SQL sutrumpinimo scenarijus įvyksta „natas“ žaidime 26-> 27. Mes galime pasiekti lygį naudodami šiuos veiksmus:

URL: http: // natas27.natas.laboratorijos.nuversti.org
Vartotojo vardas: natas27
Slaptažodis: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Šį lygį galima rasti adresu: https: // overthewire.org / wargames / natas / natas27.HTML. Jums bus parodytas prisijungimo puslapis, kuris yra pažeidžiamas dėl SQL sutrumpinimo atakos.

Patikrinę šaltinio kodą, pamatysite, kad vartotojo vardo ilgis yra 64, kaip parodyta žemiau.

Vartotojas vardu „natas28“ jau yra. Mūsų tikslas yra sukurti kitą vartotoją, pavadintą „natas28“, naudojant SQL_truncation ataką. Taigi, įvesime natas28, po to bus 57 tarpai ir atsitiktinė abėcėlė (mūsų atveju a), vartotojo vardas ir bet koks slaptažodis. Raidė „a“ ekrano kopijoje nematoma dėl 65 simbolių ilgio vartotojo vardo. Sukūrę vartotojo abonementą, galėsite pamatytia."

Jei duomenų bazėje yra pažeidžiamumas sql_truncation, duomenų bazėje dabar turėtų būti du „natas28“ vartotojo vardai. Viename vartotojo varde bus mūsų slaptažodis. Pabandykime įvesti kredencialus prisijungimo puslapyje.

Dabar mes esame prisijungę kaip „natas28“ vartotojas.

Švelninimas

Norėdami sušvelninti šį išpuolį, turėsime atsižvelgti į kelis veiksnius.

Pavyzdžiui, patikrinkime griežtą režimą naudodami šią užklausą:

mysql> pasirinkite @@ sql_mode

Sukursime duomenų bazę ir lentelės vartotojus."

mysql> CREATE DATABASE testas
Užklausa gerai, paveikta 1 eilutė (0.02 sek.)
mysql> Naudoti testą
Duomenų bazė pakeista
mysql> CREATE TABLE vartotojai (vartotojo vardas VARCHAR (10), slaptažodis VARCHAR (10));
Užklausa gerai, paveikta 0 eilučių (0.05 sek.)

Tada sukursime administratoriaus vartotoją su kredencialais, naudodami užklausą INSERT.

mysql> INSERT INTO users VALUES ('admin', 'password1');
Užklausa gerai, paveikta 1 eilutė (0.01 sek.)

„Vartotojų“ lentelės informaciją galime pamatyti naudodami parinktį „pasirinkti * iš vartotojų“.

Vartotojo vardo ilgis yra 10 simbolių. Dabar mes išbandysime SQL sutrumpinimo ataką.

Kai bandome įvesti:

Vartotojo vardas = 'adminxxxxxa'
(x yra tarpai)
&
Slaptažodis = 'pass2'

Gausime klaidą, o tai reiškia, kad griežtas režimas yra visiškai efektyvus.

mysql> INSERT INTO vartotojų reikšmės („admin a“, „pass2“)
KLAIDA 1406 (22001): Duomenys per ilgi stulpeliui „vartotojo vardas“ 1 eilutėje

Jei nebus įjungtas griežtas režimas, duomenų bazė pateiks įspėjimus, bet vis tiek įterps duomenis į lentelę.

Išvada

Užpuolikai gali gauti prieigą prie aukštų privilegijų paskyrų, jei jūsų programoje yra pažeidžiamumas sql_trunction. Užpuolikas, naudodamas kritinius laukus, gali lengvai gauti informacijos apie vartotojo vardą ir jo duomenų bazės ilgį, tada sukurti tą patį vartotojo vardą, po minimalaus ilgio įrašyti tarpus ir atsitiktinę abėcėlę, todėl bus sukurtos kelios aukštos privilegijos paskyros. Šis pažeidžiamumas yra labai svarbus, tačiau jo galima išvengti, jei imsitės tam tikrų saugumo priemonių, pvz., Suaktyvinę griežtą vartotojo įvesties režimą ir jautrų lauką paversdami pagrindiniu duomenų bazės raktu.

Atvirojo kodo komercinių žaidimų variklių uostai
Nemokami atvirojo kodo ir įvairių platformų žaidimų varikliai gali būti naudojami žaidžiant senus ir kai kuriuos gana naujus žaidimų pavadinimus. Šiam...
Geriausi „Linux“ komandinės eilutės žaidimai
Komandų eilutė yra ne tik jūsų didžiausias sąjungininkas naudojant „Linux“, bet ir pramogų šaltinis, nes ją galite naudoti norėdami žaisti daug įdomių...
Geriausios „Linux“ skirtos „Gamepad“ žemėlapių sudarymo programos
Jei jums patinka žaisti žaidimus „Linux“ su žaidimų pultu, o ne įprasta klaviatūra ir pelės įvesties sistema, yra keletas jums naudingų programų. Daug...