Nella sicurezza informaticaSQL injection è una tecnica di command injection, usata per attaccare applicazioni che gestiscono dati attraverso database relazionali sfruttando il linguaggio SQL. Il mancato controllo dell'input dell'utente permette di inserire artificiosamente delle stringhe di codiceSQL che saranno eseguite dall'applicazione server: grazie a questo meccanismo è possibile far eseguire comandi SQL, anche molto complessi, dall'alterazione dei dati (es. creazione di nuovi utenti) al download completo dei contenuti nel database.[1]
Storia
Le prime discussioni pubbliche relative all'SQL injection sono apparse attorno al 1998.[2] Per esempio, un articolo del 1998 su Phrack Magazine.[3]
Descrizione
Sfrutta le vulnerabilità di sicurezza del codice applicativo che si collega alla fonte dati SQL, ad esempio, sfruttando il mancato filtraggio dell'input dell'utente (es. 'caratteri di escape' nelle stringhe SQL) oppure la mancata tipizzazione forte delle variabili impiegate. È più conosciuto come attacco destinato ad applicazioni web, ma è anche usato per attaccare qualsiasi altro tipo di applicazione che impieghi in modo non sicuro database SQL.
Permette agli attaccanti di effettuare attività di spoof identify, modificare dati esistenti, causare repudiation issues come l'annullamento di transazioni o la modifica dei bilanci, permette di ottenere tutti i dati sul sistema, eliminare o rendere inaccessibile dei dati, e creare o compromettere gli utenti (e.g. amministratore) del database server.
In uno studio del 2012, è stato osservato che in media le applicazioni web ricevono 4 attacchi al mese, ed i rivenditori ricevono il doppio degli attacchi rispetto alle industrie.[4]
Tipi di SQL injection
L'SQL injection (SQLI) è considerata da Open Web Application Security Project una delle 10 maggiori vulnerabilità delle applicazioni web nel 2007 e nel 2010.[5] Nel 2013 e nel 2017 SQLI è stato considerato il numero uno degli attacchi sulla OWASP top 10.[6] Ci sono quattro principali sotto classi di SQL injection:
Lo Storm Worm è un esempio di utilizzo delle Compounded SQLI.[11]
Questa classificazione dello stato dell'SQLI rappresenta la sua evoluzione fino al 2010.[12]
Implementazioni tecniche
Caratteri di escape non filtrati correttamente
Questo tipo di SQL injection si verifica quando non viene filtrato l'input dell'utente dai caratteri di escape e quindi vengono passati all'interno di uno statement. Questo può provocare la manipolazione degli statements eseguiti sul database dagli utenti finali dell'applicazione.
La seguente linea di codice illustra questo tipo di vulnerabilità:
Questo codice SQL recupera tutti i record che hanno un certo username dalla tabella users. Tuttavia, se un utente malintenzionato scrive la variabile “userName” in un certo modo, lo statement SQL può fare più di quello che era inteso dall'autore del codice. Per esempio, impostando la variabile “userName” come:
' OR '1'='1
Oppure usando dei commenti per non fare eseguire il resto della query (ci sono tre tipi di commenti SQL[13]). Tutte e tre le linee hanno uno spazio alla fine:
' OR '1'='1' --
' OR '1'='1' ({
' OR '1'='1' /*
Ecco come appare il rendering dello statement SQL dopo l'inserimento di una delle linee di codice con commento e senza:
SELECT*FROMusersWHEREname=''OR'1'='1';
SELECT*FROMusersWHEREname=''OR'1'='1'-- ';
Se questo codice fosse utilizzato in una procedura di autenticazione, allora questo esempio potrebbe essere usato per forzare la selezione di tutti i campi dati (*) di "tutti" gli utenti piuttosto che di un singolo username come era inteso dal codice, ciò accade perché la valutazione di ‘1'='1' è sempre vera (short-circuit evaluation).
Nell'esempio di sotto il valore di “userName” causerebbe l'eliminazione della tabella “user” e la selezione di tutti i dati nella tabella “userinfo” (in pratica rivelando le informazioni di tutti gli utenti), usando un API che permette statement multipli:
a'; DROPTABLEusers;SELECT*FROMuserinfoWHERE't'='t
L'inserimento dell'input specificato sopra fa diventare lo statement SQL in questo modo:
Mentre molte delle implementazioni dei server SQL permettono di eseguire statement multipli con un'unica chiamata, alcune di queste API come nella funzione mysql_query() di PHP non lo permettono per motivi di sicurezza. Questo evita che gli attaccanti iniettino delle query completamente separate all'interno dello statement, ma ciò non li ferma dal modificarle.
Gestione non corretta del tipo
Questo tipo di SQL injection si verifica quando un campo fornito dall'utente non è fortemente tipizzato o non vengono controllati i vincoli sul tipo. Questo può accadere, ad esempio, quando viene utilizzato un campo numerico in uno statement SQL, ma il programmatore non fa controlli per verificare che l'input immesso dall'utente sia effettivamente numerico. Per esempio:
Da questo statement è evidente che l'autore voleva che la variabile fosse un numero riferito al campo "id". Tuttavia se essa è di fatto una stringa, allora l'utente finale potrebbe manipolare lo statement a suo piacimento, e quindi aggirare la necessità di caratteri di escape. Per esempio, impostando una variabile a
1;DROP TABLE users
Viene fatto il drop (eliminazione) della tabella "users" dal database, visto che lo statement SQL diventa:
SELECT*FROMuserinfoWHEREid=1;DROPTABLEusers;
Blind SQL injection
Il Blind SQL Injection è usato quando un'applicazione web è vulnerabile ad SQLI ma i risultati dell'operazione non sono visibili all'attaccante. La pagina con la vulnerabilità potrebbe non essere una che mostra dei dati, ma può essere visualizzata differentemente a seconda del risultato dello statement di tipo logico iniettato dentro lo statement SQL originale, chiamato per quella pagina.
Questo tipo di attacco può impiegare un notevole dispendio di tempo perché bisogna creare un nuovo statement per ogni bit recuperato. Ci sono vari strumenti che permettono di automatizzare questi attacchi una volta che sono state individuate le vulnerabilità e qual è l'informazione obiettivo.[14]
Risposte condizionali
Uno dei tipi di blind SQL injection forza il database a valutare uno statement logico su un'ordinaria schermata dell'applicazione. Ad esempio, un sito di recensioni sui libri usa una query string per decidere che recensione su quale libro mostrare. Quindi l'URLhttp://books.example.com/showReview.php?ID=5 farà eseguire al server la query
SELECT*FROMbookreviewsWHEREID='Value(ID)';
Con la quale popolerà la pagina con i dati della recensione con ID 5, memorizzati nella tabella bookreviews. La query viene eseguita completamente sul server; quindi l'utente non saprà i nomi del database, della tabella, o dei campi, e nemmeno conoscerà la query string. L'utente vedrà soltanto che l'URL di sopra ritorna la recensione di un libro. Un Hacker può caricare i seguenti URL http://books.example.com/showReview.php?ID=5OR1=1 e http://books.example.com/showReview.php?ID=5AND1=2, che potrebbero generare rispettivamente l'esecuzione di queste query:
Se utilizzando l'URL con "1=1" viene caricata la recensione originale e con l'URL che ha "1=2" viene caricata una pagina bianca o d'errore, e la pagina ritornata non mostra all'utente che è appena stato inserito un URL non valido, è molto probabile che il sito sia vulnerabile ad attacchi di SQL injection perché vuol dire che entrambe le query potrebbero essere state eseguite correttamente dal database server. L'hacker potrebbe eseguire la seguente query string per venire a conoscenza del numero di versione di MySQL presente sul server: http://books.example.com/showReview.php?ID=5ANDsubstring(@@version,1,INSTR(@@version,'.')-1)=4, una volta eseguita mostrerebbe la recensione del libro se il server utilizza MySQL 4 ed altrimenti una pagina bianca o d'errore. L'hacker può continuare ad usare del codice all'interno delle query string per ottenere sempre più informazioni sul server fino a quando non viene scoperta una nuova via di attacco oppure fino a quando i suoi obiettivi non siano raggiunti.[15][16]
Second order SQL injection
Il Second order SQL injection si verifica quando i valori inviati dall'utente contengono comandi maligni che vengono salvati sul server piuttosto che venire eseguiti immediatamente. In alcuni casi, l'applicazione può memorizzare l'input maligno come se fosse uno statement SQL valido, ed un'altra parte dell'applicazione che non effettua controlli per proteggersi da SQL injections potrebbe eseguire lo statement memorizzato. Questo tipo di attacco richiede la conoscenza che i valori inviati vengano utilizzati successivamente. Gli scanner di sicurezza per applicazioni web potrebbero non accorgersi facilmente di questo tipo di SQL injection e potrebbero aver bisogno di essere istruite manualmente su dove cercare indizi sull'attacco.
Prevenzione
L'SQL injection è un attacco molto conosciuto e facilmente evitabile con semplici misure. Dopo quello che si pensa fosse stato un attacco di SQL injection sull'azienda britannica TalkTalk Group, la BBC ha riportato come gli esperti di sicurezza fossero stupiti che una così grande compagnia fosse vulnerabile a questo tipo di attacco.[17]
Statement parametrizzati
Con molte delle piattaforme di sviluppo, è possibile usare statement parametrizzati che lavorano con dei parametri (chiamati placeholder o bind variable) al posto di inserire direttamente l'input dell'utente direttamente nello statement. Un placeholder può memorizzare soltanto un valore del tipo specificato e non un qualsiasi statement SQL. In questo modo l'SQL injection viene trattata semplicemente come un valore non valido per quel parametro.
In molti casi, lo statement SQL viene invece fissato, ed ogni parametro è quindi uno scalare, e non una tabella. L'input dell'utente è quindi assegnato (legato) ad un parametro.[18]
Rafforzamento a livello di codice
Usare delle librerie di object-relational mapping evita di scrivere codice SQL. Le librerie ORM generano automaticamente degli statement SQL parametrizzati, partendo da del codice orientato agli oggetti.
Escape
Un modo diretto, anche se soggetto ad errori per prevenire attacchi di SQLI è quello di evitare caratteri che hanno un significato speciale in SQL. I manuali dei DBMS SQL spiegano quali caratteri hanno significati speciali, ciò permette di creare una lista di caratteri che devono essere sostituiti perché potenzialmente dannosi. Ad esempio, ogni apostrofo (') in un parametro deve essere sostituito con due apostrofi (' ') per ottenere una stringa SQL di letterali valida. Per esempio, in PHP di solito si evitano i caratteri speciali nei parametri utilizzando la funzione mysqli_real_escape_string(); prima di inviare la query SQL:
$mysqli=newmysqli('hostname','db_username','db_password','db_name');$query=sprintf("SELECT * FROM `Users` WHERE UserName='%s' AND Password='%s'",$mysqli->real_escape_string($username),$mysqli->real_escape_string($password));$mysqli->query($query);
Questa funzione antepone dei backslash ai seguenti caratteri: \x00, \n, \r, \, ', " e \x1a.
Essa è di solito usata per rendere sicure le query prima di inviare ad un database MySQL.[19] In PHP vi sono tante altre funzioni per vari tipi di database come pg_escape_string() per PostgreSQL. La funzione addslashes(string $str) serve ad evitare i caratteri speciali, ed è usata in particolare per fare query a database che non hanno funzioni di escape in PHP, essa ritorna una stringa con dei backslash prima dei caratteri che hanno bisogno di essere tra apici. Questi caratteri sono l'apostrofo ('), doppi apici ("), il backslash ed il carattere NULL.[20]
Fare sempre l'escape delle stringhe SQL è una pratica soggetta ad errori perché è facile dimenticare di fare l'escape di una determinata stringa. Creare un livello trasparente per rendere sicuro l'input può ridurre gli errori o eliminarli totalmente.[21]
Controllo dei pattern
Si possono controllare parametri con stringhe di interi, float o booleani, e verificare se il loro valore ha una valida struttura per il tipo di dato controllato. Le stringhe che hanno una struttura abbastanza rigida (data, UUID, solo alfanumerici, ecc.) possono essere controllati per vedere se rispecchiano la struttura del tipo di dato.
Permessi del database
Limitare i permessi nel login usato dell'applicazione web per accedere al database, mettendo solo i permessi necessari, può servire a ridurre l'efficacia di qualsiasi attacco di SQL injection, mirato a dei bug dell'applicazione.
Per esempio, su Microsoft SQL Server, si può proibire al logon del database di fare una select ad alcune delle tabelle di sistema, in questa maniera viene evitato che venga inserito del JavaScript all'interno di tutte le colonne del database
La conversione esadecimale viene fatta convertendo del semplice testo nella sua rappresentazione esadecimale prima di usarlo in un comando SQL. In PHP, le funzioni usate sono la funzione bin2hex()[22] o dechex[23]. La funzione bin2hex() è da preferire visto che converte qualsiasi carattere e non solo numeri. In questa sezione verrà usata solo la funzione bin2hex().
Esempio di utilizzo della funzione di PHP bin2hex():
echobin2hex("test");
L'output della funzione sopra è:
74657374
A scopo d'esempio parliamo soltanto del database MySQL[24]. In MySQL, la funzione unhex()[25] è usata per riconvertire una stringa esadecimale in semplice testo.
Esempio della funzione unhex() in MySQL:
SELECT*FROMmyTableWHEREid=unhex('32');
Se convertissimo la stringa con unhex() in semplice testo diventerebbe:
SELECT*FROMmyTableWHEREid=2;
La conversione esadecimale elimina gli attacchi di SQL injection perché la stringa esadecimale inviata alla funzione unhex() viene ritornata come stringa già utilizzata e non viene interpretata.
Esempio di programmazione
Nel seguente breve programma viene presentato un programma in PHP ed una sua funzione. Il programma mostra un attacco di SQL injection su un semplice comando SQL. Successivamente, mostra come convertendo tutti i dati in entrata in esadecimale, riesce a fermare l'attacco. La funzione PHP è un semplice insieme di comandi per il database e per il recupero dell'output dal database SQL. Come detto sopra il database usato è MySQL.
Codice d'esempio
File: test.php<?phpinclude_once"dosql.php";## Metti le informazioni sul tuo database qui. Sto usando i dati del mio file di log.#$hostname="myhost";$username="myUser";$password="myPassword";$database="myDatabase";$mysqli=newmysqli($hostname,$username,$password,$database);if($mysqli->connect_errno){echo"Failed to connect to MySQL: (",$mysqli->connect_errno,") ",$mysqli->connect_error;exit;}echo"SQL INJECTION - Plain\n";$sql="SELECT * FROM log WHERE log_id='2' OR 1=1; #'";$res=dosql($sql);foreach($res[0]as$k=>$v){echo"RES[$k] = $v\n";}echo"\n\nSQL INJECTION = Hexadecimal\n";$sql="SELECT * FROM log WHERE log_id=unhex('".bin2hex("2' or 1=1; #'")."')";$res=dosql($sql);foreach($res[0]as$k=>$v){echo"RES[$k] = $v\n";}exit;?>File: dosql.php<?php################################################################################# dosql(). Do the SQL command.################################################################################functiondosql($sql){global$mysqli;$cmd="INSERT INTO log (date,entry) VALUES (NOW(), unhex('".bin2hex($sql)."'))";$res=$mysqli->query($cmd);$res=$mysqli->query($sql);if(!$res){$array=debug_backtrace();if(isset($array[1])){$a=$array[1]['line'];}elseif(isset($array[0])){$a=$array[0]['line'];}else{$a="???";}echo"ERROR @ ",$a," : (",$mysqli->errno,")\n",$mysqli->error,"\n\n";echo"SQL = $sql\n";exit;}if(preg_match("/INSERT/i",$sql)){return$mysqli->insert_id;}if(preg_match("/DELETE/i",$sql)){returnnull;}if(!is_object($res)){returnnull;}$count=-1;$array=array();$res->data_seek(0);while($row=$res->fetch_assoc()){$count++;foreach($rowas$k=>$v){$array[$count][$k]=$v;}}return$array;}
Output del programma
SQL INJECTION - Plain
RES[log_id] = 1
RES[date] = 2015-03-25 10:40:18
RES[entry] = SHOW full columns FROM log
SQL INJECTION = Hexadecimal
RES[log_id] = 2
RES[date] = 2015-03-25 10:40:18
RES[entry] = SELECT * FROM log ORDER BY title ASC
La prima parte dell'output del programma mostra l'invio del comando SQL senza fare controllo o modifiche. La richiesta originale dovrebbe far ritornare il secondo record, ma grazie all'SQL injection viene ritornato il primo record. La seconda parte dell'output mostra invece cosa succede se vengono convertiti tutti i dati in ingresso in esadecimale. Usando la conversione, tutti i caratteri nel comando, inclusi quelli inseriti dall'SQL injection, vengono convertiti in esadecimale e non sono più un pericolo perché non vengono interpretati come comandi ma come stringhe. Visto che tutti i caratteri vengono trattati come parte dell'intera stringa, se MySQL capisce che ha bisogno di un numero, converte la stringa in numero. Le regole per la conversione da stringa a numero, sono di convertire[26] la stringa fino a quando non raggiunge un carattere non numerico o la fine della stringa. Quando si verifica uno di questi due eventi, la conversione si arresta in quel punto. Quindi, viene visto il “2” e poi l'apostrofo (‘), il che dice a My SQL di terminare la conversione della stringa. Infine il valore numerico due(2) viene usato per determinare quale record ritornare. Questo processo o metodo di valutazione dei dati in ingresso è il motivo per cui non possono avvenire attacchi di SQL injection se si usa una conversione esadecimale.
Considerazioni aggiuntive
In aggiunta, l'utilizzo di BIN2HEX and UNHEX richiede meno tempo d'esecuzione rispetto agli altri metodi presentati. Questo accade principalmente per la natura semplicistica di entrambe le funzioni. Come mostrato nello snippet JavaScript, convertire in esadecimale è piuttosto semplice e diretto:
Codice d'esempio
File:toHex.js////////////////////////////////////////////////////////////////////////////////// toHex(). Converte una stringa in esadecimale.////////////////////////////////////////////////////////////////////////////////functiontoHex(s){varl="0123456789ABCDEF";varo="";if(typeofs!="string"){s=s.toString();}for(vari=0;i<s.length;i++){varc=s.charCodeAt(i);o=o+l[(c>>4)]+l[(c&0xf)];}returno;}
Come mostrato, a differenza di mysqli_real_escape_string()[27] con il quale deve essere fatto il test di escape per ogni differente, bin2hex() converte semplicemente tutti i caratteri nel loro corrispettivo esadecimale. E la funzione unhex()fa l'operazione opposta. Visto che non devono essere fatti test per un particolare carattere o caratteri, il ciclo di conversione è piccolo ed efficiente. Inoltre, a differenza di mysqli_real_escape_string(), se in futuro dovesse essere scoperto un nuovo metodo, la funzione bin2hex() disabiliterà automaticamente la combinazione di caratteri, perché ritorna una stringa esadecimale. Un esempio di questo è il carattere Control-D ASCII.[28] Control-D può provocare una condizione "Fine della trasmissione"[29] in alcuni linguaggi. Se viene usata la funzione bin2hex() il Control-D diventa semplicemente il semplice testo ASCII “04” che non può causare problemi.
Esempi
Nel febbraio del 2002, Jeremiah Jacks scoprì che Guess.com era vulnerabile ad un attacco di SQL injection, permettendo a chiunque fosse stato in grado di creare un URL creata ad hoc[non chiaro] di recuperare più di 200 000 nomi, numeri e date di scadenza di carte di credito nel database dei clienti del sito.[30]
Il 1º novembre 2005, un hacker minorenne ha usato un attacco di SQL injection per entrare nel sito di una rivista di sicurezza informatica Taiwanese della Tech Target Group e rubare informazioni sui clienti.[31]
Il 13 gennaio 2006, dei criminali informatici russi sono entrati nel sito del governo di Rhode ed hanno rubato dati sulle carte di credito degli individui che avevano fatto affari con le agenzie di stato.[32]
Il 29 marzo 2006, un hacker scoprì una vulnerabilità all'SQL injection su un sito ufficiale per il turismo del governo indiano.[33]
Il 29 giugno 2009, un criminale informatico deturpò il sito web di e Microsoft UK usando un attacco di SQLI.[34][35] Un sito web britannico, The Register riportò che un portavoce di Microsoft avesse confermato il problema.
Nel gennaio 2008, decine di migliaia di PC furono infettati da un attacco di SQL injection automatizzato che sfruttava le vulnerabilità nel codice che usava Microsoft SQL Server[36]
Nel gennaio 2008, il sito del malesiano Kaspersky Lab fu violato da un hacker turco conosciuto con lo pseudonimo "m0sted", che disse di aver usato un SQL injection.
Nel febbraio del 2013, un gruppo di hacker delle Maldive violò il sito " UN-Maldives" usando l'SQL Injection.
Il 27 maggio 2009, gli investigatori Anti-U.S. Hackers Infiltrate Army Servers dissero di credere di aver ricevuto un attacco chiamato SQL injection che sfruttava una vulnerabilità di sicurezza di Microsoft SQL Server per entrare nei web server. "m0sted" è conosciuto per aver effettuato attacchi simili in molti altri siti nel passato.
Nel maggio del 2008, una server farm in Cina usò delle query automatizzate inviate a Google's search engine per identificare dei siti web che usassero SQL server, che era vulnerabile ad un SQLI tool.[36][37]
Nel 2008, almeno da aprile ad agosto, una serie di attacchi comincio a sfruttare le vulnerabilità ad SQLI di IIS web server e SQL Server. L'attacco non richiedeva di indovinare il nome di una tabella o la colonna, e corrompeva tutte le colonne di testo in tutte le tabelle in una sola richiesta.[38] Ad ogni valore veniva appeso una stringa HTML con un riferimento ad un malwareJavaScript. Quando successivamente, veniva visualizzato il valore al visitatore del sito, lo script tentava vari approcci per prendere il controllo del sistema del visitatore. Il numero delle pagine web sfruttate si stima fosse attorno alle 500,000.[39]
Il 17 agosto 2009, il Dipartimento di giustizia degli USA accusò un cittadino americano, Albert Gonzalez, e due russi del furto di 130 milioni di numeri di carte di credito avendo usato un attacco di SQLI. È riportato come "il maggiore caso di furto di identità nella storia americana".[40]
Nel dicembre 2009, un hacker riuscì ad accedere a un database della RockYou che conteneva le password e gli username non criptati di circa 32 milioni di utenti usando un attacco di SQLI.[41]
Nel giugno del 2010, un ricercatore sulla sicurezza sud americano che va con lo pseudonimo "Ch Russo" ottenne informazioni sensibili sugli utenti di un popolare sito per il BitTorrent, cioè The Pirate Bay. Ottenne l'accesso al pannello di controllo da amministratore del sito, e sfruttò una vulnerabilità di SQLI che gli rese possibile ottenere informazioni sugli account degli utenti, inclusi indirizzi IP, MD5password hashes e record di quali torrent ogni utente aveva caricato.[42]
Dal 24 al 26 luglio 2010, degli hacker dal Giappone e dalla Cina usarono un SQL injection per ottenere l'accesso ai dati sulle carte di credito dei clienti della Neo BEAT, una compagnia di Osaka che gestisce il sito di un grosso supermercato online. L'attacco ha danneggiato anche sette partner in affari come le catene di supermercati Izumiya Co, Maruetsu Inc, e Ryukyu Jusco Co. Il furto dei dati riguardò 12 191 clienti. Il 14 agosto 2010 sono stati riportati più di 300 casi di informazioni sulle carte di credito usate per acquistare beni e servizi in Cina.
Il 19 settembre 2010, durante le elezioni generali svedesi del 2010, un votante tentò una code injection a mano, scrivendo dei comandi SQL sulla scheda elettorale.[43]
L'8 novembre 2010, il sito britannico Royal Navy fu compromesso da un hacker romeno chiamato TinKode che usò un attacco di SQL injection.[44][45]
Il 5 febbraio 2011, la HBGary, un'azienda di sicurezza informatica, fu penetrata LulzSec usando l'SQL injection sul loro sito di tipo CMS-driven.[46]
Il 27 marzo 2011 mysql.com, il sito ufficiale di MySQL, fu compromesso da un hacker che usò un attacco di Blind SQL injection.[47]
L'11 aprile 2011, la Barracuda Networks fu compromessa a causa di una vulnerabilità ad SQLi. Furono ottenuti indirizzi email ed username degli impiegati.[48]
Durante un periodo di 4 ore, il 27 aprile del 2011, si verificò un attacco automatizzato di SQL injection sul sito di Broadband Reports che fu capace di ottenere l'8% dell coppie username/password, 8000 account casuali sui 9000 attivi e 90000 account vecchi o inattivi.[49][50][51]
Il 1º giugno del 2011, gli "hacktivisti" del gruppo LulzSec furono accusati di aver rubato dei coupon, download keys e passwords che erano memorizzate nel database di testo sul sito della Sony, accedendo alle informazioni personali di milioni di utenti.[52][53]
Nel giugno del 2011, PBS fu hackerata, molto probabilmente tramite SQLi; il processo completo usato dagli hacker per eseguire l'attacco è descritto su questo blog Imperva .[54]
Nel giugno del 2012, un gruppo di hacker rubò 450,000 credenziali di accesso da Yahoo!. I login erano memorizzati in semplice testo. Il gruppo sfondò la sicurezza di Yahoo tramite una "union-based SQL injection technique".[56][57]
Il 1º ottobre del 2012, un gruppo di hacker chiamati "Team GhostShell" pubblicò i record personali degli studenti, facoltà, dipendenti, laureati, di 53 università, incluse Harvard, Princeton, Stanford, Cornell, Johns Hopkins, e l'University of Zurich su pastebin.com. Gli hacker dissero che volevano "fare prendere coscienza dei cambiamenti nell'educazione di oggi", lamentandosi del cambiamento delle leggi sull'educazione in Europa, e l'incremento delle tasse scolastiche negli USA.[58]
Il 27 giugno 2013, il gruppo hacker "RedHack" sfondò il sito dell'amministrazione di Istanbul.[59] Essi affermarono che avrebbero cancellato i debiti che le persone avevano con compagnie dell'acqua, gas, internet, elettricità e telefono. Inoltre, pubblicarono username e password di amministratore per fare in modo che i cittadini potessero fare login e cancellare i loro debiti. Annunciarono questa notizia tramite Twitter.[60]
Il 4 novembre 2014, il gruppo di hacktivisti "RaptorSwag" compromise 71 database del governo cinese usando un attacco di SQL injection sul sito della camera del commercio cinese. I dati fatti trapelare furono postati pubblicamente assieme alla cooperazione di Anonymous.[61]
In 2 febbraio 2014, un gruppo di hacker chiamato @deletesec fece trapelare 40,000 account dal sito di AVS TV.[62]
Il 21 febbraio 2014, il forum di Governance degli Stati Uniti ebbe un attacco che portò l'esposizione di 3,215 account.[63]
Il 21 febbraio 2014, un gruppo di hacker chiamato @deletesec hackerò Spirol International dopo minacciarono di fare arrestare gli hacker per aver riportato la vulnerabilità di sicurezza. Furono esposti i dettagli di 70,000 utenti durante questo conflitto.[64]
Nell'ottobre del 2015, si crede sia stato usato un attacco di SQL injection ai danni dei server di una compagnia di telecomunicazioni inglese, la Talk Talk, rubando i dati personali di milioni di consumatori.[65]
Riferimenti nella cultura di massa
Il login non autorizzato su un sito web tramite SQL injection fornisce uno spunto narrativo per la trama del romanzo Il seggio vacante di J. K. Rowling, pubblicato nel 2012.
Una striscia del webcomic xkcd riguarda un personaggio chiamato "Robert'); DROP TABLE students;--", il cui nome permette di effettuare una SQL injection. In riferimento a questa striscia l'SQL injection a volte chiamata 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
^ 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.»
«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.»
^Category:OWASP Top Ten Project, su owasp.org, OWASP. URL consultato il 3 giugno 2011 (archiviato dall'url originale il 1º dicembre 2019).
^Category:OWASP Top Ten Project, su owasp.org, OWASP. URL consultato il 13 agosto 2013 (archiviato dall'url originale il 9 ottobre 2013).
^ Krassen Deltchev, New Web 2.0 Attacks, su B.Sc. Thesis, Ruhr-University Bochum. URL consultato il 18 febbraio 2010 (archiviato dall'url originale il 2 aprile 2012).
^ macd3v, Blind SQL Injection tutorial, su forum.intern0t.org. URL consultato il 6 dicembre 2012 (archiviato dall'url originale il 14 dicembre 2012).
^ 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).
^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).
^ 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).
Comic strip Frederick Burr Opper's Alphonse and Gaston (1906). Alphonse and Gaston is an American comic strip by Frederick Burr Opper, featuring a bumbling pair of Frenchmen with a penchant for politeness. It first appeared in William Randolph Hearst's newspaper, the New York Journal on September 22, 1901, with the title Alphonse a la Carte and His Friend Gaston de Table d'Hote.[1] The strip was later distributed by King Features Syndicate.[2] Characters and story Their 'After...
Species of bird Little friarbird Conservation status Least Concern (IUCN 3.1)[1] Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Aves Order: Passeriformes Family: Meliphagidae Genus: Philemon Species: P. citreogularis Binomial name Philemon citreogularis(Gould, 1837) The little friarbird (Philemon citreogularis), also known as the little leatherhead or yellow-throated friarbird, is the smallest of the friarbirds within the Philemon genus...
هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (فبراير 2017) لوري كوهن معلومات شخصية الميلاد 13 مايو 1982 (العمر 41 سنة)نيوتن الطول 173 سنتيمتر مركز اللعب لاعب هجوم خلفي الجنسية الولايات المتحدة الوزن 66 كيلوغرام ال
Stephanie Bice Stephanie Irene Bice (née Asady, Persia: اسدی; lahir 11 November 1973)[1] adalah seorang politikus Amerika Serikat yang menjabat sebagai anggota DPR untuk dapil V Oklahoma. Sebagai anggota Partai Republik, Bice adalah Iran Amerika pertama yang terpilih dalam Kongres. Ia mewakili dapil XXII dalam Senat Oklahoma dari 2014 sampai 2020. Referensi ^ Stephanie Bice. Diakses tanggal January 13, 2021. Pranala luar Representative Stephanie Bice official U.S. House...
Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Liya Bahari Indah, Wangi-Wangi Selatan, Wakatobi – berita · surat kabar · buku · cendekiawan · JSTOR Liya Bahari IndahDesaNegara IndonesiaProvinsiSulawesi TenggaraKabupatenWakatobiKecamatanWangi-Wan...
Aniplex Inc.株式会社アニプレックスSebelumnyaSony Pictures Entertainment Music Publishing Inc. (September 1995-Januari 1997) Sony Pictures Entertainment Visual Works Inc. (Januari 1997-Januari 2001) Sony Music Entertainment Visual Works Inc. (Januari 2001-April 2003)JenisKorporasi bisnisIndustriIndustri film Industri anime Industri musik Label Rekaman (Produksi Musik)DidirikanSeptember 1995; 28 tahun lalu (1995-09) (Sebagai Sony Pictures Entertainment Music Publishing)[1 ...
List of characters in The Witcher series This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (May 2011) (Learn how and when to remove this template message) This list is incomplete; you can help by adding missing items. (December 2022) The fictional universe of The Witcher Saga was created by Polish writer Andrzej Sapkowski. The following is a list of notable char...
Coventry CityBerkas:Coventry City FC logo.svgNama lengkapCoventry City Football ClubJulukanThe Sky BluesBerdiri13 Agustus 1883(sebagai Singers F.C.)[1]StadionRicoh Arena, Coventry(Kapasitas: 32,609[2])PemilikOtium Entertainment GroupManajerSteven PressleyLigaLiga Satu Inggris2013–14ke-18, Liga Satu Inggris Kostum kandang Kostum tandang Musim ini Coventry City Football Club adalah sebuah klub sepak bola Inggris yang didirikan pada tahun 1883. Bermarkas di Coventry, West Midla...
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Yamaha FZS600 Fazer – news · newspapers · books · scholar · JSTOR (May 2015) (Learn how and when to remove this template message) Type of motorcycle Yamaha FZS600 FazerFZS600 FazerManufacturerYamahaSuccessorYamaha FZ6 FazerEngine599 cc liquid cooled DOHC 1...
Mr.Thom de GraafKHSde Graaf in 2018Wakil Presiden Raad van StatePetahanaMulai menjabat 1 November 2018Penguasa monarkiWillem-AlexanderPendahuluPiet Hein DonnerPemimpin Partai di Eerste KamerMasa jabatan9 June 2015 – 26 June 2018PendahuluRoger van BoxtelPenggantiHans EngelsGrup parlemenDemokrat 66Anggota Eerste KamerMasa jabatan7 Juni 2011 – 20 September 2018Grup parlemenDemocrats 66Walikota NijmegenMasa jabatan8 Januari 2007 – 1 Februari 2012PendahuluGuusj...
2004 Antiguan general election ← 1999 23 March 2004 2009 → All 17 seats in the House of Representatives9 seats needed for a majorityTurnout91.19% ( 27.58pp) First party Second party Third party Leader Baldwin Spencer Lester Bird Trevor Walker Party UPP ALP BPM Seats won 12 4 1 Seat change 8 8 Popular vote 21,892 16,544 400 Percentage 55.50% 41.94% 1.26% Swing 11.05pp 11.00pp 0.25pp Prime Minister before election Lester Bird ALP Subsequent Pri...
Lake in the Philippines Lake MainitLake MainitLocation within the PhilippinesLocationMindanaoCoordinates9°25′57″N 125°31′22″E / 9.43250°N 125.52278°E / 9.43250; 125.52278TypeOligotrophic Freshwater lakePrimary inflows28 creeks and riversPrimary outflowsCalinawan RiverCatchment area870.72 km2 (336.19 sq mi)Basin countriesPhilippinesMax. length29.1 km (18.1 mi)Surface area173.4 km2 (67.0 sq mi)Average depth128 ...
Dutch artist (1886–1960) Debora DuyvisBorn(1886-02-17)17 February 1886Amsterdam, NetherlandsDied29 October 1974(1974-10-29) (aged 88)Amsterdam, NetherlandsNationalityDutchKnown forIllustration, Engraving Debora Geertruida Duyvis (1886-1960) was a Dutch illustrator and engraver. Biography Duyvis was born on 17 February 1886 in Amsterdam. She studied at the Rijksakademie van beeldende kunsten (State Academy of Fine Arts). Her instructors included Johannes Josephus Aarts and Antoon D...
Campionato femminile CONCACAF 20022002 CONCACAF Women's Gold Cup Competizione CONCACAF Women's Gold Cup Sport Calcio Edizione 6ª Organizzatore CONCACAF Date dal 27 ottobre 2002al 9 novembre 2002 Luogo Canada Stati Uniti Partecipanti 8 (19 alle qualificazioni) Risultati Vincitore Stati Uniti(5º titolo) Secondo Canada Terzo Messico Quarto Costa Rica Statistiche Miglior giocatore Milbrett Miglior marcatore Hooper Sinclair Milbrett (7) Miglior portiere Molina ...
2000 studio album by The ChoirFlap Your WingsStudio album by The ChoirReleasedJuly 4, 2000Recorded1999, 2000StudioNeverland Studios,Berry Hill, TennesseeEarful, Franklin, TennesseeDark Horse Recording, Franklin, TennesseeThe Mission, Ashland City, TennesseeGenreChristian alternative rockLength39:57LabelTheChoir.net RecordsProducerDerri Daugherty, Steve Hindalong, Tim ChandlerThe Choir chronology Let It Fly(1997) Flap Your Wings(2000) Live at Cornerstone 2000: Plugged(2000) The Choir s...
Village in County Tyrone, Northern Ireland For other places with the same name, see Galbally. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Galbally, County Tyrone – news · newspapers · books · scholar · JSTOR (April 2007) (Learn how and when to remove this template message) Roman Catholic Church, Galbally...
Pietro Arduino Pietro ArduinoInformación personalNacimiento 18 de julio de 1728CapriFallecimiento 13 de abril de 1805PaduaNacionalidad italianoInformación profesionalÁrea botánicoAbreviatura en botánica Ard.Miembro de Academia de Ciencias de Turín (desde 1784) [editar datos en Wikidata] Pietro Arduino (Capri, 18 de julio de 1728-Padua, 13 de abril de 1805) fue un botánico italiano. De una familia algo pobre, estudia en Verona, con el francés Jean François Séguier (170...
RajčilovciРајчиловци Localização País Sérvia Província Sérvia central Região Krajište Distrito Pčinja Município Bosilegrad Características geográficas População total (2011) 1 813 hab. Altitude 718 m Código postal Rajčilovci (em cirílico: Рајчиловци) é uma vila da Sérvia localizada no município de Bosilegrad, pertencente ao distrito de Pčinja, na região de Krajište. A sua população era de 1813 habitantes segundo o censo de 2011.[1...
Andrei Svechnikov Datos personalesApodo(s) SvechNacimiento Barnaul, Rusia26 de marzo de 2000 (24 años)Nacionalidad(es) RusoAltura 1,88 m (6′ 2″)Peso 88 kg (194 lb)Carrera deportivaDeporte Hockey sobre hieloClub profesionalClub Carolina HurricanesLiga NHLPosición Extremo derechoDorsal(es) 37[editar datos en Wikidata] Andrei Svechnikov (Barnaul, Rusia, 26 de marzo de 2000) apodado Svech, es un jugador profesional ruso de hockey sobre hielo que se desempeña en la ...
Type of group in abstract algebra Not to be confused with Symmetry group. A Cayley graph of the symmetric group S4 using the generators (red) a right circular shift of all four set elements, and (blue) a left circular shift of the first three set elements. Cayley table, with header omitted, of the symmetric group S3. The elements are represented as matrices. To the left of the matrices, are their two-line form. The black arrows indicate disjoint cycles and correspond to cycle notation. Green ...