¡Nivel desbloqueado!
Completa los desafíos para convertirte en un experto en Inyección SQL.
La página de login de "ShopSafe" es vulnerable. Tu misión: acceder como 'admin' sin saber la contraseña.
La petición SQL se origina de una concatenación insegura de las entradas de un usuario remoto. Esta entrada está entre comillas simples, pero en caso de que la entrada tenga una comilla simple, esa cerraría el string. Como primera inyección, es recomendable intentar ' -- .
El buscador de productos es vulnerable. Usa un ataque UNION para extraer los nombres de usuario y contraseñas de la tabla 'users'.
La consulta original selecciona 2 columnas. Es posible cerrar la cadena con ' y luego unir una consulta que seleccione 2 columnas de la tabla users, como username, password.
No verás un error ni datos, pero puedes confirmar la vulnerabilidad si el servidor tarda en responder. Inyecta un comando que cause un retraso de 3 segundos.
Usar un payload que ejecute una función de espera. Para esta demo, la función se llama SLEEP(seconds). Es recomendable probar con algo como ' AND SLEEP(3)--.
El sistema muestra mensajes de error de la base de datos. Intenta provocar un error para revelar información sensible usando una inyección en el campo de búsqueda.
Los errores de MySQL a menudo revelan información valiosa. Es posible usar information_schema con una subconsulta que fuerce un error. Las funciones como FLOOR(RAND()*2) y COUNT(*) pueden ayudar.
El sistema permite ordenar los resultados. Intenta manipular el parámetro de orden para provocar un error o filtrar información.
En SQLite, el ORDER BY es menos flexible para inyecciones directas de UNION SELECT que en otros SGBD. Es posible provocar un error SQL con una subconsulta inválida, o usar expresiones CASE WHEN...END para inferir datos alterando el orden. Un UNION SELECT que sea aceptado sintácticamente (aunque no muestre datos de otra tabla limpiamente) también es una manipulación válida.
El sistema usa una subconsulta para obtener un owner_id basado en tu entrada: (SELECT id FROM users WHERE username = '[INPUT]' AND role='administrator'). Intenta inyectar en el campo [INPUT] para que la subconsulta devuelva el id del administrador, incluso si no sabes su nombre de usuario.
La subconsulta busca un username específico Y que el role sea 'administrator'. Es posible inyectar algo como x' OR 1=1 -- para hacer que toda la condición sea verdadera, o x' OR username='admin' -- si se conoce el nombre del administrador.
// Esperando una interacción...
// Esperando una interacción...