Turvalisus

Pimeda SQLi süstimistehnika õpetus

Pimeda SQLi süstimistehnika õpetus

Mis on SQL-i süstimine?

SQL Injection on andmebaasirünnaku tüüp, mille puhul ründaja üritab varastada teavet veebirakenduse andmebaasist. See võib sõltuvalt veebirakenduse keskkonnast ja andmebaasi versioonist põhjustada isegi koodi kaugkäivitamise.

SQL-i süstimine toimub kasutaja sisendi halva desinfitseerimise tõttu. Kui võtate kasutaja sisendi mõnes kodeerimiskeeles (PHP, ASP.NET) ja edastage see otse serveri andmebaasi ilma sisendil filtrit rakendamata, see võib põhjustada SQL Injectioni haavatavuse.

Näiteks on järgmine PHP-kood SQL Injectioni rünnaku suhtes haavatav, kuna see edastab kasutaja sisendi otse andmebaasi. Ründaja saab andmebaasist andmete väljavõtmiseks luua oma pahatahtliku andmebaasipäringu.

// Kasutaja sisend salvestatakse muutuja ID-s
$ id = $ _GET ['id'];
// Kasutaja sisend täidetakse otse andmebaasis
$ getid = "SELECT eesnimi, perekonnanimi kasutajate hulgast WHERE user_id = '$ id'";
// Vea või õnnestumise korral tagastatakse tulemused kasutajale
$ result = mysql_query ($ getid) või sure ('
" . mysql_error () . "
');
$ num = mysql_numrows ($ tulemus);

Teiselt poolt on toodud sellise koodiga turvaline koodinäide andmebaasiga suhtlemiseks. See võtab kasutaja sisendi ja filtreerib sellest kõik pahatahtlikud märgid, seejärel edastab selle andmebaasi.

$ id = $ _GET ['id'];
$ id = ribasid ($ id);
$ id = mysql_real_escape_string ($ id);

Normaalne vs pime SQL-i süstimine

Tavaline SQL-i süstimine

Kui tavaline SQL-i süstimine üritab ründaja sisestada ühe tsitaadi ('), vastab see üks tsitaat andmebaasis käivitamisel veaga. Viga trükitakse ründaja brauseris.

Selle tõrke eest vastutav kood on

// kui andmebaas vastab veaga, käivitatakse funktsioon „or die ()”
vea printimiseks
$ result = mysql_query ($ getid) või sure ('
" . mysql_error () . "
');

Rakenduses Normal SQL Injection näeb ründaja vigade tulemusi ning nende hõlpsat tuvastamist ja kasutamist.

Pime SQL-i süstimine

Pimeda SQL-i injektsiooni korral ei kuvata pahatahtliku päringu, näiteks ühe tsitaadi, andmebaasi tõrke ründaja brauseris või kuvatakse see väga üldisel viisil, mida ründaja ei saa hõlpsasti tuvastada ega kasutada.

Selle eest vastutav taustaprogrammi kood on toodud allpool

$ tulemus = mysql_query ($ getid); // mysql-i vigade mahasurumiseks eemaldati 'or die'

Pimeda SQL-i süstimise korral ei näe ründaja täielikke tulemusi, mistõttu seda tüüpi SQLi on raske tuvastada ja kasutada, kuid sellel on sama riskitase kui tavalisel SQL-il.

Pimeda SQL-i tuvastamise tehnikad

Kui tavalise SQL-i sisestamise saab tuvastada, saates sisendina ühe tsitaadi (') ja uurides väljundviga, ei saa pimeda SQL-i süsti selle tehnika abil tuvastada, kuna see ei näita SQL-i viga. Pimeda SQL-i süsti tuvastamiseks on palju meetodeid, mõned neist on toodud järgmiselt

TÕENE ja VÄÄRAL põhinev tuvastamine

Üks andmebaaside, sealhulgas MySQL, omadustest on erinev käitumine tõeste ja valede väidete korral. Isegi kui andmebaas ei näita vigu, võime otsustada tõeste ja valede lausete kasutamise üle. Mõelge järgmisele stsenaariumile,

Järgmine leht on pimeda SQL-i süstimise suhtes haavatav ja selle tõelise avalduse kuvamisel kuvatakse kõik andmebaasi kirjed

1 'või 1 = 1 #

Andes valepäringu sisendina andmeid ei kuvata.

1 'või 1 = 2 #

Isegi veebileht ei näita vigu, kahe lehe erinevus näitab, et meie päringuid täidetakse andmebaasis edukalt.

TIME-põhine tuvastamine

Andmebaasides on viivituste jaoks funktsioon, sealhulgas MySQL, MS-SQL ja teised. Kui andmebaasi vastus on aeglane, siis võime oma päringus kasutada funktsiooni SLEEP (), mis tähendab, et meie päring on edukalt täidetud ja veebileht on pime SQL-i süstimise suhtes haavatav.

1 'JA magada (15) #

On veel üks aeganõudev funktsioon “BENCHMARK”, mida saab kasutada andmebaasi vastuse viivitamiseks

1 'JA VÕRDLUSPUNKT (10000000, SHA1 (1337)) #

Ülaltoodud rida täidab andmebaasis funktsiooni SHA1 () 10000000 korda, mis lisab vastuses märkimisväärse hulga viivitusi.

Ajapõhine pime SQL-i süstimine teistes andmebaasides

MS SQL: ID = 1; ooteaja viivitus '0: 0: 10'-

ORACLE SQL: JA [RANDNUM] = DBMS_PIPE.RECEIVE_MESSAGE ('[RANDSTR]', [SLEEPTIME])

PostgreSQL: JA [RANDNUM] = (VALI [RANDNUM] PG_SLEEP-ist ([SLEEPTIME])])

SQLite: JA [RANDNUM] = LIKE ('ABCDEFG', UPPER (HEX (RANDOMBLOB ([SLEEPTIME] 00000000/2))))

Andmebaasi teabe väljavõtmine

Andmebaasi väljavõtmise esimene samm on andmebaasi veerunumbrite määramine. Seejärel proovige leida täiendavate andmete eraldamiseks haavatavaid veerge.

Pime SQL-i süstimine käitub päringus "järjekorras" erinevate veerunumbritega erinevalt.

1 'tellimus 1 # poolt

Ülaltoodud väide vastab tõele, kuna andmebaasis on alati vähemalt üks veerg. Proovige nüüd väga suure hulgaga.

1 'tellimus 10000 järgi #

Andmebaasi vastus erineb eelmisest. Nüüd proovige 2 veeruga.

Avaldus töötas, see tähendab, et andmebaasis on 2 või enam veergu. Nüüd proovige kolme veeruga.

1 'tellimus 3 # poolt

Andmebaas ei ole ühtegi vastust saatnud, see tähendab, et andmebaasis on ainult 2 veergu. Nüüd proovime tabelite loendi andmebaasi visata, selleks kasutame järgmist päringut

1 'liit kõik vali 1, rühm_kass (tabeli_nimi) teabe_skeemi hulgast.
tabelid, kus table_schema = andmebaas () #

Taustaprogrammi andmebaasis “külalisteraamat ja kasutajad” on kaks tabelit. Kasutajate tabel võib sisaldada kasutajanimesid ja paroole. Veerunimede tabelist väljavõtmiseks sisestage järgmine päring.

1 'liit kõik valige 1, rühm_kass (veeru_nimi) teabe_skeemist.
veerud, kus table_schema = andmebaas () #

Nüüd oleme välja võtnud veergude nimed, see hõlmab ka kasutajate ja paroolide veerge. Need veerud salvestavad klientide kasutajanimed ja nende paroolid.

Nüüd proovime andmeid pärida järgmise päringu abil

1 'liit kõik valige kasutajatelt 1, grupi_kass (kasutaja, parool) #

Ja nii saate Blind SQL Injectionit vigadele tuginedes ära kasutada. Väljundparoolid räsitakse enamasti, mida saab dekrüpteerida selliste tööriistade abil nagu John The Ripper või Hashcat.

Järeldus:

Pime SQL Injection on SQLi tüüp, mis ei näita andmebaasivigu ega reageeri väga üldise sõnumiga. Sellepärast on pimeda SQL Injectioni haavatavust veebisaidil väga raske tuvastada. Kui see on tuvastatud, saate seda SQLMapi abil käsitsi või automatiseeritud protsessiga hõlpsasti ära kasutada.

Parimad mängude jaoks mõeldud Linuxi distrod 2021. aastal
Linuxi operatsioonisüsteem on oma algsest, lihtsast, serveripõhisest välimusest kaugele jõudnud. See operatsioonisüsteem on viimastel aastatel tohutul...
Kuidas Linuxis oma mänguseanssi jäädvustada ja voogesitada
Varem peeti mängude mängimist ainult hobiks, kuid aja jooksul kasvas mängutööstus tehnoloogia ja mängijate arvu osas tohutult. Mängupublik on veebimän...
Parimad mängud, mida saab mängida käte jälgimisega
Oculus Quest tutvustas hiljuti suurepärast ideed käsitsi jälgimisest ilma kontrolleriteta. Üha suurema hulga mängude ja tegevustega, mis toetavad kas ...