Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Sito hackerato

  1. #1

    Sito hackerato

    Ciao ragazzi,
    ho da poco subito un attacco di un hacker su di un sito realizzato in ASP con supporto di database sql server express edition.
    In pratica su ogni riga di tabella, e su ogni campo ho trovato aggiunto al record esistente il seguente indirizzo:
    post.webserviceget.ru/js.js
    inserito tra i tag script.

    Sapete un pò di cosa si tratta? come ho subito l'attacco (credo sql injection) e come posso fare a capire da dove è entrato e soprattutto come rimediare per proteggere meglio il sito?

    Grazie mille

  2. #2
    Approfondendo l'argomento ho visto nel log del sito che l'attacco è stato fatto sul modello di quanto indicato su questo sito:
    http://nsmjunkie.blogspot.com/2010/0...infection.html

    La pagina del sito attaccata è dinamica ed è di questo tipo:
    http://www.nomedelsito.com/nomepagin...riabile=valore
    Quindi nella pagina l'interrogazione al database viene fatta così:
    Variabile = request.querystring("Variabile")
    SELECT *FROM tabella WHERE ID = " & Variabile

    Ormai con aspx non realizzo più interrogazioni del genere ma le parametrizzo tutte.
    Potrei fare una cosa del genere anche con ASP 3.0, o la soluzione da adottare deve essere un'altra?

    Grazie ancora tantissimo

  3. #3
    Sembrerebbe SQL injection. Se le variabili in input non vengono controllate, sia da querystring che da form, corri questi rischi. Cerca sul forum, trovi parecchie discussioni a proposito.
    Chi non cerca trova.

  4. #4
    Ciao tas,
    grazie per la risposta.

    Sì da quello che ho capito il problema è legato al valore passato come querystring, che non ho controllato con il replace degli apici inquanto credevo fosse qualcosa da fare soltanto quando i dati si passano tramite form e non in querystring.

  5. #5
    Adesso ho provato a impostare il recupero del parametro attraverso questa funzione di controllo che uso per tutti i campi form:
    Function FixSQL(stringa)
    stringa = Replace(stringa, "'", "''")
    stringa = Replace(stringa, "%", "[%]")
    stringa = Replace(stringa, "[", "[[]")
    stringa = Replace(stringa, "]", "[]]")
    stringa = Replace(stringa, "#", "[#]")
    FixSQL = stringa
    End function

    Pensi che possa andare bene se recupero il valore di querystring attraverso questa funzione e poi dopo lo passo alla query sql?
    E soprattutto come posso fare a verificare altre falle nel sito?

    Grazie mille
    Guido

  6. #6
    L'ideale sarebbe usare i parametri per passare i valori alla query, in alternativa dovresti fare un controllo più stringente sui valori che arrivano dal browser.
    Guardando il tuo codice mi è venuto un dubbio, spero che qualcuno più esperto di me in SQL possa confermare o smentire. Se riuscissi ad inviare tramite querystring o form la seguente stringa:
    1; DELETE * FROM tabella
    codice:
    Variabile = request.querystring("Variabile")
    sql = "SELECT * FROM tabella WHERE ID = " & Variabile
    in uscita dal codice avrei la seguente query:
    SELECT * FROM tabella WHERE ID = 1;DELETE FROM tabella

    In alcuni database (sql server per esempio) questa query è assolutamente valida, ed è in realtà composta da due query: una prima select, poi una delete... è evidente che così facendo riuscirei a cancellare tutti i record della tabella!!!
    Chi non cerca trova.

  7. #7
    uh cavolo spero proprio non sia così come dici.

    Cmq per ora seguendo il tuo consiglio sulle query parametriche ho impostato così la query, dimmi se la ritieni valida dal punto di vista della sicurezza:

    codice:
    ID_utente = FixSQL(request.QueryString("ID_utente"))
    Set objCommand = Server.CreateObject("ADODB.COMMAND")
    
    sqlUT = "SELECT tab_1.*, tab_2.* FROM tab_1, tab_2 WHERE tab_2.id_utente =? AND tab_1.ID_utenti = tab_2.id_utente"
    
    Set objCommand.ActiveConnection = conn
    objCommand.CommandText = sqlUT
    
    Set param1 = objCommand.CreateParameter("id", adInteger, adParamInput)
    param1.value = ID_utente
    objCommand.Parameters.Append param1
    
    Set rsUT = objCommand.Execute()
    Grazie mille

  8. #8
    Se usi i parametri la funzione FixSQL non serve, visto che il controllo sul valore è già implementato in ADO.
    Chi non cerca trova.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.