inyección de SQL en varias tablas

6

Si un sitio web tiene varias aplicaciones web, cada una de ellas está conectada a diferentes tablas en una base de datos y todas las aplicaciones están protegidas de la inyección SQL, excepto una; ¿Se puede usar esa aplicación web para leer / modificar / atacar otras tablas en la base de datos mediante inyección SQL?

    
pregunta Bob Joe 22.10.2013 - 02:28
fuente

2 respuestas

5

Sí, según la seguridad de la base de datos subyacente, un solo ataque de Inyección de SQL puede afectar a otras tablas en la misma base de datos e incluso a tablas en diferentes bases de datos o en casos muy específicos, tablas que se ejecutan en diferentes instancias de bases de datos.

Incluso es posible actualizar / leer desde varias tablas a la vez usando una sola consulta de base de datos. Ya que has etiquetado tu pregunta como mysql, aquí hay una consulta de MySQL para actualizar varias tablas:

UPDATE Books, Orders
SET Orders.Quantity=Orders.Quantity+2,
Books.InStock=Books.InStock-2
WHERE Books.BookID=Orders.BookID
 AND Orders.OrderID = 1002;

La lectura es tan simple como usar una ÚNETE:

   SELECT t1.name, t2.otherColumn 
   FROM Table1 as t1
   LEFT JOIN Table2 as t2
   ON t1.id = t2.id

Obviamente, la efectividad de estas consultas dependerá de la estructura de la tabla subyacente, pero es absolutamente posible leer tablas múltiples o involuntarias utilizando la inyección SQL.

Un ejemplo de cuándo esto no sería posible es si las tablas en cuestión pertenecen a esquemas diferentes, cada uno con una cuenta específica a la que se puede acceder. Ejemplo:

app1.ImportantTable
app2.OtherTable
app3.BigTable

Si cada uno de estos esquemas está configurado para permitir solo el acceso de un usuario diferente, entonces no puede haber acceso no deseado. Por lo tanto, si hay una configuración App1User en la base de datos que solo puede leer / modificar el esquema app1 , no podrá seleccionar datos de las tablas en el esquema app2 .

    
respondido por el Abe Miessler 22.10.2013 - 02:35
fuente
4

Depende completamente de los permisos otorgados al usuario de la base de datos que usa la aplicación para acceder a la base de datos.

En el mejor de los casos, no, el usuario no tendrá acceso a ningún dato o tabla que no necesite para realizar las acciones que la aplicación requiere que realice. (En el mejor de los casos, no tiene acceso directo a ninguna tabla en absoluto, sino solo permisos para ejecutar procedimientos predefinidos que devuelven datos específicos y limitados).

En el peor de los casos, no solo puede acceder a otras tablas de la base de datos que pertenecen a otras aplicaciones, sino a otras bases de datos y al servidor en el que se ejecuta el motor de la base de datos, ya la red en la que el servidor ejecuta el motor de la base de datos. está conectado a.

Los permisos excesivos otorgados al usuario que usa una aplicación para acceder a una base de datos, en otras palabras, pueden ser muy, muy peligrosos. Es muy importante asegurarse de que los usuarios de la base de datos estén restringidos adecuadamente solo a los objetos y datos a los que realmente necesitan acceder para realizar las funciones requeridas por la aplicación, y nada más.

    
respondido por el Xander 22.10.2013 - 03:05
fuente

Lea otras preguntas en las etiquetas