Voci sospette nel database MySQL dai moduli di input dell'utente - sql injection?

2

Ho costruito un sito web da zero usando PHP e MySQL per la mia comunità residenziale e il nostro budget è un grosso "0".

Cinque giorni fa ho scoperto che c'erano 222 voci in una tabella nel mio database che sembravano sospette. Ho trovato altre 196 voci in un'altra tabella con voci simili. Tutte queste voci sono state fatte entro un intervallo di 11 ore.

Da allora mi sono rotto la testa cercando di farlo 1. trovare modi per evitare che tali cose accadano - in pratica cercando di imparare e convertire il mio PHP in MySQLi (il mio host non supporta PDO) e 2. cercando di scoprire con certezza se si tratta di un attacco di SQL injection. 3. il log di Apache per il giorno rilevante aveva una dimensione di 4976Kb mentre, tutti gli altri giorni è inferiore a 50Kb 4. Ho anche preso una discarica di uno dei tavoli (222 record).

  • Quello che vorrei sapere è, quale di questi è il primo posto da visitare?
  • Studio innanzitutto i registri per cercare di scoprire cosa hanno ottenuto da questo esercizio?
  • Studio le voci della tabella per scoprire come hanno fatto?
  • Devo rimuovere il sito?
  • Devo svuotare i miei tavoli, cambiare le password esistenti, ecc.? (fortunatamente, dal momento che questo sito non è stato "lanciato", non ci sono dati che devo conservare - posso semplicemente svuotare tutti i tavoli!)

La ricerca su SE mi ha dato molto da pensare in particolare link e la risposta di RobM ha perfettamente senso.

Non conosco le implicazioni di ciò che vedo nei miei tavoli. Alcune delle voci non sono visualizzate nell'anteprima, ovviamente perché contiene caratteri speciali. Mi sarebbe piaciuto poter caricare il dump excel della tabella in questione ma non sembra possibile qui ...

Non voglio rimuovere queste voci prima di poter capire cosa potrebbero voler dire e quanto sono stato compromesso. Allo stesso tempo, non sono sicuro se lasciarli lì possa causarmi ulteriori danni ....

    
posta vinaya 06.07.2013 - 07:51
fonte

2 risposte

4

Potresti essere stato sottoposto al processo chiamato "Fuzzing". Questo è quando un utente malintenzionato invia molti input e percepisce come si comporta la tua applicazione web. Il web fuzzing potrebbe includere SQL injection, XSS, input overladed o stringhe di input non valide in generale.

Per prima cosa devi guardare le voci ... Contengono comandi SQL? come SELECT, UPDATE, DELETE, INSERT
o operatori sql, come OR + - o molti caratteri sql come '> <="

Se li vedi, significa che l'hacker ha provato un'iniezione SQL sul tuo database.

Se vedi dei caratteri html nel tuo database, l'utente malintenzionato ha tentato di eseguire XSS memorizzato contro di te.

Se gli input sono lunghi, l'utente malintenzionato ha forse provato a DOS il tuo sito web e ad abbassarlo. (Lo stesso è vero se ha inviato molti input in breve tempo).

È necessario osservare la funzionalità del sito che ha accettato tali valori. Se le voci / gli input non provengono da una specifica funzionalità (ad esempio un modulo di registrazione), probabilmente è stato un tentativo di hacking.

Altri tipi di iniezioni che escono sono LDAP, XML, Command e alcuni altri che non ricordo. Cerca i caratteri che contengono quanto segue:%, > , (,), ",", punti, virgole.

Puoi testarlo con comandi / operatori di mysql: 1) LIKE '% searchStringGoesHere%' 2) MATCH CONTRO.

I pannelli come phpmyadmin, forniscono la stessa funzionalità ma per le persone che non conoscono la lingua sql.

In alternativa, qualcuno potrebbe aver eseguito qualche bot SEO sul tuo sito, e questo è stato un attacco di spam, che non ha molto a che fare con la sicurezza, ma potresti introdurre captcha sui tuoi moduli e token per ogni richiesta per prevenire un attacco XSRF

    
risposta data 06.07.2013 - 13:22
fonte
1

Fai due cose immediatamente. (1) esaminare il codice e assicurarsi che tutti gli input utilizzati per costruire query siano quotati o altrimenti reinterpretati anziché utilizzati direttamente per costruire query. Se hai casi in cui è difficile da fare, succhialo, non ci sono sostituti. (2) centalizzare tutte le tue query attraverso un filtro che registra QUALSIASI query che fallisce. Questo probabilmente ti dirà dove (1) non ha avuto successo.

    
risposta data 06.07.2013 - 22:01
fonte

Leggi altre domande sui tag