SQLI Lab 8
Skills
- SQL injection UNION attack, finding a column containing text
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
contiene una vulnerabilidad
de inyección SQL
en el filtro
de categoría
de productos
. Los resultados de la consulta
se devuelven en la respuesta
de la aplicación
, por lo que podemos usar un ataque UNION
para recuperar datos de otras tablas. Para construir este tipo de ataque, primero necesitamos determinar
el número
de columnas
que devuelve la consulta. El siguiente paso es identificar
una columna
que sea compatible
con una cadena
de texto
. El laboratorio proporcionará un valor aleatorio
que necesitas hacer aparecer dentro de los resultados de la consulta
. Para resolver el laboratorio, hay que realizar un ataque
de inyección SQL UNION
que devuelva una fila adicional con el valor proporcionado. Esta técnica nos ayudará a determinar qué columnas
son compatibles
con datos de tipo cadena
Resolución
Al acceder
a la web
nos sale esto
Si hacemos click
en alguno de los filtros
, nos filtrará los artículos por esta categoría
Capturamos
la petición
con Burpsuite
y añadimos
una comilla
simple '
Si enviamos esta petición nos devolverá un Internal Server Error
, lo cual quiere decir que estamos interfiriendo
con la consulta SQL
que se está produciendo
Si usamos este payload
mediante el cual añadimos una comparación que siempre
es verdad
como 1=1
, ignoramos el resto de la consulta SQL con -- -
y enviamos la petición nuevamente no obtenemos ningún fallo, lo que quiere decir que la inyección SQL
ha sido exitosa
1
/filter?category=Pets'+or+1=1--+-+
Usando order by
podemos saber el número
de columnas
que tiene la tabla
, empleando este payload el resultado es un 200 OK
1
/filter?category=Pets'+order+by+3--+-+
Sin embargo, si empleamos este otro payload
donde hacemos order by 4
, nos devuelve un Internal Server Error
, esto se debe a que al no existir tres columnas nos arroja
un fallo
1
/filter?category=Pets'+order+by+4--+-+
Una vez sabemos el número de columnas, usando union select
vamos a obtener la información, en este caso, como no hemos recibido ningún error
, podemos descartar que la base
de datos
usada sea Oracle
debido a que en Oracle
debemos añadir from dual
al final para evitar errores
1
/filter?category=Pets'+union+select+null,null,null--+-+
Confirmamos la base
de datos
en uso y también el su versión
1
/filter?category=Pets'+union+select+null,version(),null--+-+
Identificamos el campo inyectable
1
/filter?category=Pets'+union+select+null,'XNCHkp',null--+-+