Resolución de los laboratorios “apprentice” SQLi de PortSwigger

SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

Instrucciones:

This lab contains a SQL injection vulnerability in the product category filter. When the user selects a category, the application carries out a SQL query like the following:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
To solve the lab, perform a SQL injection attack that causes the application to display one or more unreleased products.

Resolución

Al momento de entrar al sitio podemos encontrar unos filtros que podemos aplicar:

Intentamos con “Gifts” pero capturamos esto con el proxy de BurpSuite:

Vemos que se aplica el filtro con un parámetro enviado por medio de una petición “GET”. Enviamos esto al “Repeater” y experimentamos con este parámetro, primeramente agregando un ' o " para cerrar la petición:

Al marcarnos error, posiblemente el parámetro esté provocando un error en la query que se está ejecutando en el back-end del sitio. Esto posiblemente esté así:

1
SELECT * FROM products WHERE category = 'Gifts'' AND released = 1

Este problema lo podemos solucionar agregando -- -, que en SQL (especialmente en MySQL o MariaDB) significa que el siguiente texto es un comentario (los comentarios son ignorados al momento que se ejecuta una sentencia en MySQL o MariaDB):

1
SELECT * FROM products WHERE category = 'Gifts'-- ' AND released = 1

Así que intentemos con la última:

Con esto ahora podemos observar un producto que no se estaba mostrando anteriormente. Podemos jugar un poco más con este laboratorio agregando más sentencias como la sentencia OR y que nos muestre todos los productos con released = 0:

' OR released = 0 -- - 

SQL injection vulnerability allowing login bypass

Instrucciones

This lab contains a SQL injection vulnerability in the login function.
To solve the lab, perform a SQL injection attack that logs in to the application as the administrator user.

Resolución

Como indican las instrucciones, existe un SQLi en el login del sitio. Esto es indicio de un SQLi básico, en el que podemos inyectarlo sin necesidad de contraseña.

Nos dirigimos al login y capturamos un intento de autenticación con BurpSuite:

Con esta petición capturada, ahora inyectamos el SQLi en el apartado de username:

1
administrator' OR '1'='1

Ya con la query lista, la enviamos: