💉Laboratorio:Vulnerabilidad de inyección SQL en la cláusula WHERE que permite la recuperación de dato
inyección SQLLa inyección SQL es una vulnerabilidad clásica responsable de muchas violaciones de datos de alto perfil. Permite a un atacante interferir con las consultas que la aplicación envía a su base de datos, lo que podría devolver datos confidenciales de tablas arbitrarias dentro de la base de datos.
¿Qué es la inyección SQL (SQLi)?
La inyección SQL (SQLi) es una vulnerabilidad de seguridad web que permite a un atacante interferir con las consultas que realiza una aplicación a su base de datos. Esto puede permitir que un atacante vea datos que normalmente no puede recuperar. Esto podría incluir datos que pertenecen a otros usuarios o cualquier otro dato al que pueda acceder la aplicación. En muchos casos, un atacante puede modificar o eliminar estos datos, provocando cambios persistentes en el contenido o el comportamiento de la aplicación.
En algunas situaciones, un atacante puede escalar un ataque de inyección SQL para comprometer el servidor subyacente u otra infraestructura de back-end. También puede permitirles realizar ataques de denegación de servicio.
Cómo detectar vulnerabilidades de inyección SQL
Puede detectar la inyección de SQL manualmente utilizando un conjunto sistemático de pruebas en cada punto de entrada de la aplicación. Para hacer esto, normalmente enviarías:
El carácter de comilla simple 'y busca errores u otras anomalías.
Alguna sintaxis específica de SQL que evalúa el valor base (original) del punto de entrada y un valor diferente, y busca diferencias sistemáticas en las respuestas de la aplicación.
Condiciones booleanas como OR 1=1y OR 1=2y busque diferencias en las respuestas de la aplicación.
Cargas útiles diseñadas para desencadenar retrasos de tiempo cuando se ejecutan dentro de una consulta SQL y buscar diferencias en el tiempo necesario para responder.
Cargas útiles de OAST diseñadas para desencadenar una interacción de red fuera de banda cuando se ejecuta dentro de una consulta SQL y monitorear cualquier interacción resultante.
Alternativamente, puede encontrar la mayoría de las vulnerabilidades de inyección SQL de forma rápida y confiable utilizando Burp Scanner.
Recuperar datos ocultos
Imagine una aplicación de compras que muestra productos en diferentes categorías. Cuando el usuario hace clic en la categoría Regalos , su navegador solicita la URL:
Esto hace que la aplicación realice una consulta SQL para recuperar detalles de los productos relevantes de la base de datos:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
Esta consulta SQL solicita a la base de datos que devuelva:
Todos los detalles ( *)
de la productsmesa
donde categoryestaGifts
y releasedes 1.
La restricción released = 1se utiliza para ocultar productos que no se comercializan. Podríamos suponer que para productos inéditos, released = 0
Recuperar datos ocultos - Continuación
La aplicación no implementa ninguna defensa contra ataques de inyección SQL. Esto significa que un atacante puede construir el siguiente ataque, por ejemplo:
SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1
Fundamentalmente, tenga en cuenta que --es un indicador de comentario en SQL. Esto significa que el resto de la consulta se interpreta como un comentario, eliminándolo efectivamente. En este ejemplo, esto significa que la consulta ya no incluye AND released = 1. Como resultado, se muestran todos los productos, incluidos aquellos que aún no se han lanzado.
Puedes utilizar un ataque similar para hacer que la aplicación muestre todos los productos en cualquier categoría, incluidas las categorías que no conocen:
SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1
La consulta modificada devuelve todos los elementos donde es categoryo Giftses 1igual a 1. Como 1=1siempre ocurre, la consulta devuelve todos los elementos.
Advertencia
Tenga cuidado al inyectar la condición OR 1=1en una consulta SQL. Incluso si parece inofensivo en el contexto en el que se está inyectando, es común que las aplicaciones utilicen datos de una única solicitud en varias consultas diferentes. Si su condición llega a una declaración UPDATEo DELETE, por ejemplo, puede resultar en una pérdida accidental de datos.
Laboratorio: Vulnerabilidad de inyección SQL en la cláusula WHERE que permite la recuperación de datos ocultos
APRENDIZ
LABORATORIONo resuelto
Esta práctica de laboratorio contiene una vulnerabilidad de inyección SQL en el filtro de categoría de producto. Cuando el usuario selecciona una categoría, la aplicación realiza una consulta SQL como la siguiente:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
Para resolver la práctica de laboratorio, realice un ataque de inyección SQL que haga que la aplicación muestre uno o más productos inéditos.