Mi sitio acaba de ser golpeado con un ataque de inyección SQL, ¿cómo puedo saber qué estaban haciendo?

9

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 '' ~redacted@redacted.com'~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.

    
pregunta joshg 19.02.2013 - 23:45
fuente

1 respuesta

6

Primero debes verificar si tu usuario de mysql tiene el FILE privilegio. Si es así, considere el sistema completamente comprometido.

Las inyecciones que proporcionó junto con el error 'entrada duplicada' son un claro ejemplo de inyección de SQL basada en errores .

mysql_query de PHP no admite más de una consulta, por lo que no es posible insertar / actualizar / eliminar de una consulta de selección en su aplicación. Pero si su aplicación tiene una consulta de inserción / actualización / eliminación que es vulnerable a la inyección de SQL (lo cual es muy probable), entonces es posible manipular la base de datos.

    
respondido por el Zzz 20.02.2013 - 05:36
fuente

Lea otras preguntas en las etiquetas