Lab 6 SQLi PortSwigger Academy

Introducción

LABORATORIO 6: SQL injection attack, listing the database contents on Oracle

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 para que pueda usar un ataque UNION para recuperar datos de otras tablas.

La aplicación tiene una función de inicio de sesión y la base de datos contiene una tabla que contiene nombres de usuario y contraseñas. Debe determinar el nombre de esta tabla y las columnas que contiene, luego recuperar el contenido de la tabla para obtener el nombre de usuario y la contraseña de todos los usuarios.

Solución

Enumerar el número de columnas que devuelve la consulta

Determinemos el número de columnas que devuelve la consulta y qué columnas contienen datos de texto. Para ello, utilizamos la siguiente petición:

' UNION SELECT NULL,NULL FROM dual--

En este caso nos devuelve dos columnas. Debemos ir probando añadiendo diferentes NULL a la petición hasta que devuelva un error como el siguiente.

En este ejemplo, enviaríamos una petición para probar si existen tres columnas, erpo devuelve error por lo que existen 2 o menos.

Consultar las tablas de la base de datos

Una vez que hayamos verificado que tenemos dos columnas que permiten texto, comenzaremos a consultar la base de datos en busca de los nombres de todas las tablas. En lugar de consultar la tabla ‘information_schema’ que utilizamos en el laboratorio anterior, esta vez debemos consultar ‘all_tables’. La siguiente sintaxis nos devolverá todas las tablas que se encuentran actualmente en la base de datos. Es importante tener en cuenta que es posible que la visualización directa a través de Burp no muestre todas las tablas. Tuvimos que volver al modo sin procesar para encontrar la tabla de usuario.

'+UNION+SELECT+table_name,NULL+FROM+all_tables--

Consultar las columnas de la tabla

Una vez que tengamos el nombre de la tabla, en este caso ‘USERS_BDOKHS’, podemos comenzar a consultar las columnas dentro de esa tabla. Para hacer esto, necesitamos usar ‘all_tab_columns’ y especificar la tabla que encontramos usando el comando anterior. Como pueden ver en la siguiente captura de pantalla, esto produce dos resultados: ‘PASSWORD_ALKCAO’ y ‘USERNAME_WWAQCO’.

'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_BDOKHS'--

Consultar los datos de las columna

Ahora tenemos todo lo que necesitamos para consultar el directorio de la tabla y hacer que nos muestre sus secretos. La siguiente captura de pantalla ilustra que hemos podido volcar el contenido de ‘USERS_BDOKHS’, incluyendo los nombres de usuario y las contraseñas de los usuarios administradores. Con esta información, deberíamos ser capaces de completar nuestro laboratorio.

'+UNION+SELECT+PASSWORD_ALKCAO,+USERNAME_WWAQCO+FROM+USERS_BDOKHS--

Y ya podremos resolver el laboratorio con las credenciales de administrador encontradas.

No responses yet

Deja una respuesta

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