Entonces, una página en mi sitio (es una página de PHP que muestra artículos de boletines informativos) era vulnerable a la inyección de SQL y fue golpeada. Lo descubrí porque estaba haciendo suficientes consultas de base de datos para hacer que la carga de la CPU aumentara en el servidor de la base de datos. Encontré al menos algunas de las direcciones IP que lo estaban haciendo desde mis registros de Apache y las bloqueé en el firewall, y al menos endurecí la página. Lo que estoy tratando de determinar es exactamente qué consultas estaban ejecutando, ocultaron / escaparon las cosas bastante bien. Esta es la cadena de consulta que estoy encontrando en los registros de Apache:
? id = 742% 2F -% 2F% 2F! 30000and (seleccione% 2F -% 2F1% 2F -% 2Ffrom) (seleccione% 2F -% 2Fcount ()% 2Cconcat ((seleccione% 2F-- % 2F (seleccione% 2F -% 2F (seleccione% 2F -% 2Fconcat (0x27% 2C0x7e% 2Cunhex (Hex (cast (sbamail.email% 2F -% 2Fas% 2F -% 2Fchar))) 2C0x27% 2C0x7e)% 2F -% 2Fde% 2F -% 2Femail.sbamail% 2F -% 2Flimit% 2F -% 2F284079% 2C1)% 2F -% 2F)% 2F -% 2Fde% 2F -% 2Finformation_schema .tables% 2F -% 2Flimit% 2F -% 2F0% 2C1)% 2Floor (rand (0) 2)) x% 2F -% 2Fde% 2F -% 2Finformation_schema.tables% 2F -% 2Fgroup% 2F -% 2Fby% 2F -% 2Fx) a)% 2F -% 2Fand% 2F -% 2F1% 3D1% 2F
Esto es lo que estaba mostrando la base de datos para las consultas en ejecución:
seleccione el título de newsletter_articles donde article_id = 2010 / - //! 30000and (seleccione / - / 1 / - / from (seleccione / - / count (), concat ((seleccione / - / (seleccione /--/(select/--/concat(0x27,0x7e,unhex(Hex(cast(sbamail.email/--/as/--/char)))),0x27,0x7e)/--/from/- - / email.sbamail / - / limit / - / 119488,1) / - /) / - / from / - / information_schema.tables / - / limit / - / 0,1), floor (rand (0) 2)) x / - / from / - / information_schema.tables / - / group / - / by / - / x) a) / - / and / - / 1 = 1 /
(ambos de esos repetidos anuncios en la náutica con cambios menores en los parámetros) Cuando intenté volver a pegar esa consulta en MySQL, aparece un error de sintaxis.
Cuando en realidad pego esa cadena de consulta en la página afectada (antes de parchearla), simplemente muestra esto:
Entrada duplicada '' [email protected]'~1 'para la clave' group_key '
El bit de "entrada duplicada" es lo que realmente me preocupa. Inicialmente pensé que estaban justo después de las direcciones de correo electrónico (afortunadamente, no hay contraseñas almacenadas en esta base de datos); sucedió antes en otras páginas y todo lo que puedo ver son declaraciones "selectas", pero si pudieron insertar / actualizar / eliminar, las noticias son mucho peores. ¿Cómo puedo escapar o decodificar lo que estaban haciendo? ¿Debo entrar en pánico y buscar restaurar la base de datos desde la copia de seguridad?
La página en cuestión está en una pila LAMP bastante básica, si eso es relevante. Sin marco ni nada.