Injecție SQL

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Clasificarea vectorilor de atac de injecție SQL în 2010
Clasificarea vectorilor de atac de injecție SQL în 2010

În securitatea computerului, injecția SQL este o tehnică de injectare a codului , utilizată pentru a ataca aplicațiile care gestionează date prin baze de date relaționale utilizând limbajul SQL . Eșecul verificării introducerii utilizatorului vă permite să inserați în mod artificial șiruri de cod SQL care vor fi executate de aplicația server : datorită acestui mecanism, chiar și comenzile SQL foarte complexe pot fi executate prin modificarea datelor (de exemplu, crearea de noi utilizatori) la descărcarea completă a conținutul din baza de date. [1]

Istorie

Primele discuții publice legate de injecția SQL au apărut în jurul anului 1998. [2] De exemplu, un articol din 1998 în revista Phrack . [3]

Descriere

Acesta exploatează vulnerabilitățile de securitate ale codului aplicației care se conectează la sursa de date SQL, de exemplu, prin exploatarea lipsei de filtrare a intrării utilizatorului (de exemplu, „caractere de evacuare” în șirurile SQL) sau a lipsei unei tastări puternice a variabilelor utilizate. Este cel mai bine cunoscut ca un atac de aplicație web , dar este, de asemenea, utilizat pentru a ataca orice alt tip de aplicație care utilizează în mod nesigur bazele de date SQL.

Permite atacatorilor să falsifice identificarea , modificarea datelor existente, să provoace probleme de respingere, cum ar fi anularea tranzacțiilor sau modificarea situațiilor financiare, să obțină toate datele din sistem, să șteargă sau să facă datele inaccesibile și să creeze sau să compromită utilizatorii (de exemplu, administratorul) serverului bazei de date.

Într-un studiu din 2012, s-a observat că, în medie, aplicațiile web primesc 4 atacuri pe lună, iar comercianții cu amănuntul primesc de două ori mai multe atacuri decât industriile. [4]

Tipuri de injecție SQL

Injecția SQL (SQLI) este considerată de Open Web Application Security Project a fi una dintre cele mai mari 10 vulnerabilități ale aplicațiilor web în 2007 și 2010. [5] În 2013 și 2017, SQLI a fost considerat atacul numărul unu în top 10 al OWASP. [ 6] Există patru subclase principale de injecție SQL:

Viermele furtunii este un exemplu de utilizare a SQLI compus. [11]

Această clasificare a stării SQLI reprezintă evoluția sa până în 2010. [12]

Implementări tehnice

Caracterele de evacuare nu sunt filtrate corect

Acest tip de injecție SQL apare atunci când introducerea utilizatorului nu este filtrată de caractere de evacuare și apoi transmisă într-o instrucțiune. Acest lucru poate provoca manipularea declarațiilor făcute pe baza de date de către utilizatorii finali ai aplicației.

Următoarea linie de cod ilustrează acest tip de vulnerabilitate:

statement = " SELECT * FROM users WHERE name = ' " + userName + " ' ; "

Acest cod SQL preia toate înregistrările care au un anumit nume de utilizator din tabelul de utilizatori. Cu toate acestea, dacă un atacator scrie variabila „userName” într-un anumit mod, instrucțiunea SQL poate face mai mult decât a fost intenționat de autorul codului. De exemplu, setarea variabilei „userName” ca:

 'SAU' 1 '=' 1

Sau folosind comentarii pentru a opri executarea restului interogării (există trei tipuri de comentarii SQL [13] ). Toate cele trei linii au un spațiu la final:

 'SAU' 1 '=' 1 '- 
'SAU' 1 '=' 1 '({ 
'SAU' 1 '=' 1 '/ *

Iată cum arată redarea instrucțiunii SQL după inserarea uneia dintre liniile de cod cu comentariu și fără:

 SELECT * FROM utilizatori WHERE nume = '' OR '1' = '1';
 SELECT * FROM utilizatori WHERE nume = '' OR '1' = '1' - „;

Dacă acest cod a fost utilizat într-o procedură de autentificare, atunci acest exemplu ar putea fi folosit pentru a forța selectarea tuturor câmpurilor de date (*) ale „tuturor” utilizatorilor, mai degrabă decât un singur nume de utilizator, așa cum intenționează codul, acest lucru se întâmplă deoarece evaluarea „ 1 '=' 1 'este întotdeauna adevărat ( evaluarea scurtcircuitului ).

În exemplul de mai jos, valoarea „userName” ar determina ștergerea tabelului „user” și selectarea tuturor datelor din tabelul „userinfo” (dezvăluind practic informațiile tuturor utilizatorilor), folosind un API care permite multiplii de instrucțiuni :

 la'; DROP TABLE users ; SELECT * FROM userinfo WHERE 't' = ' t

Introducerea intrării specificate mai sus face ca instrucțiunea SQL să devină astfel:

 SELECTAȚI * DE LA utilizatori UNDE nume = 'a' ; Utilizatorii DROP TABLE ; SELECT * FROM userinfo WHERE 't' = 't' ;

În timp ce multe dintre implementările serverului SQL vă permit să rulați mai multe instrucțiuni cu un singur apel, unele dintre aceste API-uri ca în funcția mysql_query() din PHP nu o permit din motive de securitate. Acest lucru împiedică atacatorii să injecteze interogări complet separate în declarație, dar asta nu îi împiedică să le modifice.

Gestionarea incorectă a tipului

Acest tip de injecție SQL apare atunci când un câmp furnizat de utilizator nu este puternic tastat sau constrângerile de tip nu sunt verificate. Acest lucru se poate întâmpla, de exemplu, atunci când un câmp numeric este utilizat într-o instrucțiune SQL, dar programatorul nu efectuează verificări pentru a verifica dacă intrarea introdusă de utilizator este de fapt numerică. De exemplu:

 statement: = " SELECT * FROM userinfo WHERE id = " + a_variable + ";"

Din această afirmație este evident că autorul a dorit ca variabila să fie un număr care se referă la câmpul „id”. Cu toate acestea, dacă este de fapt un șir , atunci utilizatorul final ar putea manipula declarația după bunul plac și, astfel, sustrage nevoia de caractere de evadare. De exemplu, setarea unei variabile la

 1; Utilizatori DROP TABLE

Tabelul „utilizatori” este eliminat din baza de date, deoarece instrucțiunea SQL devine:

 SELECT * FROM userinfo WHERE id = 1 ; Utilizatorii DROP TABLE ;

Injecție SQL orb

Blind SQL Injection este utilizat atunci când o aplicație web este vulnerabilă la SQLI, dar rezultatele operațiunii nu sunt vizibile pentru atacator. Este posibil ca pagina vulnerabilă să nu fie una care afișează date, dar poate fi afișată diferit în funcție de rezultatul declarației de tip logic injectat în instrucțiunea SQL originală apelată pentru acea pagină. Acest tip de atac poate dura mult timp, deoarece trebuie să creați o declarație nouă pentru fiecare bit recuperat. Există diverse instrumente care vă permit să automatizați aceste atacuri odată ce vulnerabilitățile au fost identificate și care sunt informațiile țintă. [14]

Răspunsuri condiționate

Unul dintre tipurile de injecție SQL orbă obligă baza de date să evalueze o declarație logică pe un ecran obișnuit al aplicației. De exemplu, un site de recenzii de cărți folosește un șir de interogare pentru a decide ce recenzie de carte se afișează. Apoi adresa URL http://books.example.com/showReview.php?ID=5 va face ca serverul să execute interogarea

 SELECT * FROM bookreviews WHERE ID = 'Valoare (ID)' ;

Cu care va popula pagina cu datele recenziei cu ID 5, stocate în tabelul de recenzii de carte. Interogarea rulează complet pe server; astfel încât utilizatorul nu va cunoaște numele bazei de date, tabelului sau câmpurilor și nici nu va cunoaște șirul de interogare. Utilizatorul va vedea doar că adresa URL de mai sus returnează o recenzie de carte. Un hacker poate încărca următoarele adrese URL http : // books . example . com / showReview . php ? ID = 5 OR 1 = 1 și http : // books . example . com / showReview . php ? ID = 5 AND 1 = 2 , care ar putea genera executarea acestor interogări, respectiv:

 SELECT * FROM bookreviews WHERE ID = '5' OR '1' = '1';
SELECT * FROM bookreviews WHERE ID = '5' și '1' = '2';

Dacă utilizați adresa URL cu „1 = 1”, recenzia inițială este încărcată, iar adresa URL cu „1 = 2” este încărcată o pagină goală sau de eroare, iar pagina returnată nu arată utilizatorului că este doar o adresă URL nevalidă. introdus, este foarte probabil ca site-ul să fie vulnerabil la atacurile de injecție SQL, deoarece înseamnă că ambele interogări ar fi putut fi executate cu succes de către serverul bazei de date. Hackerul ar putea rula următorul șir de interogare pentru a afla numărul versiunii MySQL pe server: http :// books . example . com / showReview . php ? ID = 5 AND substring ( @@version , 1 , INSTR ( @@version , '.' ) - 1 ) = 4 , odată executată, aceasta va afișa recenzia cărții dacă serverul folosește MySQL 4 și altfel o pagină goală sau d ' eroare. Hackerul poate continua să utilizeze codul din șirurile de interogare pentru a obține din ce în ce mai multe informații despre server până când se descoperă o nouă cale de atac sau până când obiectivele sale sunt atinse. [15] [16]

Injecție SQL de ordinul doi

Injecția SQL de ordinul doi apare atunci când valorile transmise de utilizator conțin comenzi rău intenționate care sunt salvate pe server, mai degrabă decât executate imediat. În unele cazuri, aplicația poate stoca intrarea rău intenționată ca și cum ar fi o instrucțiune SQL validă, iar o altă parte a aplicației care nu verifică pentru a se proteja de injecțiile SQL ar putea executa instrucțiunea stocată. Acest tip de atac necesită cunoașterea faptului că valorile trimise sunt utilizate ulterior. Este posibil ca scanerele de securitate ale aplicațiilor web să nu observe cu ușurință acest tip de injecție SQL și poate fi necesar să fie instruiți manual cu privire la unde să caute indicii despre atac.

Prevenirea

Injecția SQL este un atac bine cunoscut care poate fi ușor evitat cu măsuri simple. După ceea ce se crede că a fost un atac cu injecție SQL asupra companiei britanice TalkTalk Group, BBC a raportat că experții în securitate au fost uimiți că o companie atât de mare este vulnerabilă la acest tip de atac. [17]

Instrucțiune parametrizată

Cu multe dintre platformele de dezvoltare, este posibil să se utilizeze instrucțiuni parametrizate care funcționează cu parametri (numiți substituenți sau variabile de legare) în loc să insereze direct intrarea utilizatorului direct în instrucțiune. Un substituent poate stoca doar o valoare de tipul specificat și nu orice instrucțiune SQL. În acest fel, injecția SQL este pur și simplu tratată ca o valoare nevalidă pentru acel parametru.

În multe cazuri, instrucțiunea SQL este în schimb fixă ​​și fiecare parametru este deci un scalar și nu un tabel. Intrarea utilizatorului este apoi atribuită (legată) unui parametru. [18]

Consolidarea la nivel de cod

Utilizarea bibliotecilor de mapare relațională cu obiectele evită scrierea codului SQL. Bibliotecile ORM generează automat instrucțiuni SQL parametrizate, pornind de la cod orientat obiect.

Evadare

O modalitate simplă, deși predispusă la erori, de a preveni atacurile SQLI este de a evita caracterele care au o semnificație specială în SQL. Manualele SQL DBMS explică ce caractere au semnificații speciale, acest lucru vă permite să creați o listă de caractere care trebuie înlocuite deoarece sunt potențial dăunătoare. De exemplu, fiecare apostrof ( ' ) dintr-un parametru trebuie înlocuit cu două apostrofe (' ') pentru a obține un șir SQL de literali valid. De exemplu, în PHP, de obicei, evitați caracterele speciale din parametri utilizând funcția mysqli_real_escape_string(); înainte de a trimite interogarea SQL:

 $ Mysqli = new mysqli ( 'hostname', 'db_username', 'PAROLĂ_BD', 'db_name');
$ query = sprintf ( "SELECT * FROM` Users` WHERE UserName = '% s' AND Password = '% s'" ,
                  $ mysqli -> real_escape_string ( $ nume utilizator ),
                  $ mysqli -> real_escape_string ( $ parolă ));
$ mysqli -> interogare ( $ interogare );

Această funcție previne barele oblice înapoi la următoarele caractere: \x00 , \n , \r , \ , ' , " și \x1a . De obicei este utilizată pentru securizarea interogărilor înainte de trimiterea la o bază de date MySQL . [19]
În PHP există multe alte funcții pentru diferite tipuri de baze de date, cum ar fi pg_escape_string() pentru PostgreSQL . Funcția addslashes(string $str) utilizată pentru a evita caracterele speciale și este utilizată în special pentru interogarea bazelor de date care nu au funcții de evacuare în PHP, returnează un șir cu bare oblice înainte de caracterele care trebuie să fie între ghilimele. Aceste caractere sunt apostroful ('), ghilimele duble ("), bară inversă și caracterul NULL. [20]
Evadarea întotdeauna a șirurilor SQL este o practică predispusă la erori, deoarece este ușor să uitați să scăpați de un șir dat. Crearea unui strat transparent pentru securizarea intrării poate reduce erorile sau le poate elimina în totalitate. [21]

Controlul modelului

Puteți verifica parametrii cu șiruri de numere întregi, flotante sau booleene și puteți verifica dacă valoarea lor are o structură validă pentru tipul de date verificate. Șirurile care au o structură destul de rigidă (dată, UUID, numai alfanumerice etc.) pot fi verificate pentru a vedea dacă reflectă structura tipului de date.

Permisiuni pentru baze de date

Restricționarea permisiunilor în datele de conectare utilizate de aplicația web pentru a accesa baza de date, punând doar permisiunile necesare, poate servi la reducerea eficacității oricărui atac de injecție SQL, care vizează erorile aplicației.

De exemplu, pe Microsoft SQL Server , puteți interzice conectarea bazei de date să facă o selecție pentru unele dintre tabelele de sistem, astfel se evită ca JavaScript să fie inserat în toate coloanele bazei de date.

 nega Selectați pe sys . sysobjects la webdatabaselogon ;
nega Selectați pe sys . obiecte la webdatabaselogon ;
nega Selectați pe sys . Mese la webdatabaselogon ;
nega Selectați pe sys . vederi la webdatabaselogon ;
nega Selectați pe sys . pachete la webdatabaselogon ;

Conversia hexazecimală

Conversia hexazecimală se face prin conversia textului simplu în reprezentarea hexazecimală înainte de a-l utiliza într-o comandă SQL. În PHP, funcțiile utilizate sunt funcția bin2hex () [22] sau dechex [23] . Funcția bin2hex () este preferată deoarece convertește orice caracter și nu doar cifre. În această secțiune, va fi utilizată doar funcția bin2hex () .

Exemplu de utilizare a funcției PHP bin2hex () :

 echo bin2hex ( "test" );

Ieșirea funcției de mai sus este:

 74657374

De exemplu, vorbim doar despre baza de date MySQL [24] . În MySQL, funcția unhex () [25] este utilizată pentru a converti înapoi un șir hexazecimal în text simplu.

Exemplu de funcție unhex () în MySQL:

 SELECT * FROM myTable WHERE id = unhex ( '32' );

Dacă am converti șirul cu unhex () în text simplu, acesta va deveni:

 SELECT * FROM myTable WHERE id = 2 ;

Conversia hexagonală elimină atacurile de injecție SQL deoarece șirul hexazecimal trimis funcției unhex () este returnat ca un șir utilizat anterior și nu este interpretat.

Exemplu de programare

Următorul program scurt introduce un program PHP și funcția acestuia. Programul arată un atac de injecție SQL pe o comandă SQL simplă. Apoi, arată cum, convertind toate datele primite în hexazecimale, reușește să oprească atacul. Funcția PHP este un set simplu de comenzi pentru baza de date și pentru preluarea rezultatului din baza de date SQL. După cum sa menționat mai sus, baza de date utilizată este MySQL.

Exemplu de cod
 Fișier: test.php
<? php

    include_once "dosql.php" ;
#
# Puneți aici informațiile bazei de date. Folosesc date din fișierul jurnal.
#
    $ hostname = "myhost" ;
    $ username = "MyUser" ;
    $ parola = "Parola mea" ;
    $ baza de date = " baza mea de date " ;

    $ Mysqli = new mysqli ($ nume de gazdă, $ numele de utilizator, parola $, $ bază de date);

    if ( $ mysqli -> connect_errno ) {
        echo "Nu s-a putut conecta la MySQL: (" , $ mysqli -> connect_errno , ")" , $ mysqli -> connect_error ;
        ieșire ;
    }
    ecou "SQL INJECTION - Plain \ n " ;
    $ sql = "SELECT * FROM log WHERE log_id = '2' SAU 1 = 1; # '" ;
    $ res = dosql ( $ sql );
    foreach ( $ res [ 0 ] ca $ k => $ v ) {
        ecou "RES [ $ k ] = $ v \ n " ;
    }

    echo " \ n \ n SQL INJECTION = Hexadecimal \ n " ;
    $ sql = "SELECT * FROM log WHERE log_id = unhex ('" . bin2hex ( "2' or 1 = 1; # '" ) . "')" ;
    $ res = dosql ( $ sql );
    foreach ( $ res [ 0 ] ca $ k => $ v ) {
        ecou "RES [ $ k ] = $ v \ n " ;
    }

    ieșire ;
?>

Fișier: dosql.php
<? php

###################################################### ###################################################### ### #################################
# dosql (). Faceți comanda SQL.
###################################################### ###################################################### ### #################################
funcție dosql ( $ sql )
{
    global $ mysqli ;

    $ cmd = "INSERT INTO log (data, entry) VALUE (ACUM (), unhex ('" . bin2hex ( $ sql ) . "'))" ;
    $ res = $ mysqli -> interogare ( $ cmd );

    $ res = $ mysqli -> interogare ( $ sql );
    if ( ! $ res ) {
        $ array = debug_backtrace ();
        if ( isset ( $ array [ 1 ])) { $ a = $ array [ 1 ] [ 'line' ]; }
        else if ( isset ( $ array [ 0 ])) { $ a = $ array [ 0 ] [ 'line' ]; }
        altceva { $ a = "???" ; }

        ecou "EROARE @" , $ a , ": (" , $ mysqli -> errno , ") \ n " , $ mysqli -> eroare , " \ n \ n " ;
        ecou „SQL = $ sql \ n  ;
        ieșire ;
    }

    if ( preg_match ( "/ INSERT / i" , $ sql )) { return $ mysqli -> insert_id ; }
    if ( preg_match ( "/ DELETE / i" , $ sql )) { return null ; }
    if ( ! is_object ( $ res )) { return null ; }

    $ număr = - 1 ;
    $ array = array ();
    $ res -> data_seek ( 0 );
    while ( $ rând = $ res -> fetch_assoc ()) {
        $ count ++ ;
        foreach ( $ rând ca $ k => $ v ) { $ array [ $ count ] [ $ k ] = $ v ; }
    }

    returnează $ array ;
}
Ieșirea programului
 INJECȚIE SQL - Câmpie
RES [log_id] = 1
RES [data] = 2015-03-25 10:40:18
RES [intrare] = AFIȘĂ coloane complete DIN jurnal

SQL INJECTION = Hexadecimal
RES [log_id] = 2
RES [data] = 2015-03-25 10:40:18
RES [entry] = SELECT * FROM log ORDER BY title ASC

Prima parte a ieșirii programului arată trimiterea comenzii SQL fără a efectua verificări sau modificări. Cererea originală ar trebui să returneze a doua înregistrare, dar datorită injecției SQL, prima înregistrare este returnată. A doua parte a rezultatului arată ce se întâmplă dacă toate datele de intrare sunt convertite în hexazecimale. Folosind conversia, toate caracterele din comandă, inclusiv cele introduse prin injecție SQL, sunt convertite în hexazecimale și nu mai sunt un pericol deoarece nu sunt interpretate ca comenzi ci ca șiruri. Deoarece toate caracterele sunt tratate ca parte a întregului șir, dacă MySQL înțelege că are nevoie de un număr, acesta convertește șirul într-un număr. Regulile pentru conversia șirului în număr sunt de a converti [26] șirul până când ajunge la un caracter nenumeric sau la sfârșitul șirului. Când apare oricare dintre aceste două evenimente, conversia se oprește în acel moment. Apoi, se vede „2” și apoi apostroful ('), care îi spune SQL-ului meu să termine conversia șirului. În cele din urmă, valoarea numerică doi (2) este utilizată pentru a determina ce înregistrare trebuie returnată. Acest proces sau metodă de evaluare a datelor primite este motivul pentru care atacurile de injecție SQL nu pot apărea dacă se utilizează o conversie hexagonală.

Considerații suplimentare

În plus, utilizarea BIN2HEX și UNHEX necesită un timp de execuție mai mic decât celelalte metode prezentate. Acest lucru se datorează în principal naturii simpliste a ambelor funcții. După cum se arată în fragmentul JavaScript, conversia în hex este destul de simplă și simplă:

Exemplu de cod
 Fișier : toHex . js
////////////////////////////////////////////////////// ////////////////////////////////
// toHex (). Convertiți un șir în hexazecimal.
////////////////////////////////////////////////////// ////////////////////////////////
funcție toHex ( s )
{
	var l = "0123456789ABCDEF" ;
	var o = "" ;

	if ( typeof s ! = "șir" ) { s = s . toString (); }
	pentru ( var i = 0 ; i < s . lungime ; i ++ ) {
		var c = s . charCodeAt ( i );
		o = o + l [( c >> 4 )] + l [( c & 0xf )];
	}

	retur sau ;
}

Așa cum se arată, spre deosebire de mysqli_real_escape_string () [27] care trebuie scăpat pentru fiecare diferit, bin2hex () convertește pur și simplu toate caracterele în hexadecimalul corespunzător. Iar funcția unhex () face operația opusă. Deoarece nu trebuie efectuate teste pentru un anumit personaj sau anumite caractere, ciclul de conversie este mic și eficient. De asemenea, spre deosebire de mysqli_real_escape_string () , dacă o nouă metodă este descoperită în viitor, funcția bin2hex () va dezactiva automat combinația de caractere, deoarece returnează un șir hex. Un exemplu în acest sens este caracterul Control-D ASCII. [28] Control-D poate provoca o condiție „End of Transmission” [29] în unele limbi. Dacă se folosește funcția bin2hex () , Control-D devine pur și simplu text ASCII „04” care nu poate provoca probleme.

Exemple

  • În februarie 2002, Jeremiah Jacks a descoperit că Guess.com era vulnerabil la un atac de injecție SQL, permițând oricui a fost capabil creați o adresă URL ad hoc [ neclară ] pentru a prelua peste 200 000 de nume, numere și date de expirare a cardurilor de credit în baza de date a clienților site-ului. [30]
  • La 1 noiembrie 2005, un hacker minor a folosit un atac de injecție SQL pentru a intra pe site-ul unei reviste de securitate cibernetică din Taiwan a Tech Target Group și a fura informații despre clienți. [31]
  • La 13 ianuarie 2006, infractorii cibernetici ruși au intrat pe site-ul guvernului Rhode și au furat informații despre cardurile de credit de la persoane care făcuseră afaceri cu agenții de stat. [32]
  • La 29 martie 2006, un hacker a descoperit o vulnerabilitate a injecției SQL pe un site oficial de turism al guvernului indian. [33]
  • La 29 iunie 2009, un criminal cibernetic a dezamăgit site-ul web Microsoft din Marea Britanie folosind un atac SQLI. [34] [35] Un site web britanic, The Register, a raportat că un purtător de cuvânt al Microsoft a confirmat problema.
  • În ianuarie 2008, zeci de mii de PC-uri au fost infectate cu un atac automat de injecție SQL care a exploatat vulnerabilitățile codului folosind Microsoft SQL Server [36]
  • În ianuarie 2008, site-ul malaysian Kaspersky Lab a fost piratat de un hacker turc cunoscut sub numele de „m0sted”, care a susținut că a folosit injecția SQL.
  • În februarie 2013, un grup de hacker din Maldive a piratat site-ul web „UN-Maldive” folosind SQL Injection.
  • La 27 mai 2009, anchetatorii anti-SUA infiltrează armata Servers anchetatori au declarat că au crezut că au primit un atac numit injecție SQL care a exploatat o vulnerabilitate de securitate Microsoft SQL Server pentru a intra pe servere web. Se știe că „m0sted” a efectuat atacuri similare pe multe alte site-uri în trecut.
  • În mai 2008, o fermă de servere din China a folosit interogări automate trimise către motorul de căutare Google pentru a identifica site-uri web care utilizează server SQL, care era vulnerabil la un instrument SQLI. [36] [37]
  • În 2008, cel puțin din aprilie până în august, o serie de atacuri au început să exploateze vulnerabilitățile SQLI ale serverului web IIS și SQL Server. Atacul nu a necesitat ghicirea unui nume de tabel sau a unei coloane și a corupt toate coloanele de text din toate tabelele într-o singură cerere. [38] Un șir HTML a fost adăugat la fiecare valoare cu o referință la un malware JavaScript . Atunci când valoarea a fost afișată ulterior vizitatorului site-ului, scriptul a încercat diverse abordări pentru a prelua controlul sistemului vizitatorului. Numărul de pagini web exploatate este estimat la aproximativ 500.000. [39]
  • La 17 august 2009, Departamentul de Justiție al SUA a acuzat un cetățean american, Albert Gonzalez , și doi ruși pentru furtul a 130 de milioane de numere de card de credit folosind un atac SQLI. Este raportat ca „cel mai mare caz de furt de identitate din istoria americană”. [40]
  • În decembrie 2009, un hacker a putut accesa o bază de date RockYou care conținea parolele și numele de utilizator necriptate ale a aproximativ 32 de milioane de utilizatori care foloseau un atac SQLI. [41]
  • În iunie 2010, un cercetător de securitate din America de Sud care se numește alias „Ch Russo” a obținut informații sensibile despre utilizatorii unui popular site BitTorrent , The Pirate Bay . El a câștigat acces la panoul de control ca administrator al site-ului și a exploatat o vulnerabilitate în SQLI care i-a făcut posibil să obțină informații despre contul de utilizator, inclusiv adrese IP, hash- uri de parolă MD5 și înregistrări ale torrentelor pe care le-a încărcat fiecare utilizator. [42]
  • În perioada 24-26 iulie 2010, hackerii din Japonia și China au folosit injecția SQL pentru a avea acces la datele cardurilor de credit ale clienților de la Neo BEAT, o companie din Osaka care gestionează site-ul unui mare supermarket online. Atacul a afectat și șapte parteneri de afaceri, precum lanțurile de supermarketuri Izumiya Co, Maruetsu Inc și Ryukyu Jusco Co. Furtul de date a afectat 12 191 de clienți. Începând cu 14 august 2010, au fost raportate peste 300 de cazuri de informații despre cardul de credit utilizate pentru achiziționarea de bunuri și servicii în China.
  • La 19 septembrie 2010, în timpul alegerilor generale suedeze din 2010, un alegător a încercat o injecție de cod cu mâna scriind comenzi SQL pe buletinul de vot. [43]
  • Pe 8 noiembrie 2010, site-ul Marinei Regale Britanice a fost compromis de un hacker român numit TinKode care a folosit un atac de injecție SQL. [44] [45]
  • La 5 februarie 2011, HBGary , o firmă de securitate cibernetică, a pătruns în LulzSec folosind injecția SQL pe site-ul lor CMS. [46]
  • Pe 27 martie 2011, mysql.com, site-ul oficial MySQL , a fost compromis de un hacker care a folosit un atac de injecție Blind SQL. [47]
  • La 11 aprilie 2011, Barracuda Networks a fost compromis din cauza unei vulnerabilități SQLi. Au fost obținute adrese de e-mail și nume de utilizator ale angajaților. [48]
  • Pe o perioadă de 4 ore, pe 27 aprilie 2011, a avut loc un atac automat de injecție SQL pe site-ul Rapoarte de bandă largă, care a reușit să obțină 8% din perechi de nume de utilizator / parolă, 8000 de conturi aleatorii din 9000 de conturi active și 90.000 de conturi. Vechi sau inactive . [49] [50] [51]
  • La 1 iunie 2011, „ hacktiviștii ” grupului LulzSec au fost acuzați de furt de cupoane , chei de descărcare și parole care erau stocate în baza de date text de pe site - ul Sony , accesând informațiile personale ale milioane de utilizatori. [52] [53]
  • În iunie 2011, PBS a fost piratat, cel mai probabil prin SQLi; procesul complet folosit de hackeri pentru a efectua atacul este descris pe acest blog Imperva . [54]
  • În mai 2012, site-ul Wurm Online , un joc online multiplayer masiv , a fost eliminat printr-un atac de injecție SQL pe măsură ce site-ul a fost actualizat. [55]
  • În iunie 2012, un grup de hackeri au furat 450.000 de acreditări de conectare de la Yahoo! . Conectările au fost stocate în text simplu. Grupul a spart securitatea Yahoo printr-o „tehnică de injecție SQL bazată pe uniune ”. [56] [57]
  • La 1 octombrie 2012, un grup de hackeri numit „Team GhostShell” a publicat înregistrări personale ale studenților, facultăților, angajaților, absolvenților, din 53 de universități, inclusiv Harvard , Princeton , Stanford , Cornell , Johns Hopkins și Universitatea din Zurich pe pastebin. com . Hackerii au spus că doresc „să conștientizeze schimbările din educație astăzi”, plângându-se de schimbarea legilor educației în Europa și de creșterea școlarizării în SUA. [58]
  • Pe 27 iunie 2013, grupul de hackeri „ RedHack ” a pătruns pe site-ul administrației din Istanbul. [59] Aceștia au susținut că vor anula datoriile pe care oamenii le aveau la companiile de apă, gaz, internet, electricitate și telefonie. În plus, au publicat un nume de utilizator și o parolă de administrator, astfel încât cetățenii să se poată conecta și anula datoriile. Au anunțat aceste știri prin Twitter. [60]
  • La 4 noiembrie 2014, grupul hacktivist „RaptorSwag” a compromis 71 de baze de date guvernamentale chineze folosind un atac de injecție SQL pe site-ul Camerei de Comerț din China. Datele divulgate au fost postate public împreună cu cooperarea anonimă . [61]
  • La 2 februarie 2014, un grup de hackeri numit @deletesec a scurs 40.000 de conturi de pe site-ul AVS TV. [62]
  • Pe 21 februarie 2014, forumul guvernanței SUA a avut un atac care a dus la expunerea a 3.215 conturi. [63]
  • Pe 21 februarie 2014, un grup de hackeri numiți @deletesec a piratat Spirol International după ce au amenințat că vor fi arestați hackerii pentru raportarea vulnerabilității de securitate. Detaliile a 70.000 de utilizatori au fost expuse în timpul acestui conflict. [64]
  • În octombrie 2015, se credea că un atac cu injecție SQL a fost folosit pe serverele unei companii britanice de telecomunicații, Talk Talk , furând datele personale ale milioanelor de consumatori. [65]

Referințe în cultura de masă

  • Il login non autorizzato su un sito web tramite SQL injection fornisce uno spunto narrativo per la trama del romanzo Il seggio vacante di JK Rowling , pubblicato nel 2012.
  • Un cartone di xkcd cartoon riguarda un personaggio di nome "Robert'); DROP TABLE students;--" che effettua una SQL injection. Come risultato di questo cartone, l'SQL injection viene chiamata qualche volta in modo informale 'Bobby Tables'. [66] [67]
  • Nel 2014 un soggetto in Polonia ha legalmente rinominato la sua impresa in Dariusz Jakubowski x'; DROP TABLE users; SELECT '1 con lo scopo di ostacolare le operazioni degli spammer harvesting bots . [68]

Note

  1. ^ Microsoft, SQL Injection , su technet.microsoft.com . URL consultato il 4 agosto 2013 .
    «SQL injection is an attack in which malicious code is inserted into strings that are later passed to an instance of SQL Server for parsing and execution. Any procedure that constructs SQL statements should be reviewed for injection vulnerabilities because SQL Server will execute all syntactically valid queries that it receives. Even parameterized data can be manipulated by a skilled and determined attacker.» .
  2. ^ Sean Michael Kerner, How Was SQL Injection Discovered? The researcher once known as Rain Forrest Puppy explains how he discovered the first SQL injection more than 15 years ago. , su esecurityplanet.com , 25 novembre 2013.
  3. ^ Jeff Forristal (signing as rain.forest.puppy), NT Web Technology Vulnerabilities , in Phrack Magazine , vol. 8, 54 (article 8), 25 dicembre 1998.
  4. ^ Imperva, Imperva Web Application Attack Report ( PDF ), su imperva.com , July 2012. URL consultato il 4 agosto 2013 .
    «Retailers suffer 2x as many SQL injection attacks as other industries. / While most web applications receive 4 or more web attack campaigns per month, some websites are constantly under attack. / One observed website was under attack 176 out of 180 days, or 98% of the time.» .
  5. ^ Category:OWASP Top Ten Project , su owasp.org , OWASP. URL consultato il 3 giugno 2011 (archiviato dall' url originale il 1º dicembre 2019) .
  6. ^ Category:OWASP Top Ten Project , su owasp.org , OWASP. URL consultato il 13 agosto 2013 (archiviato dall' url originale il 9 ottobre 2013) .
  7. ^ WHID 2007-60: The blog of a Cambridge University security team hacked , su xiom.com , Xiom. URL consultato il 3 giugno 2011 (archiviato dall' url originale il 19 giugno 2011) .
  8. ^ WHID 2009-1: Gaza conflict cyber war , su xiom.com , Xiom. URL consultato il 3 giugno 2011 (archiviato dall' url originale il 7 ottobre 2011) .
  9. ^ Copia archiviata , su xiom.com . URL consultato il 22 maggio 2011 (archiviato dall' url originale il 5 marzo 2010) .
  10. ^ Third Wave of Web Attacks Not the Last , su darkreading.com , Dark Reading. URL consultato il 29 luglio 2012 .
  11. ^ Dancho Danchev, Mind Streams of Information Security Knowledge: Social Engineering and Malware , su ddanchev.blogspot.com . URL consultato il 3 giugno 2011 .
  12. ^ Krassen Deltchev, New Web 2.0 Attacks , su B.Sc. Thesis , Ruhr-University Bochum. URL consultato il 18 febbraio 2010 .
  13. ^ IBM Informix Guide to SQL: Syntax. Overview of SQL Syntax > How to Enter SQL Comments [ collegamento interrotto ] , IBM.
  14. ^ Using SQLBrute to brute force data from a blind SQL injection point , su justinclarke.com , Justin Clarke. URL consultato il 18 ottobre 2008 (archiviato dall' url originale il 14 giugno 2008) .
  15. ^ macd3v, Blind SQL Injection tutorial , su forum.intern0t.org . URL consultato il 6 dicembre 2012 (archiviato dall' url originale il 14 dicembre 2012) .
  16. ^ Andrey Rassokhin e Dmitry Oleksyuk, TDSS botnet: full disclosure , su nobunkum.ru . URL consultato il 6 dicembre 2012 (archiviato dall' url originale il 9 dicembre 2012) .
  17. ^ ( EN ) Questions for TalkTalk - BBC News , su BBC News . URL consultato il 26 ottobre 2015 .
  18. ^ SQL Injection Prevention Cheat Sheet , su owasp.org , Open Web Application Security Project. URL consultato il 3 marzo 2012 (archiviato dall' url originale il 16 novembre 2015) .
  19. ^ mysqli->real_escape_string - PHP Manual , su in2.php.net , PHP.net. URL consultato il 7 aprile 2016 (archiviato dall' url originale il 17 aprile 2016) .
  20. ^ Addslashes - PHP Manual , su pl2.php.net , PHP.net (archiviato dall' url originale il 5 settembre 2011) .
  21. ^ Transparent query layer for MySQL , su xarg.org , Robert Eisele, 8 novembre 2010.
  22. ^ https://php.net/manual/en/function.bin2hex.php
  23. ^ https://php.net/manual/en/function.dechex.php
  24. ^ https://www.mysql.com/
  25. ^ https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_unhex
  26. ^ https://dev.mysql.com/doc/refman/5.0/en/type-conversion.html
  27. ^ https://php.net/manual/en/function.mysql-real-escape-string.php
  28. ^ http://www.ascii-code.com/
  29. ^ http://www.asciitable.com/
  30. ^ Guesswork Plagues Web Hole Reporting , su securityfocus.com , SecurityFocus , 6 marzo 2002.
  31. ^ WHID 2005-46: Teen uses SQL injection to break to a security magazine web site , su xiom.com , Web Application Security Consortium , 1º novembre 2005. URL consultato il 1º dicembre 2009 (archiviato dall' url originale il 17 gennaio 2010) .
  32. ^ WHID 2006-3: Russian hackers broke into a RI GOV website , su xiom.com , Web Application Security Consortium , 13 gennaio 2006. URL consultato il 16 maggio 2008 (archiviato dall' url originale il 13 febbraio 2011) .
  33. ^ WHID 2006-27: SQL Injection in incredibleindia.org , su xiom.com , Web Application Security Consortium , 29 marzo 2006. URL consultato il 12 marzo 2010 (archiviato dall' url originale il 1º luglio 2009) .
  34. ^ Robert, Hacker Defaces Microsoft UK Web Page , su cgisecurity.net . URL consultato il 16 maggio 2008 .
  35. ^ Keith Ward, Hacker Defaces Microsoft UK Web Page , su rcpmag.com , Redmond Channel Partner Online, 29 giugno 2007. URL consultato il 16 maggio 2008 (archiviato dall' url originale il 23 dicembre 2007) .
  36. ^ a b Sumner Lemon, IDG News Service, Mass SQL Injection Attack Targets Chinese Web Sites , su pcworld.com , PCWorld , 19 maggio 2008. URL consultato il 27 maggio 2008 .
  37. ^ Michael Zino, ASCII Encoded/Binary String Automated SQL Injection Attack , su bloombit.com , 1º maggio 2008. URL consultato il 7 aprile 2016 (archiviato dall' url originale il 1º giugno 2008) .
  38. ^ Giorgio Maone, Mass Attack FAQ , su hackademix.net , 26 aprile 2008.
  39. ^ ( EN ) Gregg Keizer, Huge Web hack attack infects 500,000 pages , in Computerworld , 25 aprile 2008. URL consultato il 16 ottobre 2015 .
  40. ^ US man 'stole 130m card numbers' , BBC, 17 agosto 2009. URL consultato il 17 agosto 2009 .
  41. ^ Jolie O'Dell, RockYou Hacker - 30% of Sites Store Plain Text Passwords , in New York Times , 16 dicembre 2009. URL consultato il 23 maggio 2010 .
  42. ^ The pirate bay attack , 7 luglio 2010.
  43. ^ Did Little Bobby Tables migrate to Sweden? , su alicebobandmallory.com . URL consultato il 3 giugno 2011 .
  44. ^ Royal Navy website attacked by Romanian hacker BBC News , 8-11-10, Accessed November 2010
  45. ^ Sam Kiley, Super Virus A Target For Cyber Terrorists , su news.sky.com , 25 novembre 2010. URL consultato il 25 novembre 2010 .
  46. ^ We Are Anonymous: Inside the Hacker World of LulzSec ( PDF ), su par-anoia.net , Little, Brown and Company (archiviato dall' url originale il 18 luglio 2012) .
  47. ^ MySQL.com compromised , su blog.sucuri.net , sucuri .
  48. ^ Hacker breaks into Barracuda Networks database , su networkworld.com (archiviato dall' url originale il 27 luglio 2011) .
  49. ^ site user password intrusion info , su dslreports.com . URL consultato il 3 giugno 2011 .
  50. ^ DSLReports says member information stolen , Cnet News, 28 aprile 2011. URL consultato il 29 aprile 2011 .
  51. ^ DSLReports.com breach exposed more than 100,000 accounts , The Tech Herald, 29 aprile 2011. URL consultato il 29 aprile 2011 (archiviato dall' url originale il 30 aprile 2011) .
  52. ^ LulzSec hacks Sony Pictures, reveals 1m passwords unguarded , in electronista.com , 2 giugno 2011. URL consultato il 7 aprile 2016 (archiviato dall' url originale il 6 giugno 2011) .
  53. ^ Ridge Shan, LulzSec Hacker Arrested, Group Leaks Sony Database , in The Epoch Times , 6 giugno 2011.
  54. ^ Imperva.com: PBS Hacked - How Hackers Probably Did It . URL consultato il 1º luglio 2011 .
  55. ^ Wurm Online is Restructuring , su wurmonline.tumblr.com , 11 maggio 2012.
  56. ^ Chenda Ngak. "Yahoo reportedly hacked: Is your account safe?" , CBS News. July 12, 2012. Retrieved July 16, 2012.
  57. ^ https://www.zdnet.com/450000-user-passwords-leaked-in-yahoo-breach-7000000772/
  58. ^ Nicole Perlroth, Hackers Breach 53 Universities and Dump Thousands of Personal Records Online , in New York Times , 3 ottobre 2012.
  59. ^ RedHack Breaches Istanbul Administration Site, Hackers Claim to Have Erased Debts .
  60. ^ Redhack tweet about their achievement .
  61. ^ http://news.softpedia.com/news/Hackers-Leak-Data-Allegedly-Stolen-from-Chinese-Chamber-of-Commerce-Website-396936.shtml
  62. ^ http://www.maurihackers.info/2014/02/40000-avs-tv-accounts-leaked.html
  63. ^ http://www.batblue.com/united-nations-internet-governance-forum-breached/
  64. ^ http://news.softpedia.com/news/Details-of-70-000-Users-Leaked-by-Hackers-From-Systems-of-SPIROL-International-428669.shtml
  65. ^ Mobile News article , su mobilenewscwp.co.uk . URL consultato il 7 aprile 2016 (archiviato dall' url originale il 13 maggio 2016) .
  66. ^ Randall Munroe, XKCD: Exploits Of A Mom , su xkcd.com . URL consultato il 26 febbraio 2013 .
  67. ^ Bobby Tables: A guide to preventing SQL injection , su bobby-tables.com . URL consultato il 6 ottobre 2013 .
  68. ^ ( PL ) Jego firma ma w nazwie SQL injection. Nie zazdrościmy tym, którzy będą go fakturowali ;) , su Niebezpiecznik , 11 settembre 2014. URL consultato il 26 settembre 2014 .

Voci correlate

Collegamenti esterni