PortSwigger - SQL injection attack, listing the database contents on Oracle.
August 2022
Solución
Primero hacemos click en el botón Gifts o en cualquier otro.

Como en los demás retos la SQL injection está en la url.
Para comenzar a enumerar en Oracle siempre debemos especificar una tabla, pero como no conocemos ninguna usaremos dual.
' UNION SELECT null from dual-- -

Con un solo null la página nos devuelve un error, pero si seguimos agregando nos damos cuenta que existen 2 columnas.
' UNION SELECT null,null from dual-- -

Ahora es tiempo de enumerar el nombre de la tabla donde se encuentran las credenciales, para eso usaremos la tabla all_tables y seleccionaremos el nombre de las tablas con table_name.
' UNION SELECT table_name,null from all_tables-- -

Con CTRL + f escribimos USERS y podemos encontrar de manera más rapida la tabla que nos interesa USERS_XKMLUO.

Ahora enumeraremos los nombres de las columnas. Para eso usaremos la tabla all_tab_columns, le indicaremos que queremos la columna column_name y que nos muestro solo la tabla con nombre USERS_XKMLUO.
' UNION SELECT column_name,null from all_tab_columns where table_name = 'USERS_XKLMUO'-- -
- Ten en cuenta que la string después del guión bajo (
_XKLMUO) es aleatorio para cada usuario, por lo tanto, la tuya será diferente a la mía. Además ten en consideración las mayúsculas, escribe la tabla y las columnas en maýusculas cuando corresponda. Finalmente ten cuidado con las comillas porque también puede darte error.

Podemos ver que nos devuelve los 2 nombres de las columnas PASSWORD_UJZJJK y USERNAME_HIFSMI.

Con esta información podemos terminar de construir nuestro query.
Primero reemplazamos los null por los nombres de las columnas y le indicamos sobre qué tabla debe sacar la información.
' UNION SELECT PASSWORD_UJZJJK,USERNAME_HIFSMI from USERS_XKLMUO-- -

Podemos ver las credenciales de la cuenta de administrador.

Hacemos click en el botón My account.

Ingresamos las credenciales.

Y resolvemos el laboratorio.
