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/
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()--+-+