Ataque de inyección SQL - Defensas de permisos

0

Los ataques de inyección de SQL funcionan cuando el atacante coloca un SQL válido en el texto que se remonta de la página al servidor; algo como "Eliminar * de tblAccounts donde 1 = 1" Lo que no entiendo es por qué esto no se puede eliminar al dar a la cuenta que la publicación de un usuario web se ejecuta como permisos de solo lectura. No solo eso, sino también de solo lectura en las tablas que desea que lea, y sin acceso a ninguna otra tabla. En el pasado, uno podía otorgar permisos muy granulares en bases de datos, hasta el nivel de fila.

    
pregunta Mike 27.05.2015 - 23:23
fuente

2 respuestas

3

Una inyección de SQL agrega un nuevo comando SQL al comando que el sitio web utiliza para recuperar / actualizar / agregar datos a la base de datos. Dado que casi todos los sitios web que usan una base de datos necesitan tener algunas tablas para escribir en el atacante, siempre se pueden agregar datos allí.

Más importante aún, la mayoría de las veces la base de datos contiene información que no está disponible para todos los usuarios del sitio web (como, por ejemplo, la tabla de usuarios con direcciones de correo electrónico y contraseñas de nombres de usuarios (-hashes). )

Cuando se aplica la seguridad en profundidad, bloquea el usuario de la base de datos que el sitio web utiliza para acceder solo a aquellos a los que el sitio necesita acceso (tan limitado como sea necesario) Esto no elimina el riesgo de una inyección, solo limita la extensión de la propagación. pero todas las tablas disponibles para el sitio web están disponibles para un usuario de inyección cuando la inyección de SQL no está mitigada.

    
respondido por el LvB 27.05.2015 - 23:40
fuente
1

Su solución solo funcionaría en un conjunto muy estrecho de circunstancias. Es raro que el usuario de la base de datos y la persona que ve su sitio web tengan exactamente el mismo conjunto de permisos, que es el escenario que está imaginando.

Imagina este escenario:

seleccione passwordhash from usernamePasswordtable donde username = $ username;

Incluso si pudiera limitar esto a un usuario de base de datos que SOLO realiza inicios de sesión Y Y su base de datos permite limitar el acceso al nivel de la fila (generalmente no he visto esto), todavía tiene que abrir el acceso al usuario de inicio de sesión a todos los usuarios activos en la tabla usernamePassword. Un ataque de inyección SQL podría permitir fácilmente que un atacante inicie sesión como un usuario diferente, dado que podría poner lo que quiera en $ username.

También hay varios otros problemas, el menor de los cuales es tener que tener un usuario de base de datos para todos y cada uno de los usuarios de su sitio web.

El único escenario en el que esto podría funcionar es si su sitio web es totalmente público y todo en su base de datos ya está publicado en su sitio web. Entonces la ejecución de solo lectura podría funcionar.

    
respondido por el Steve Sether 28.05.2015 - 00:06
fuente

Lea otras preguntas en las etiquetas