Ho creato un negozio online per un mio amico.
Ho creato un sistema che mi spara un'e-mail ogni volta che si verifica un errore del database, in questo modo se si tratta di un bug nel mio codice posso identificarlo e correggerlo. L'e-mail include dettagli sulla query non riuscita, i dati che sono stati passati, i dati di sessione, ecc.
Bene, alle 3:05 di questa mattina ho ricevuto circa 120 email in cinque minuti. per un errore del database e guardando a quello che stava accadendo, posso rapidamente dire che si trattava di un attacco di iniezione mysql. Dopo aver esaminato una serie di cose che l'aggressore ha tentato, mi chiedo in qualche modo cosa avrebbero effettivamente fatto alcuni dei comandi sql che stavano cercando di passare.
Dopo aver esaminato l'intero database e i file sul sito, sono quasi sicuro al 99% che nulla è stato danneggiato, cancellato o modificato. Il che mi rende felice di sapere che sono abbastanza esperto nel mio php per sapere come prevenire queste cose.
La mia domanda è, dei comandi mysql seguenti, che cosa stava tentando di fare l'attaccante?
or 1=convert(int,(select cast(Char(114)+Char(51)+Char(100)+Char(109)+Char(48)+Char(118)+Char(51)+Char(95)+Char(104)+Char(118)+Char(106)+Char(95)+Char(105)+Char(110)+Char(106)+Char(101)+Char(99)+Char(116)+Char(105)+Char(111)+Char(110) as nvarchar(4000))))--
; if (1=1) waitfor delay \'00:00:07\'--
union all select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null--
999999.9 union all select 0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536--
leachiancs\' and \'x\'=\'x
Grazie per le informazioni.
Ulteriori informazioni
La query eseguita per ogni attacco era semplice
SELECT * FROM tableName WHERE $phpVar AND price!='sold' ORDER BY id DESC
$ phpVar viene popolato in base a se una voce $ _GET corrisponde a un termine in un array acceptTerms.
quindi la query letterale in esecuzione e che restituiva un errore era
SELECT * FROM tableName WHERE AND price!='sold' ORDER BY id DESC
Questo è ciò che ha lanciato il follow
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND price!='sold' ORDER BY id DESC' at line 1