Varnost

Napad okrnitve SQL

Napad okrnitve SQL
Ranljivost SQL Truncation se pojavi, ko baza podatkov okrni uporabniški vnos zaradi omejitve dolžine. Napadalci lahko zbirajo informacije o dolžini kritičnega polja (na primer uporabniško ime) in izkoriščajo te podatke za nepooblaščen dostop. Napadalci se lahko prijavijo kot nekateri drugi uporabniki, na primer skrbnik, s svojim registriranim geslom.

Ranljivost okrnjenosti SQL običajno obstaja v podatkovnih bazah MySQL. Ta ranljivost je bila prvič opisana v CVE-2008-4106, ki je bila povezana s WordPress CMS.

Kako delujejo napadi skrajšanja SQL

Ta napad deluje zaradi okrnitve uporabniškega vnosa v zbirkah podatkov s pomočjo funkcij 'izbira' in 'vstavljanje'.

Recimo, da razvijalec ustvari tabelo "uporabniki" z naslednjo poizvedbo:

ustvari uporabnike tabele (
user_id INT NOT NULL AUTO_INCREMENT,
uporabniško ime VARCHAR (20) NOT NULL,
geslo VARCHAR (40) NOT NULL,
OSNOVNI KLJUČ (user_id)
);

Če razvijalec s pomočjo te sheme ustvari skrbniški račun z naslednjim:

user_name = 'admin'
geslo = “secret_p4ssw0ord”

Očitno te poverilnice niso javne. V bazi podatkov je samo en skrbniški račun in če napadalec poskuša registrirati drug račun z uporabniškim imenom 'admin', napadalec ne bo uspel zaradi preverjanja odvečnosti baze podatkov. Napadalec lahko še vedno obide to preverjanje odvečnosti, da doda nov skrbniški račun z izkoriščanjem ranljivosti SQL Truncation. Recimo, da napadalec registrira drug račun z naslednjimi vnosi:

Uporabniško ime = 'adminxxxxxxxxxxxxxxxrandom'
(x so presledki)
&
Geslo = "RandomUser"

Baza podatkov bo vzela ime uporabnika (26 znakov) in preverila, ali to že obstaja. Nato bo vnos uporabniško ime okrnjen in v bazo podatkov bo vnesen 'admin' ('admin' s presledkom), kar bo povzročilo dva podvojena uporabnika admin.

Nato lahko napadalec ustvari "skrbniškega" uporabnika z lastnim geslom. Zdaj ima baza podatkov dva skrbniška vnosa 'user_name', vendar z različnimi gesli. Napadalec se lahko prijavi z novo ustvarjenimi poverilnicami, da dobi skrbniško ploščo, ker sta obe uporabniški imeni "admin" in "admin" enaki za raven baze podatkov. Zdaj si bomo ogledali vzorec praktičnega napada.

Vzorčni napad

V tem primeru bomo s spletnega mesta prevzeli scenarij.org. Skupnost overthewire ponuja CTF-je za vojne igre, na katerih lahko izvajamo svoje varnostne koncepte. Scenarij okrnitve SQL se zgodi v igri natas, nivo 26-> 27. Do ravni lahko pridemo z naslednjim:

URL: http: // natas27.natas.laboratorijih.prevrniti.org
Uporabniško ime: natas27
Geslo: 55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ

Ta raven je na voljo na: https: // overthewire.org / wargames / natas / natas27.html. Prikazala se vam bo prijavna stran, ki je ranljiva za napad na okrnitev SQL.

Po pregledu izvorne kode boste videli, da je dolžina uporabniškega imena 64, kot je prikazano spodaj.

Uporabnik z imenom 'natas28' že obstaja. Naš cilj je z napadom SQL_truncation ustvariti drugega uporabnika z imenom 'natas28'. Vnesli bomo natas28, nato 57 presledkov in naključno abecedo (v našem primeru a), uporabniško ime in katero koli geslo. Črka 'a' ni vidna na posnetku zaslona zaradi 65-mestnega uporabniškega imena. Po ustvarjanju uporabniškega računa boste lahko videli 'a."

Če baza podatkov vsebuje ranljivost sql_truncation, mora imeti baza zdaj dve uporabniški imeni 'natas28'. Eno uporabniško ime bo vsebovalo naše geslo. Poskusimo vnesti poverilnice na prijavni strani.

Zdaj smo prijavljeni kot uporabnik 'natas28'.

Blažitev

Za ublažitev tega napada bomo morali upoštevati več dejavnikov.

Na primer, preverimo strog način z naslednjo poizvedbo:

mysql> izberite @@ sql_mode

Ustvarili bomo bazo podatkov in uporabnike tabele."

mysql> Ustvari test podatkovne baze
Poizvedba v redu, prizadeta 1 vrstica (0.02 s)
mysql> Uporabi test
Baza podatkov spremenjena
mysql> USTVARI TABELO uporabniki (uporabniško ime VARCHAR (10), geslo VARCHAR (10));
Poizvedba je v redu, 0 vrstic je prizadetih (0.05 s)

Nato bomo z uporabo poizvedbe INSERT ustvarili skrbniškega uporabnika s poverilnicami.

mysql> VSTAVITE V VREDNOSTI uporabnikov ('admin', 'password1');
Poizvedba v redu, prizadeta 1 vrstica (0.01 s)

Podatke v tabeli »uporabniki« si lahko ogledamo z možnostjo »izberite * od uporabnikov«.

Dolžina uporabniškega imena je 10 znakov. Zdaj bomo poskusili napad okrnitve SQL.

Ko poskušamo vnesti naslednje:

Uporabniško ime = 'adminxxxxxa'
(x so presledki)
&
Geslo = 'pass2'

Dobili bomo napako, kar pomeni, da je strog način popolnoma učinkovit.

mysql> INSERT INTO uporabniške vrednosti ('admin a', 'pass2')
NAPAKA 1406 (22001): Podatki so predolgi za stolpec 'uporabniško ime' v ​​vrstici 1

Brez omogočenega strogega načina bo baza podatkov izdala opozorila, vendar bo podatke vseeno vstavila v tabelo.

Zaključek

Napadalci lahko dobijo dostop do visoko privilegiranih računov, če v vaši aplikaciji obstaja ranljivost sql_trunction. Napadalec lahko z uporabo kritičnih polj zlahka dobi informacije o uporabniškem imenu in dolžini njegove baze podatkov, nato pa ustvari isto uporabniško ime, čemur sledijo presledki in naključne abecede po najmanjši dolžini, kar ima za posledico ustvarjanje več računov z visokimi privilegiji. Ta ranljivost je kritična, vendar se ji je mogoče izogniti, če sprejmete nekatere varnostne ukrepe, na primer aktivirate strog način za vnose uporabnikov in občutljivo polje postavite kot primarni ključ v zbirki podatkov.

Najboljši Linux Distros za igre na srečo v letu 2021
Operacijski sistem Linux je daleč od prvotnega, preprostega, strežniškega videza. Ta OS se je v zadnjih letih izjemno izboljšal in se je zdaj razvil v...
Kako zajeti in pretakati svojo igralno sejo v Linuxu
V preteklosti je bilo igranje iger le hobi, sčasoma pa je igralniška industrija zabeležila veliko rast glede tehnologije in števila igralcev. Občinstv...
Najboljše igre z ročnim sledenjem
Oculus Quest je pred kratkim predstavil odlično idejo ročnega sledenja brez krmilnikov. Z vedno večjim številom iger in dejavnosti, ki izvajajo podpor...